ITPub博客

首页 > Linux操作系统 > Linux操作系统 > ORACLE 触发器语法及实例 三

ORACLE 触发器语法及实例 三

Linux操作系统 作者:达芬奇的梦 时间:2017-05-16 15:25:59 0 删除 编辑

SELECT * FROM dept_sal;

实例3

--创建触发器,它记录表的删除数据

--创建表

CREATE TABLE employee

(

 id    VARCHAR2(4)  NOT NULL,

 name VARCHAR2(15) NOT NULL,

 age  NUMBER(2)     NOT NULL,

 sex  CHAR          NOT NULL

);

DESC employee;

--插入数据

INSERT INTO employee VALUES('e101','zhao',23,'M');

INSERT INTO employee VALUES('e102','jian',21,'F');

--创建记录表

CREATE TABLE old_employee AS

 SELECT * FROM employee;

DESC old_employee;

--创建触发器

CREATE OR REPLACE TRIGGER tig_old_emp

AFTER DELETE ON employee  --

FOR EACH ROW  --语句级触发,即每一行触发一次

BEGIN

 INSERT INTO old_employee

   VALUES(:old.id,:old.name,:old.age,:old.sex);  --:old代表旧值

END;

/

--下面进行测试

DELETE employee;

SELECT * FROM old_employee;

实例4

--创建触发器,利用视图插入数据

--创建表

CREATE TABLE tab1 (tid NUMBER(4) PRIMARY KEY,tname VARCHAR2(20),tage NUMBER(2));

CREATE TABLE tab2 (tid NUMBER(4),ttel VARCHAR2(15),tadr VARCHAR2(30));

--插入数据

INSERT INTO tab1 VALUES(101,'zhao',22);

INSERT INTO tab1 VALUES(102,'yang',20);

INSERT INTO tab2 VALUES(101,'13761512841','AnHuiSuZhou');

INSERT INTO tab2 VALUES(102,'13563258514','AnHuiSuZhou');

--创建视图连接两张表

CREATE VIEW tab_view AS

 SELECT tab1.tid,tname,ttel,tadr FROM tab1,tab2

   WHERE tab1.tid = tab2.tid;

--创建触发器

CREATE OR REPLACE TRIGGER tab_trigger

INSTEAD OF INSERT ON tab_view

BEGIN

 INSERT INTO tab1(tid,tname) VALUES(:new.tid,:new.tname);

 INSERT INTO tab2(ttel,tadr) VALUES(:new.ttel,:new.tadr);

END;

/

--现在就可以利用视图插入数据

INSERT INTO tab_view VALUES(105,'zhaoyang','13886681288','beijing');

--查看效果

SELECT * FROM tab_view;

实例5

--创建触发器,比较emp表中更新的工资

CREATE OR REPLACE TRIGGER sal_emp

BEFORE UPDATE ON emp

FOR EACH ROW

BEGIN

 IF :OLD.sal > :NEW.sal THEN

   DBMS_OUTPUT.PUT_LINE('工资减少');

 ELSIF :OLD.sal < :NEW.sal THEN

   DBMS_OUTPUT.PUT_LINE('工资增加');

 ELSE

   DBMS_OUTPUT.PUT_LINE('工资未作任何变动');

 END IF;

 DBMS_OUTPUT.PUT_LINE('更新前工资 :' || :OLD.sal);

 DBMS_OUTPUT.PUT_LINE('更新后工资 :' || :NEW.sal);

END;

/

--执行UPDATE查看效果

UPDATE emp SET sal = 3000 WHERE empno = '7788';

实例6

--创建触发器,将操作CREATE、DROP存储在log_info表

--创建表

CREATE TABLE log_info

(

 manager_user VARCHAR2(15),

 manager_date VARCHAR2(15),

 manager_type VARCHAR2(15),

 obj_name VARCHAR2(15),

 obj_type VARCHAR2(15)

);

--创建触发器

CREATE OR REPLACE TRIGGER trig_log_info

AFTER CREATE OR DROP ON SCHEMA

BEGIN

 INSERT INTO log_info

   VALUES(USER,SYSDATE,SYS.DICTIONARY_OBJ_NAME,SYS.DICTIONARY_OBJ_OWNER,

    SYS.DICTIONARY_OBJ_TYPE);

END;

/

--测试语句

CREATE TABLE a(id NUMBER);

CREATE TYPE aa AS OBJECT(id NUMBER);

/

DROP TABLE a;

DROP TYPE aa;

--查看效果

SELECT * FROM log_info;

 

 

--相关数据字典-----------------------------------------------------//

SELECT * FROM USER_TRIGGERS;

SELECT * FROM ALL_TRIGGERS;

SELECT * FROM DBA_TRIGGERS;  --必须以DBA身份登陆才能使用此数据字典

--启用和禁用

ALTER TRIGGER trigger_name DISABLE;

ALTER TRIGGER trigger_name ENABLE;

=====================================★========================================

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31444259/viewspace-2139139/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2017-03-15

  • 博文量
    172
  • 访问量
    296703