我正在构建一个相当大的Oracle 10g软件包,其中包含许多功能等。
问题是这些功能中的一些是从其他功能正在创建的电子化视图或表中提取信息。
有没有办法成功编译一个包,即使某些函数找不到他们正在寻找的信息(但是这些函数在创建视图后才能工作?)。
尝试:
我调查了PRAGMA RESTRICT_REFERENCES
但到目前为止没有成功。我甚至走在正确的轨道上还是甚至不可能?
答案 0 :(得分:4)
您无法将静态SQL引用到编译代码时不存在的对象。你无能为力。
您需要修改代码以使用动态SQL来引用在运行时创建的任何对象。您可以使用EXECUTE IMMEDIATE
,即
EXECUTE IMMEDIATE
'SELECT COUNT(*) FROM new_mv_name'
INTO l_cnt;
而不是
SELECT COUNT(*)
INTO l_cnt
FROM new_mv_name;
然而,有人说,我会非常怀疑PL / SQL实现涉及在运行时创建任何新表和物化视图。在Oracle中,这几乎总是一个错误。为什么需要在运行时创建新对象?