您现在的位置是:首页 >

vue数据修改之后视图不刷新 视图刷新过程中出现的约束冲突问题

火烧 2021-09-10 19:54:28 1036
视图刷新过程中出现的约束冲突问题   本文中 我们通过实例的方法来帮助您理解物化视图刷新过程中出现的约束冲突问题   即使将物化视图的约束建立和基表完全一致 由于物化视图的刷新机制 也会产生约束冲突的
vue数据修改之后视图不刷新 视图刷新过程中出现的约束冲突问题

视图刷新过程中出现的约束冲突问题  

  本文中 我们通过实例的方法来帮助您理解物化视图刷新过程中出现的约束冲突问题

  即使将物化视图的约束建立和基表完全一致 由于物化视图的刷新机制 也会产生约束冲突的现象

  以下是一个简单的示例

  

  SQL> CREATE TABLE T (ID NUMBER PRIMARY KEY NAME VARCHAR ( )); 表已创建 SQL> ALTER TABLE T ADD CONSTRAINT UN_T_NAME UNIQUE (NAME); 表已更改 SQL> CREATE MATERIALIZED VIEW LOG ON T; 实体化视图日志已创建 SQL> CREATE MATERIALIZED VIEW MV_T REFRESH FAST AS SELECT * FROM T; 实体化视图已创建 SQL> ALTER TABLE MV_T ADD CONSTRAINT UN_MV_T_NAME UNIQUE (NAME); 表已更改 SQL> INSERT INTO T VALUES ( A ); 已创建 行 SQL> INSERT INTO T VALUES ( B ); 已创建 行 SQL> MIT; 提交完成 SQL> EXEC DBMS_MVIEW REFRESH( MV_T ) PL/SQL 过程已成功完成

  上面构造了一个简单的物化视图 物化视图和基表建立了相同的唯一约束

  下面进行一个循环的更新操作 然后观察刷新的情况

  

  SQL> UPDATE T SET NAME = C WHERE ID = ; 已更新 行 SQL> UPDATE T SET NAME = A WHERE ID = ; 已更新 行 SQL> UPDATE T SET NAME = B WHERE ID = ; 已更新 行 SQL> MIT; 提交完成 SQL> EXEC DBMS_MVIEW REFRESH( MV_T ) BEGIN DBMS_MVIEW REFRESH( MV_T ); END; * ERROR 位于第 行: ORA : 实体化视图的刷新路径中存在错误 ORA : 违反唯一约束条件 (YANGTK UN_MV_T_NAME) ORA : 在 SYS DBMS_SNAPSHOT line ORA : 在 SYS DBMS_SNAPSHOT line ORA : 在 SYS DBMS_SNAPSHOT line ORA : 在line

  刷新失败了 解决这个问题的一个方法是对于物化视图不建立唯一约束 唯一性由基表保证 但是这种方法只对只读物化视图适用 而且 缺少唯一约束信息 可能会影响SQL的执行计划

  这种情况下 最好的解决方法是建立延迟约束

  

  SQL> ALTER TABLE MV_T DROP CONSTRAINT UN_MV_T_NAME; 表已更改 SQL> ALTER TABLE MV_T ADD CONSTRAINT UN_MV_T_NAME UNIQUE (NAME) DEFERRABLE; 表已更改 SQL> EXEC DBMS_MVIEW REFRESH( MV_T ) PL/SQL 过程已成功完成

lishixinzhi/Article/program/Oracle/201311/18802  
永远跟党走
  • 如果你觉得本站很棒,可以通过扫码支付打赏哦!

    • 微信收款码
    • 支付宝收款码