动态sql语句中的表没有被dba_dependencies查询到
动态sql肯定是在dba_dependencies查不到的,因为动态sql就是个字符串文本而已,oracle在编译阶段不会对这些字符串进行任何校验,你想怎么拼接就可以怎么拼接,只有在执行到对应的execute immediate 的时候才会对动态sql的合法性进行校验,因此oracle无法提前知晓依赖关系。
declare
a varchar2(40) := 'dba';
b varchar2(40) := '_';
c varchar2(40) := 'views';
i number;
begin
execute immediate 'select count(1) from ' || a || b || c
into i;
end;
比如这个例子,整个代码里不包含"dba_views",但实际上查的又是“dba_views”这个视图,如果把参数c的值换成别的,同样的代码查询的又是不同的视图了