sql >> Base de Datos >  >> RDS >> Oracle

Se descarta la tabla creada en un procedimiento, se obtiene un error de compilación para el procedimiento

El código que necesita comprobar si existe una tabla indica una mala arquitectura de software. No debería haber necesidad de crear tablas sobre la marcha. Es un antipatrón (al menos en Oracle). Sin embargo, vemos variaciones en este problema con bastante frecuencia, por lo que es obvio que este antipatrón está prosperando en la naturaleza.

Si realmente necesita implementar una solución de este tipo (por cualquier motivo), el enfoque correcto es separar el código de creación de tablas de la tabla usando código. Tenga paquetes separados para ellos.

begin
    pkg_ddl.build_table_xyz;
    pkg_calc.run_xyz_job;
end;

Si la tabla XYZ no existe pkg_calc.run_xyz_job() es inválido. Sin embargo, su invalidez no evitará pkg_ddl.build_table_xyz() de ejecutar. Luego, cuando el programa externo llame a pkg_calc.run_xyz_job() compilará el procedimiento.