oracle教程36 触发器(INSTEAD OF 触发器和系统触发器)

INSTEAD OF 触发器


oracle教程36 触发器(INSTEAD OF 触发器和系统触发器)_第1张图片


oracle教程36 触发器(INSTEAD OF 触发器和系统触发器)_第2张图片

举例:

--创建视图
CREATE OR REPLACE VIEW emp_dept
AS
SELECT d.deptno,d.dname,e.empno,e.ename
FROM dept d, emp e
WHERE d.deptno = e.deptno;
--创建替代触发器
CREATE OR REPLACE TRIGGER instead_of_trigger
INSTEAD OF
INSERT
ON emp_dept
FOR EACH ROW
DECLARE
    v_temp INT;
BEGIN
    SELECT COUNT(*) INTO v_temp FROM dept WHERE deptno = :new.deptno;
    IF v_temp = 0 THEN
       INSERT INTO dept(deptno,dname)VALUES(:new.deptno,:new.dname);
    END IF;
    SELECT COUNT(*) INTO v_temp FROM emp WHERE empno = :new.empno;
    IF v_temp = 0 THEN
       INSERT INTO emp(empno,ename,deptno) VALUES(:new.empno,:new.ename,:new.deptno);
    END IF;
END;

--测试
INSERT INTO emp_dept VALUES(50,'DEVELOPMENT',2222,'ALICE');

SELECT * FROM EMP_DEPT




系统触发器(需要由系统用户才能创建)

oracle教程36 触发器(INSTEAD OF 触发器和系统触发器)_第3张图片

oracle教程36 触发器(INSTEAD OF 触发器和系统触发器)_第4张图片

举例:

--连接sys用户


--创建事件表
CREATE   TABLE   event_table(
	event varchar2(50), 
	event_time date
);
--再创建一个系统触发器
create or replace trigger startup_trigger
after startup on database
begin
  insert into event_table values(ora_sysevent,SYSDATE);
end;
--在SQLPLUS窗口执行下列命令
SHUTDOWN
STARTUP
SELECT    *   FROM event_table;





你可能感兴趣的:(Oracle)