Objlab
// Migrazioni

Convertire stored procedure fra dialetti SQL.

Nelle migrazioni di database la parte che sfonda i preventivi non è spostare i dati: è portare la logica che vive dentro il database. Tabelle e righe si copiano, le stored procedure vanno tradotte, e le differenze fra dialetti non sono di sintassi.

Perché è la voce che sfora

La stima si fa sui dati, il costo arriva dal codice.

  • I dati si contano: tabelle, righe, gigabyte. Il codice procedurale no — si conta in oggetti, ma il tempo dipende da cosa fanno.
  • PL/SQL, T-SQL e PL/pgSQL non sono varianti dello stesso linguaggio: differiscono su transazioni, gestione degli errori, cursori e tipi.
  • La logica nel database è spesso la più vecchia e la meno documentata: chi l’ha scritta non c’è più, e nessuno sa quali casi limite copra.
  • Il collaudo non è confrontare due schemi, è confrontare due comportamenti — e servono i dati veri per farlo.

Dove si rompe davvero

Le differenze che costano non si vedono leggendo il codice.

Transazioni
Chi apre e chiude, e cosa succede a un errore a metà. Un blocco che su Oracle lascia la transazione aperta, altrove ha già fatto rollback.
NULL e stringhe vuote
Oracle tratta la stringa vuota come NULL, gli altri no. È una differenza silenziosa che cambia il risultato delle condizioni, non fa errore.
Tipi numerici e date
Precisione, arrotondamento e fusi orari differiscono. Il totale di una fattura può cambiare all’ultimo decimale, e nessuno se ne accorge in collaudo.
Cursori e cicli
Codice riga per riga che su un motore è accettabile e su un altro diventa proibitivo: si converte, funziona, e va in timeout in produzione.
Funzioni proprietarie
DECODE, NVL, funzioni analitiche e pacchetti di sistema non hanno equivalenti uno a uno: vanno riscritti, e riscritti bene.

Come si affronta

L’ordine che riduce prima l’incertezza, non quello che sembra naturale.

  1. Fai l’inventario degli oggetti procedurali prima di stimare: quanti sono, quanto sono grandi, quali sono ancora chiamati davvero.
  2. Separa il convertibile in automatico da ciò che va riscritto. È qui che si decide il preventivo, non a fine progetto.
  3. Converti a blocchi e collauda a blocchi, con dati reali anonimizzati: un big bang su questa materia non si controlla.
  4. Confronta i comportamenti, non il codice: stessi input, stessi output, comprese le condizioni di errore.
  5. Tieni traccia dei costrutti non convertibili con il rimedio adottato: è la documentazione che manca sempre e serve al primo problema in esercizio.

Tre convinzioni che costano

«Tanto è tutto SQL standard»

Lo è la parte dichiarativa. La logica procedurale è proprietaria per definizione: è nata per sfruttare il motore specifico.

«Convertiamo tutto e poi vediamo»

Convertire ciò che nessuno chiama più è lavoro speso a vuoto. L’inventario dell’uso reale taglia spesso una quota consistente degli oggetti.

«Se compila, funziona»

Le differenze peggiori non danno errore: danno un risultato diverso. Senza confronto sui comportamenti non le vedi finché non le vede il cliente.

Hai una migrazione in preventivo e non sai quanto pesa la parte procedurale? Mandaci un campione e ti diciamo cosa si converte da solo.

Parliamone

Pagina aggiornata al 10 agosto 2026.