PL/SQL过程X引用视图Y



"reference view"是什么意思?是否在程序中有任何语句提到给定的观点?任何命令,例如"从Y中删除...."或类似的东西,请?请问,这是否意味着引用是包含视图Y的任何命令?

这是我在这里的问题和答案的一部分,其中一个答案是"Y是X的直接依赖"?这是否意味着这个过程创建了那个视图?

这是完整的问题和答案。

考虑这个场景:一个过程X引用一个基于表z的视图Y是真的吗?(选择两个。)

Y是一个被引用的对象。

Y直接依赖于x

如果一个过程引用了一个视图,这意味着PL/SQL编译器已经确定这个过程以某种方式使用了这个视图。

例如,下面的过程引用了视图v_some_view,因此依赖于它:

PROCEDURE example (p_count OUT INTEGER)
IS
BEGIN
  SELECT COUNT(*) INTO p_count FROM v_some_view;
END;

如果视图不存在,过程就不能有效。如果我们要删除视图,则过程将不再有效,因为它将尝试从不存在的视图中进行选择。如果没有视图,PL/SQL编译器将无法编译此过程。

视图的存在是不够的;它必须是有效的。视图中的错误将导致过程编译失败。

过程可以引用视图的唯一方法是使用视图的SELECT, INSERT, UPDATE, MERGEDELETE语句。在PL/SQL中,如果没有EXECUTE IMMEDIATE,则不可能对视图进行CREATE,即使这样做,该过程也无法随后引用新创建的视图,因为该视图在编译时不存在。

例如,如果my_view不存在,下面的过程将无法编译:

PROCEDURE invalid
IS
  p_count    INTEGER;
BEGIN
  EXECUTE IMMEDIATE 'CREATE VIEW my_view AS SELECT * FROM DUAL';
  SELECT COUNT(*) INTO p_count FROM my_view;
  dbms_output.put_line('Count was ' || p_count);
END;  

因此,考虑依赖关系的一种方式是"只有当X存在且有效时,对象Y才有效吗?"如果这个问题的答案是肯定的,那么Y依赖于x。

如果你有访问Oracle数据库的权限,看看数据字典视图USER_DEPENDENCIESALL_DEPENDENCIES,看看对象之间依赖关系的一些例子

最新更新