Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Identifies Oracle-to-PostgreSQL migration risks by cross-referencing code against known behavioral differences (empty strings, refcursors, type coercion, sorting, timestamps, concurrent transactions, etc.). Use when planning a database migration, reviewing migration artifacts, or validating that integration tests cover Oracle/PostgreSQL differences.
.claude/skills/reviewing-oracle-to-postgres-migration/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 81% | 0% |
| case-02 | ✗→✓ | ▲ Improved | -1% | 0% |
| case-09 | ✗→✓ | ▲ Improved | -2% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 31% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 30% | 0% |
Surfaces migration risks and validates migration work against known Oracle/PostgreSQL behavioral differences documented in the references/ folder.
Determine the task type:
Planning a migration? Follow the risk assessment workflow. Validating completed work? Follow the validation workflow.
Risk Assessment:
- [ ] Step 1: Identify the migration scope
- [ ] Step 2: Screen each insight for applicability
- [ ] Step 3: Document risks and recommended actionsStep 1: Identify the migration scope
List the affected database objects (procedures, triggers, queries, views) and the application code that calls them.
Step 2: Screen each insight for applicability
Review the reference index in references/REFERENCE.md. For each entry, determine whether the migration scope contains patterns affected by that insight. Read the full reference file only when the insight is potentially relevant.
Step 3: Document risks and recommended actions
For each applicable insight, note the specific risk and the recommended fix pattern from the reference file. Flag any insight that requires a design decision (e.g., whether to preserve Oracle empty-string-as-NULL semantics or adopt PostgreSQL behavior).
Validation:
- [ ] Step 1: Map the migration artifact
- [ ] Step 2: Cross-check applicable insights
- [ ] Step 3: Verify integration test coverage
- [ ] Step 4: Gate the resultStep 1: Map the migration artifact
Identify the migrated object and summarize the change set.
Step 2: Cross-check applicable insights
For each reference in references/REFERENCE.md, confirm the behavior or test requirement is acknowledged and addressed in the migration work.
Step 3: Verify integration test coverage
Confirm tests exercise both the happy path and the failure scenarios highlighted in applicable insights (exceptions, sorting, UNION ALL behavior/performance risks, refcursor consumption, concurrent transactions, timestamps, materialized-view freshness, etc.).
Step 4: Gate the result
Return a checklist asserting each applicable insight was addressed, migration scripts run, and integration tests pass.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 47,799 | 17,051 | -64% | 1 | 1 | 0% | 1,961 | 3,556 | +81% | 0 | 0 | — |
case-02 | fail→pass | 19,710 | 15,355 | -22% | 1 | 1 | 0% | 3,433 | 3,411 | -1% | 0 | 0 | — |
case-03 | pass→pass | 14,421 | 7,029 | -51% | 1 | 1 | 0% | 2,347 | 1,702 | -27% | 0 | 0 | — |
case-04 | pass→pass | 16,690 | 8,499 | -49% | 1 | 1 | 0% | 2,602 | 1,968 | -24% | 0 | 0 | — |
case-05 | pass→pass | 14,370 | 14,765 | +3% | 1 | 1 | 0% | 2,286 | 3,245 | +42% | 0 | 0 | — |
case-06 | fail→fail | 12,662 | 4,843 | -62% | 1 | 1 | 0% | 2,072 | 1,354 | -35% | 0 | 0 | — |
case-07 | pass→pass | 15,498 | 10,968 | -29% | 1 | 1 | 0% | 2,429 | 2,390 | -2% | 0 | 0 | — |
case-08 | pass→pass | 16,625 | 16,126 | -3% | 1 | 1 | 0% | 2,702 | 2,879 | +7% | 0 | 0 | — |
case-09 | fail→pass | 7,422 | 3,005 | -60% | 1 | 1 | 0% | 1,083 | 1,064 | -2% | 0 | 0 | — |
case-10 | fail→pass | 13,130 | 13,755 | +5% | 1 | 1 | 0% | 2,270 | 2,985 | +31% | 0 | 0 | — |
case-11 | pass→pass | 13,460 | 8,868 | -34% | 1 | 1 | 0% | 1,915 | 2,002 | +5% | 0 | 0 | — |
case-12 | fail→pass | 12,191 | 12,842 | +5% | 1 | 1 | 0% | 2,162 | 2,810 | +30% | 0 | 0 | — |
case-13 | pass→pass | 20,553 | 18,685 | -9% | 1 | 1 | 0% | 3,359 | 3,734 | +11% | 0 | 0 | — |
case-14 | pass→pass | 16,684 | 17,134 | +3% | 1 | 1 | 0% | 2,713 | 3,384 | +25% | 0 | 0 | — |
case-15 | pass→pass | 18,638 | 16,104 | -14% | 1 | 1 | 0% | 3,220 | 3,302 | +3% | 0 | 0 | — |
case-16 | pass→pass | 15,212 | 16,617 | +9% | 1 | 1 | 0% | 2,598 | 3,487 | +34% | 0 | 0 | — |
case-17 | pass→pass | 8,704 | 4,099 | -53% | 1 | 1 | 0% | 1,453 | 1,265 | -13% | 0 | 0 | — |
case-18 | pass→pass | 20,412 | 4,262 | -79% | 1 | 1 | 0% | 1,986 | 1,292 | -35% | 0 | 0 | — |
case-19 | pass→pass | 12,112 | 13,147 | +9% | 1 | 1 | 0% | 2,107 | 2,781 | +32% | 0 | 0 | — |
case-20 | fail→fail | 23,226 | 21,062 | -9% | 1 | 1 | 0% | 3,986 | 4,150 | +4% | 0 | 0 | — |
case-21 | fail→fail | 10,506 | 8,121 | -23% | 1 | 1 | 0% | 1,785 | 1,923 | +8% | 0 | 0 | — |
case-22 | pass→pass | 20,638 | 14,068 | -32% | 1 | 1 | 0% | 3,455 | 2,817 | -18% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 21 counted toward the lift figure. The other 1 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +23 percentage points is the difference between those two pass rates over the 21 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
| Model | Method | Date | Lift |
|---|---|---|---|
| gemini-3.6-flash | verified | 7/26/2026 | -8% |
Other measured skills in the registry, with their headline benchmark lift.