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...