// MigrazioniConvertire 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.
- Fai l’inventario degli oggetti procedurali prima di stimare: quanti sono, quanto sono grandi, quali sono ancora chiamati davvero.
- Separa il convertibile in automatico da ciò che va riscritto. È qui che si decide il preventivo, non a fine progetto.
- Converti a blocchi e collauda a blocchi, con dati reali anonimizzati: un big bang su questa materia non si controlla.
- Confronta i comportamenti, non il codice: stessi input, stessi output, comprese le condizioni di errore.
- 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.
ParliamonePagina aggiornata al 10 agosto 2026.