View PL/SQL过程X引用视图Y

View PL/SQL过程X引用视图Y,view,reference,plsql,procedure,View,Reference,Plsql,Procedure,“参考视图”是什么意思?在程序中是否有任何陈述提及给定的观点。是否有任何命令,例如“从Y删除,其中…”或任何类似命令?这是否意味着引用是包含该视图Y的任何命令 这是我这里的问题和答案的一部分,答案之一是“Y是X的直接依赖项”? 这是否意味着程序创建了该视图 这是完整的问题和答案 考虑这个场景:过程X引用基于表Z的视图Y。哪两条语句 是真的吗?(选择两个。) Y是一个被引用的对象 Y是X的直接依赖项。如果过程引用视图,则表示PL/SQL编译器已确定该过程以某种方式使用该视图 例如,以下过程引用了视

“参考视图”是什么意思?在程序中是否有任何陈述提及给定的观点。是否有任何命令,例如“从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
MERGE
DELETE
语句。如果不执行立即执行,则无法在PL/SQL中
创建
视图,即使执行此操作,该过程也无法随后引用新创建的视图,因为该视图在编译时不存在

例如,如果
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\u DEPENDENCIES
ALL\u DEPENDENCIES
,以查看对象之间依赖关系的一些示例