创建过程的第一步是检查表XYZ是否存在。如果确实如此,则继续在XYZ表上进行进一步计算,但如果不存在则创建表,然后继续计算(在表中插入新记录)。
因此,为了测试目的,我放弃了桌子。我放弃表的那一刻,我从程序中得到编译错误,表示该表不存在。
我该如何解决这个问题。我无法改变逻辑。
答案 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}}时,它将编译该过程。