
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)
sqlite-to-oracle-planner capabilities & compatibility
- Capabilities
- db migration plan · codebase scan · schema mapping
- Works with
- oracle
- Use cases
- database · refactoring · research
- Pricing
- Free
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.
Conditional branches that fall back to SQLite when Oracle is unavailable must be removed entirely — not just replaced.
npx skills add https://github.com/acedergren/agentic-tools --skill sqlite-to-oracle-plannerAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 9 |
|---|---|
| repo stars | ★ 22 |
| Last updated | May 28, 2026 |
| Repository | acedergren/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
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 Found | Oracle Equivalent |
|---|---|
better-sqlite3 | oracledb or project Oracle connection pool |
sqlite3 | oracledb |
drizzle-orm/sqlite-core | Raw OCI SQL or drizzle-orm with Oracle adapter |
typeorm + sqlite driver | typeorm with Oracle driver |
@agent-state (SQLite-backed) | Oracle-backed state store |
Pass 2 — SQLite Data Files
Glob: **/*.db, **/*.sqlite, **/*.sqlite3These 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 Pattern | Oracle Equivalent |
|---|---|
sqlite:./path/to/db.sqlite | OCI 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 Type | Oracle Equivalent |
|---|---|
INTEGER PRIMARY KEY AUTOINCREMENT | NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY |
TEXT (< 4000 chars) | VARCHAR2(4000) |
TEXT (unbounded / large) | CLOB |
BLOB | BLOB |
REAL | BINARY_FLOAT or NUMBER |
NUMERIC | NUMBER |
BOOLEAN (stored 0/1) | NUMBER(1) with CHECK (col IN (0,1)) |
DATETIME (stored as text) | TIMESTAMP WITH TIME ZONE |
AUTOINCREMENT sequence in DDL | CREATE 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, **/*.jsConditional 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
| Mistake | Fix |
|---|---|
| Reading entire files to search | Use 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 TEXT → VARCHAR2 universally | Check actual usage. Content > 4000 chars needs CLOB. |
Ignoring .db data files | Flag them — they require data migration planning, not just code changes. |
Missing drizzle-orm/sqlite-core schema files | Drizzle's Oracle support differs; all schema files need flagging. |
| Flagging Oracle-side code as SQLite | Filter 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.