Oracle
 sql >> Base de données >  >> RDS >> Oracle

La table créée dans une procédure est supprimée, Obtention d'une erreur de compilation pour la procédure

Le code qui doit vérifier si une table existe indique une mauvaise architecture logicielle. Il ne devrait pas être nécessaire de créer des tables à la volée. C'est un anti-modèle (au moins dans Oracle). Cependant, nous voyons assez souvent des variations sur ce problème, il est donc évident que cet anti-modèle prospère dans la nature.

Si vous avez vraiment besoin d'implémenter une telle solution (pour quelque raison que ce soit), l'approche correcte consiste à séparer le code de construction de table de la table à l'aide de code. Ayez des packages séparés pour eux.

begin
    pkg_ddl.build_table_xyz;
    pkg_calc.run_xyz_job;
end;

Si la table XYZ n'existe pas pkg_calc.run_xyz_job() est invalide. Cependant, son invalidité n'empêchera pas pkg_ddl.build_table_xyz() de l'exécution. Ensuite, lorsque le programme externe appelle pkg_calc.run_xyz_job() il compilera la procédure.