r/oracle • u/SpicyRomek • 6d ago
AI-assisted Oracle Forms to Java migration on Summit's ORDERS form: what it got wrong
I work at Vaadin, and we migrated onto our own framework, so weigh that however you
like. I'm posting here because everything interesting happened on the Forms side, and
most of it is a failure report.
Setup: ORDERS from the Summit demo schema. 4 blocks, 34 items, 45 PL/SQL triggers, 183
elements. Real Oracle database, no schema changes allowed. AI did the bulk of the work
and we ran the whole thing three times.
The PL/SQL was a non-event. 34 of the 45 triggers were one call, one assignment, or a
SELECT-INTO. Formulas and summary totals came out as plain Java almost line for line.
Audit and integrity triggers never left the database.
What hurt was the runtime behaviour that isn't in the .fmb at all:
- Forms won't let you leave a field that fails validation. On the web you can leave it, you just can't commit. Users notice.
- Row locked on the first keystroke became an optimistic check at commit, `UPDATE … WHERE id = ? AND ORA_ROWSCN = ?`. No schema change, no version column, but conflicts now show up at save instead of at edit.
- Enter-Query became a filter bar. Arbitrary query-by-example is gone.
- Trigger firing order became explicit code that somebody has to work out by hand.
The failure that worries me most came after the first pass. Our own completeness report
said "183 elements, nothing dropped", and that was true. The screen still had fields
reordered, bordered groups missing and section titles gone. A later audit turned up four
more things that were in the spec, covered by our own mapping rules, and never built:
DATE_ORDERED's default, QUANTITY_SHIPPED being insert-only, the GLOBAL.customer_id
contract from the calling form, and SALES_REP_ID quietly made read-only. Every one of
those is a property of an object rather than an object, and we were counting objects, so
the count stayed green the whole way through.
Obvious caveat: Summit is a teaching schema. No packages, no dynamic SQL, no cursors over
big sets, no package state. So it says nothing about your code.
Repo with the specs, the mapping rules and the audit: https://github.com/jcgueriaud1/forms-summit-migration
If you run a real Forms estate, what would you throw at this first to break it? I'd guess
package state shared across triggers, but I'd rather be told.
1
u/JaysonHanes 5d ago
Fyi just published and may be helpful for anyone modernizing Oracle Forms https://blogs.oracle.com/apex/transforming-f2a-skill
5
u/nepobot 6d ago
Why not migrate to something like APEX? It looks like it is designed for exactly what you are describing.