“参考视图”是什么意思?程序中是否有任何陈述提到给定的观点。任何命令,例如“从 Y 中删除 ....”或类似的命令,好吗?这是否意味着引用是包含该视图 Y 的任何命令?
这是我在这里的问题和答案的一部分,答案之一是“Y 是 X 的直接依赖项”?这是否意味着该程序创建了该视图?
这是整个问题和答案。
考虑这种情况:过程 X 引用基于表 Z 的视图 Y。哪两个陈述是正确的?(选择两个。)
Y 是一个被引用的对象。
Y 是 X 的直接依赖项。
如果一个过程引用了一个视图,这意味着 PL/SQL 编译器已经确定该过程以某种方式使用该视图。
例如,以下过程引用了 view 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
语句。没有PL/SQL中的视图是不可能的,即使您这样做,该过程也不能随后引用新创建的视图,因为该视图在编译时将不存在。MERGE
DELETE
CREATE
EXECUTE IMMEDIATE
例如,如果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;
因此,考虑依赖关系的一种方式是“对象 Y 只有在 X 存在且有效时才有效吗?”。如果这个问题的答案是肯定的,那么 Y 依赖于 X。
如果您有权访问 Oracle 数据库,请查看数据字典视图USER_DEPENDENCIES
并ALL_DEPENDENCIES
查看对象之间依赖关系的一些示例。