将删除在过程中创建的表,获取过程的编译错误

时间:2017-03-09 12:48:00

标签: oracle procedure

创建过程的第一步是检查表XYZ是否存在。如果确实如此,则继续在XYZ表上进行进一步计算,但如果不存在则创建表,然后继续计算(在表中插入新记录)。

因此,为了测试目的,我放弃了桌子。我放弃表的那一刻,我从程序中得到编译错误,表示该表不存在。

我该如何解决这个问题。我无法改变逻辑。

1 个答案:

答案 0 :(得分:2)

需要检查表是否存在的代码表示软件架构不正确。应该不需要动态创建表。它是一种反模式(至少在Oracle中)。但是,我们经常看到这个问题的变化,所以很明显这种反模式在野外蓬勃发展。

如果你真的需要实现这样的解决方案(无论出于何种原因),正确的方法是使用代码将表构建代码与表分开。为他们准备单独的包裹。

begin
    pkg_ddl.build_table_xyz;
    pkg_calc.run_xyz_job;
end;

如果表XYZ不存在pkg_calc.run_xyz_job()无效。然而,它的无效性不会阻止pkg_ddl.build_table_xyz()执行。然后,当外部程序调用{​​{1}}时,它将编译该过程。