ITPub博客

首页 > 数据库 > 数据库开发技术 > Oracle强制创建视图的操作

Oracle强制创建视图的操作

原创 数据库开发技术 作者:bisal 时间:2023-03-14 07:50:00 0 删除 编辑

最近碰到个Oracle视图的问题,有很多值得学习了解的。其中一点就是create force view的创建方式。

概括来讲,"Forces The Creation Of A View Even When The View Will Be Invalid. NoForce Is The Default",FORCE关键字的意思,就是即使视图此刻是无效的,依然允许创建,默认创建是NOFORCE。

通过实验了解下。

(1)数据库此刻没有名叫tbl的表,默认创建view会提示错误,

CREATE VIEW v_test_01 AS SELECT * FROM tbl;ORA-00942: 表或视图不存在

(2)官方文档对FORCE进行了说明,

https://docs.oracle.com/en/database/oracle/oracle-database/19/admin/managing-views-sequences-and-synonyms.html#GUID-655BC560-5588-4B05-83AB-C3C69818078C

执行FORCE属性的视图创建语句,没提示错误,

CREATE FORCE VIEW v_test_01 AS SELECT * FROM tbl;

但是检索视图,会提示错误,

SELECT * FROM v_test_01;ORA-04063: view "BISAL.V_TEST_01" 有错误

视图的状态,也是无效的,因此通过FORCE属性,可以强制创建view,

SELECT object_name, object_type, status   FROM dba_objects  WHERE object_name='V_TEST_01'; |OBJECT_NAME|OBJECT_TYPE|STATUS | --------------------------------- |V_TEST_01  |VIEW       |INVALID|

(3)创建出基表,

CREATE TABLE tbl(id number);

但此时,视图状态仍然是INVALID,

SELECT object_name, object_type, status   FROM dba_objects  WHERE object_name='V_TEST_01'; |OBJECT_NAME|OBJECT_TYPE|STATUS | --------------------------------- |V_TEST_01  |VIEW       |INVALID|

只有当alter view ... compile强制重新编译,

ALTER VIEW v_test_01 compile;

或者执行一次这张视图的检索,

SELECT * FROM v_test_01;

就可以将视图状态改为VALID,last_ddl_time字段会显示最新的创建时间,

SELECT object_name, object_type, status, last_ddl_time  FROM dba_objects  WHERE object_name='V_TEST_01'; |OBJECT_NAME|OBJECT_TYPE|STATUS |LAST_DDL_TIME| ----------------------------------------------- |V_TEST_01  |VIEW       |VALID  |当前最新的时间|

官方文档对依赖对象的生效,进行了说明,

https://docs.oracle.com/en/database/oracle/oracle-database/19/admin/managing-schema-objects.html#GUID-46D82F8E-C360-4223-B469-18039B1FFB21

因此,当基表存在问题等的场景下,可以通过FORCE,创建出视图,但是,当基表可正常使用时,视图才能正常用。


如果您认为这篇文章有些帮助,还请不吝点下文章末尾的"点赞"和"在看",或者直接转发pyq,




近期更新的文章:
《最近碰到的一些问题》
《这次的"室温超导"爆炸性发现,会是人类的进步?》
《国务院机构改革方案的学习》
《MySQL日志 - Redo Log重做日志》
《图表数字化的制作神器》

近期的热文:
《推荐一篇Oracle RAC Cache Fusion的经典论文》
《"红警"游戏开源代码带给我们的震撼》

文章分类和索引:
《公众号1100篇文章分类和索引》

原文作者:bisal的个人杂货铺;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论
Oracle ACE,10g/11g OCP,11g OCM,国内首批Oracle YEP成员(Oracle Young Expert Program,Oracle用户组年轻专家项目),EXIN DevOps Master,Oracle爱好者,微信公众号:bisal的个人杂货铺

注册时间:2022-06-21

  • 博文量
    539
  • 访问量
    2801265