Oracle
 sql >> Database >  >> RDS >> Oracle

La tabella creata in una procedura viene eliminata, Ottenere l'errore di compilazione per la procedura

Il codice che deve verificare se esiste una tabella indica un'architettura software errata. Non dovrebbe essere necessario creare tabelle al volo. È un anti-pattern (almeno in Oracle). Tuttavia, vediamo abbastanza spesso variazioni su questo problema, quindi è ovvio che questo anti-modello sta prosperando in natura.

Se è davvero necessario implementare una soluzione del genere (per qualsiasi motivo), l'approccio corretto consiste nel separare il codice di costruzione della tabella dalla tabella utilizzando il codice. Avere pacchetti separati per loro.

begin
    pkg_ddl.build_table_xyz;
    pkg_calc.run_xyz_job;
end;

Se la tabella XYZ non esiste pkg_calc.run_xyz_job() è invalido. Tuttavia la sua invalidità non impedirà pkg_ddl.build_table_xyz() dall'esecuzione. Quindi, quando il programma esterno chiama pkg_calc.run_xyz_job() compilerà la procedura.