我们创建了一个用于处理复杂SQL的视图,但是在使用FORCE选项创建视图时。例如:
create or replace FORCE view testview as
select 1
from dual;
FORCE
在以后查看时会被删除
create or replace view testview as
select 1
from dual;
如果要创建视图,则不管视图的基表或引用的对象类型是否存在,或者包含视图的模式的所有者对其具有特权,请指定FORCE。在对视图发出任何SELECT,INSERT,UPDATE或DELETE语句之前,必须满足这些条件。
如果视图定义包含任何约束,则如果基表不存在或引用的对象类型不存在,则CREATE VIEW ... FORCE将失败。如果视图定义命名的约束不存在,则CREATE VIEW ... FORCE也将失败。
使用FORCE
选项仅在执行时没有运行时影响吗?它是否仅用于强制覆盖先前的视图(即使发生错误)?
答案 0 :(得分:2)
使用FORCE选项仅在执行时没有运行时影响吗?
是的。如果视图语句无效-假设有一个错字,并且FROM子句中的表名拼写错误-通常Oracle不会创建视图。通过使用FORCE关键字,将创建视图,但状态为'INVALID'
。这在某些情况下可能很有用,例如我们有一个构建工具,如果语句失败,该工具会停止运行,但我们希望整个构建完成后再找出所有不一致之处。
是否仅用于强制覆盖上一个视图
不。即使此刻之前视图不存在,我们也可以选择使用FORCE。当我们更改具有依赖项的TYPE时,用法与FORCE的用法略有不同。我们始终可以创建或替换视图。