Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
acedergren avatar

Sqlite To Oracle Planner

  • 9 installs
  • 22 repo stars
  • Updated May 28, 2026
  • acedergren/agentic-tools

sqlite-to-oracle-planner is a Claude Code skill that scans a Node.js/TypeScript codebase for SQLite usage and produces a structured Oracle migration manifest.

About

This skill plans a SQLite-to-Oracle migration on a Node.js or TypeScript codebase. It scans in five passes for imports, data files, connection strings, schema syntax, and SQLite fallback branches, then emits a structured [SQLITE_REPLACE] migration manifest. A developer uses it before implementing an Oracle migration so each touch point becomes an atomic task for later agents. It plans only and does not change code.

  • Planning-only skill that scans a Node/TS codebase for all SQLite touch points
  • Five-pass scan: imports, data files, connection strings, schema syntax, fallback branches
  • Produces a [SQLITE_REPLACE] migration manifest for implementation agents

Sqlite To Oracle Planner by the numbers

  • 9 all-time installs (skills.sh)
  • Ranked #666 of 911 Databases skills by installs in the Skillselion catalog
  • Data as of Jul 28, 2026 (Skillselion catalog sync)
At a glance

sqlite-to-oracle-planner capabilities & compatibility

Capabilities
db migration plan · codebase scan · schema mapping
Works with
oracle
Use cases
database · refactoring · research
Pricing
Free
From the docs

What sqlite-to-oracle-planner says it does

This is a **planning-only** skill. Search, read minimally, and produce the manifest. Do NOT implement changes. Use Glob and Grep — never read entire files to scan them.
SKILL.md
Conditional branches that fall back to SQLite when Oracle is unavailable must be removed entirely — not just replaced.
SKILL.md
npx skills add https://github.com/acedergren/agentic-tools --skill sqlite-to-oracle-planner

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs9
repo stars22
Last updatedMay 28, 2026
Repositoryacedergren/agentic-tools

What it does

Scan a Node/TS codebase for SQLite usage and produce a SQLite-to-Oracle migration manifest.

Who is it for?

Inventorying SQLite imports, schema syntax, connection strings, and fallback branches before an Oracle migration.

Skip if: Implementing the migration itself; the skill is planning-only and does not change code.

When should I use this skill?

When starting a SQLite-to-Oracle migration on a Node.js/TypeScript codebase.

What you get

A complete [SQLITE_REPLACE] manifest lists every SQLite touch point with its Oracle equivalent for implementation agents.

  • SQLite migration manifest
  • Per-touchpoint [SQLITE_REPLACE] markers
  • Touch point and task counts

By the numbers

  • Five-pass scan strategy
  • 8-row SQLite-to-Oracle type mapping table

Files

SKILL.mdMarkdownGitHub ↗

SQLite-to-Oracle Planner

Role

This is a planning-only skill. Search, read minimally, and produce the manifest. Do NOT implement changes. Use Glob and Grep — never read entire files to scan them.

Scan Strategy

Work in five passes. Log every hit with file path and line number.

Pass 1 — Dependency Imports

Pattern: better-sqlite3 | sqlite3 | drizzle-orm/sqlite-core | typeorm.*sqlite | @agent-state
Files:   **/*.ts, **/*.js, **/*.mjs, **/*.cjs
Import FoundOracle Equivalent
better-sqlite3oracledb or project Oracle connection pool
sqlite3oracledb
drizzle-orm/sqlite-coreRaw OCI SQL or drizzle-orm with Oracle adapter
typeorm + sqlite drivertypeorm with Oracle driver
@agent-state (SQLite-backed)Oracle-backed state store

Pass 2 — SQLite Data Files

Glob: **/*.db, **/*.sqlite, **/*.sqlite3

These are data files — flag each one. They require data migration, not just code changes.

Pass 3 — Connection Strings and File-Based DB Paths

Pattern: sqlite: | :memory: | \.db['")] | new Database( | createConnection(
Files:   **/*.ts, **/*.js, **/*.env, **/*.env.*
SQLite PatternOracle Equivalent
sqlite:./path/to/db.sqliteOCI connection string / TNS alias
:memory:Oracle SGA (in-memory buffering is automatic)
new Database('file.db')oracledb.getConnection(config)
createConnection({ type: 'sqlite', database: '...' })createConnection({ type: 'oracle', ... })

Pass 4 — Schema Syntax

Pattern: AUTOINCREMENT | INTEGER PRIMARY KEY | TEXT DEFAULT | BLOB | REAL | NUMERIC
Files:   **/*.sql, **/*.ts, **/*.js
SQLite TypeOracle Equivalent
INTEGER PRIMARY KEY AUTOINCREMENTNUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY
TEXT (< 4000 chars)VARCHAR2(4000)
TEXT (unbounded / large)CLOB
BLOBBLOB
REALBINARY_FLOAT or NUMBER
NUMERICNUMBER
BOOLEAN (stored 0/1)NUMBER(1) with CHECK (col IN (0,1))
DATETIME (stored as text)TIMESTAMP WITH TIME ZONE
AUTOINCREMENT sequence in DDLCREATE SEQUENCE + trigger, or GENERATED AS IDENTITY

Pass 5 — Fallback Logic (Most Commonly Missed)

Pattern: sqlite | SQLite | in.memory | fallback.*db | db.*fallback (case-insensitive)
Files:   **/*.ts, **/*.js

Conditional branches that fall back to SQLite when Oracle is unavailable must be removed entirely — not just replaced.

// Examples to flag:
if (process.env.DATABASE_URL?.includes('sqlite')) { ... }    // [SQLITE_REPLACE]
const db = hasOracle ? oracleDB : sqliteDB;                  // [SQLITE_REPLACE]
const adapter = isProd ? 'oracle' : 'sqlite';                // [SQLITE_REPLACE]

Migration Manifest Format

Output this after all five passes. This is the deliverable for implementation agents.

## SQLite Migration Manifest

| File                       | Line | Pattern Found                           | Marker           | Oracle Equivalent                                        |
|----------------------------|------|-----------------------------------------|------------------|----------------------------------------------------------|
| apps/api/src/db/client.ts  | 3    | `import Database from 'better-sqlite3'` | [SQLITE_REPLACE] | `import oracledb from 'oracledb'`                        |
| apps/api/src/db/schema.ts  | 12   | `id INTEGER PRIMARY KEY AUTOINCREMENT`  | [SQLITE_REPLACE] | `id NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY` |
| apps/api/data/state.sqlite | —    | SQLite data file                        | [SQLITE_REPLACE] | Migrate data to Oracle table via INSERT SELECT           |
| apps/api/src/config.ts     | 45   | `sqlite:./data/portal.db`               | [SQLITE_REPLACE] | OCI connection string                                    |
| apps/api/src/app.ts        | 88   | `const db = isProd ? oracle : sqlite`   | [SQLITE_REPLACE] | Remove fallback; Oracle only                             |

**Total touch points: N**
**Estimated implementation tasks: N**
**Data files requiring migration: N**

Each [SQLITE_REPLACE] marker = one atomic implementation unit for Agent 2+.

Common Mistakes

MistakeFix
Reading entire files to searchUse Grep with -n. Never cat a file to scan it.
Skipping Pass 5 (fallback logic)Fallback branches are the trickiest to remove — always run it.
Assuming TEXTVARCHAR2 universallyCheck actual usage. Content > 4000 chars needs CLOB.
Ignoring .db data filesFlag them — they require data migration planning, not just code changes.
Missing drizzle-orm/sqlite-core schema filesDrizzle's Oracle support differs; all schema files need flagging.
Flagging Oracle-side code as SQLiteFilter false positives — sqlite may appear in migration docs or comments.

Related skills

FAQ

Does this skill change my code?

No; it is planning-only. It scans and produces a migration manifest for implementation agents to act on.

What SQLite patterns does it look for?

Dependency imports, .db/.sqlite data files, connection strings, schema syntax like AUTOINCREMENT, and fallback branches that switch to SQLite.

Databasesdatabasesetl

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.