REFERENCING NEW TABLE AS正在sql中抛出无效引用



考虑如下定义的视图branch_cust

Create view branch_cust as                      
select 
branch_name, 
customer_name 
from depositor, account  
where depositor.account_number = account.account_number

假设一个视图是物化的;即计算并存储视图。编写一个触发器来维护视图,也就是说,在向存款人或帐户插入和从中删除时使其保持最新状态。不要为更新而烦恼。

我尝试使用引用新表作为对存款人执行插入触发器但它也犯了错误。这就是代码。

create or replace trigger insert_dep 
after insert on depositor REFERENCING NEW TABLE as inserted  
FOR EACH ROW  BEGIN 
insert into branch_cust select branchname, cusname 
from inserted, account 
where inserted.account = account.acc; end;

问题不清楚,branch_cust是表或视图还是物化视图??我将尝试回答所有3种情况:

  1. branch_cust是view:您查看给定的DDL是一个复杂的视图,这意味着它上的DML将失败。此外,由于您使用一个触发器插入branch_cust(它是由表寄存器形成的(,该触发器也在寄存器上,因此即使您使视图变得简单,您也会出现变化错误。因此,这种情况永远不会成功
  2. branch_cust是物化视图:不能在物化视图中执行插入操作。因此,触发器将失败
  3. branchcust是表:如果您想保留一个由帐户连接的存款人数据的单独副本,就可以实现这一点。但我建议不要这么做

假设视图是物化

然后插入它是没有意义的,因为这些更改无论如何都会在第一次刷新时丢失。

因此,由于您似乎希望在对其源表进行更改后立即刷新它,请将其设置为提交时刷新。这里有一个例子:

SQL> create materialized view mv_emp
2    refresh complete
3    on commit
4  as
5  select deptno, sum(sal) sumsal
6  From emp
7  group by deptno;
Materialized view created.
SQL> select * from mv_emp order by deptno;
DEPTNO     SUMSAL
---------- ----------
10      13750
20      10995
30       9400
SQL> update emp set sal = sal + 1 where deptno = 10;
3 rows updated.
SQL> commit;
Commit complete.
SQL> select * from mv_emp order by deptno;
DEPTNO     SUMSAL
---------- ----------
10      13753               --> new value for DEPTNO = 10
20      10995
30       9400
SQL>

相关内容

  • 没有找到相关文章

最新更新