巢狀表替代觸發器

2022-08-30 23:36:31 字數 858 閱讀 3304

create or replace type emp_obj as object(emp表中所有的字段。);

create or replace type emp_tab_type as table of emp_obj;

create or replace view dept_emp_view as 

select deptno,dname,loc,

cast(multiset(select * from emp where deptno=dept.deptno) as emp_tab_type) emplst from dept;

cast(mutiset(as)):將mutiset集合中的所有元素轉換為  emp_tab_type 的巢狀表型別。

建立巢狀表替代觸發器。

create or replace trigger dept_emp_innerview

instead of insert on nested table emplst of dept_emp_view

begin

insert into emp(deptno,empno,ename,job,mgr,hiredate,sal,comm) values(:parent.deptno,:new.empno,:new.ename,:new.job,:new.mgr,:new,hiredate,:new.sal,:new.comm);

parent獲取巢狀表父行的deptno。

向巢狀表中插入資料。

insert into table(select emplst from dept_emp_view where deptno=10) values(8003,'四爺','皇上',null,sysdate,5000,500,10);

替代觸發器和系統觸發器

為什麼使用instead of觸發器?在簡單的檢視上往往可以執行insert update delete操作的,但在複雜檢視上是有限制的,比如有分組 集合運算子的,這時就需要建立替代觸發器 instead of是只適用於檢視上的一種觸發器,不能指定before和after選項,create orre...

巢狀觸發器

巢狀觸發器 當某一觸發器執行時,能夠觸發另乙個觸發器,這種情況下稱之為觸發器巢狀。在執行過程中,如果乙個觸發器修改某個表時,而這個表有其他觸發器,這時就使用了巢狀觸發器。在sql server 中,觸發器能夠巢狀至32層。如果不需要巢狀觸發器,可以通過sp configure 選項進行設定。orac...

建立替代 Instead of 觸發器

instead of 用於對檢視的dml觸發,由於檢視有可能是由多個表進行聯結 join 而成,因而並非是所有的聯結都是可更新的。但可以按照所需的方式執行更新,例如下面情況 create or replace view emp view as select deptno,count total em...