Oracle
 sql >> Datenbank >  >> RDS >> Oracle

In einer Prozedur erstellte Tabelle wird gelöscht, Kompilierungsfehler für Prozedur wird angezeigt

Code, der prüfen muss, ob eine Tabelle existiert, weist auf eine schlechte Softwarearchitektur hin. Es sollte keine Notwendigkeit bestehen, Tabellen spontan zu erstellen. Es ist ein Anti-Pattern (zumindest in Oracle). Wir sehen jedoch oft genug Variationen dieses Problems, daher ist es offensichtlich, dass dieses Anti-Pattern in freier Wildbahn gedeiht.

Wenn Sie wirklich eine solche Lösung implementieren müssen (aus welchen Gründen auch immer), besteht der richtige Ansatz darin, den Tabellenerstellungscode von der Tabelle zu trennen, die Code verwendet. Haben Sie separate Pakete für sie.

begin
    pkg_ddl.build_table_xyz;
    pkg_calc.run_xyz_job;
end;

Wenn Tabelle XYZ nicht existiert pkg_calc.run_xyz_job() ist ungültig. Ihre Ungültigkeit verhindert jedoch nicht pkg_ddl.build_table_xyz() von der Ausführung. Dann, wenn das äußere Programm pkg_calc.run_xyz_job() aufruft es wird die Prozedur kompilieren.