Oracle - FORCE 视图选项在执行后不显示在视图中

Posted

技术标签:

【中文标题】Oracle - FORCE 视图选项在执行后不显示在视图中【英文标题】:Oracle - FORCE view option isn't shown on view after executed 【发布时间】:2018-12-24 11:05:29 【问题描述】:

我们创建了一个用于处理复杂 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 选项仅在执行时没有运行时影响?它是否仅用于强制覆盖先前的视图(即使出现错误)?

【问题讨论】:

【参考方案1】:

是否只在执行时使用 FORCE 选项而没有运行时影响?

是的。如果视图语句无效——比如说有一个错字并且 FROM 子句中的表名拼写错误——通常 Oracle 不会创建视图。通过使用 FORCE 关键字,可以创建视图,但具有'INVALID' 状态。这在某些情况下可能很有用,例如我们有一个构建工具,如果语句失败,它会停止运行,但我们希望整个构建完成,然后解决任何不一致。

是否只用于强制覆盖之前的视图

没有。即使视图在此之前不存在,我们也可以选择使用 FORCE。当我们 ALTER a TYPE with dependencies 时,用法与使用 FORCE 略有不同。我们总是可以创建或替换视图。

【讨论】:

以上是关于Oracle - FORCE 视图选项在执行后不显示在视图中的主要内容,如果未能解决你的问题,请参考以下文章

oracle的数据对象

mysql 批处理文件出错后继续执行

定义视图时如何让 T-SQL 执行 OPTION (FORCE ORDER)?

确定哪些oracle参数修改后不需要重启数据库生效

Oracle 11g R2 视图

Oracle数据库—— 视图