温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

ORACLE 触发器语法有哪些以及实例分析

发布时间:2021-11-04 17:16:37 来源:亿速云 阅读:408 作者:柒染 栏目:建站服务器

ORACLE 触发器语法有哪些以及实例分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

SELECT * FROM dept_sal;

实例1

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

--创建表

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;

实例2

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

--创建表

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;

实例3

--创建触发器,比较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';

实例4

--创建触发器,将操作CREATEDROP存储在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;

关于ORACLE 触发器语法有哪些以及实例分析问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI