我是靠谱客的博主 安静柚子,最近开发中收集的这篇文章主要介绍TRIGGER应用示例,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述


一、基本知识

1、触发一个触发器的事件:
DML语句:修改表中的数据
DDL语句:create、drop一个数据对象,只能用在一个schema或者数据库上。
SYSTEM EVENTS:startyp shutdown
USER EVENTS:logon logoff
2、触发器的主要作用:
提高数据库系统的一致性,增强复杂的业务逻辑,oracle推荐在不能使用以下的完整性约束来解决问题时:
not null,unique,primary key,foreign key, check ,delete cascade,delete set null
3、触发器的类型:
行触发器和语句触发器
before和after触发器
instead of 触发器

4、trigger 是自动提交的,不用COMMIT,ROLLBACK
5、trigger最大为32K,如果有复杂的应用可以通过在TRIGGER里调用PROCEDURE或FUNCTION来实现。

二、语法及事例
6、语法CREATE OR REPLACE TRIGGER

ON
DECLARE

BEGIN

EXCEPTION

END ;
/
7、 相关命令
create trigger
create any trigger
administer database trigger
alter any trigger
drop any trigger

8、对列做触发(of)(行的触发是最常见的,不在这里列出
1 create or replace trigger tri_wwm
2 before update of id on wwm2 for each row
3 declare the_str VARCHAR2(40):='update on wwm2''s id column';
4 begin
5 dbms_output.put_line(the_str);
6* end tri_wwm;
SQL> /
Trigger created.
SQL> update wwm2 set id=3;
update on wwm2's id column
1 row updated.
9、Referencing 别名
测试数据
CREATE TABLE TEST
(
SITENAME VARCHAR2(40 BYTE),
SITETITLE VARCHAR2(100 BYTE),
SITEKEYWORDS VARCHAR2(100 BYTE),
SITEAUTHOR VARCHAR2(65 BYTE),
WEBMASTER VARCHAR2(20 BYTE),
WEBMASTERQQ VARCHAR2(20 BYTE),
WEBMASTEREMAIL VARCHAR2(60 BYTE),
REGSTATUS VARCHAR2(5 BYTE),
SITEBROADCAST VARCHAR2(2000 BYTE)
)

CREATE TABLE TSTATIONINFO
(
SITENAME VARCHAR2(40 BYTE),
SITETITLE VARCHAR2(100 BYTE),
SITEKEYWORDS VARCHAR2(100 BYTE),
SITEAUTHOR VARCHAR2(65 BYTE),
WEBMASTER VARCHAR2(20 BYTE),
WEBMASTERQQ VARCHAR2(20 BYTE),
WEBMASTEREMAIL VARCHAR2(60 BYTE),
REGSTATUS VARCHAR2(5 BYTE) DEFAULT 1,
SITEBROADCAST VARCHAR2(2000 BYTE)
)
需求:

当把TSTATIONINFO中一条数据删除前,如果test表中也存在的情况下,删除之,建立以下触发器:

CREATE OR REPLACE TRIGGER HHH
BEFORE DELETE
ON TSTATIONINFO
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
DECLARE
BEGIN

delete from test where sitename=:old.sitename; ----注意此时是用old
EXCEPTION
WHEN OTHERS THEN
-- Consider logging the error and then re-raise
RAISE;
END hhh;
/
当向TEST表中插入一条数据时,检测表TSTATIONINFO,如果不存在就增加一条,如果存在就算拉。
CREATE OR REPLACE TRIGGER insert_row
BEFORE INSERT
ON TEST
REFERENCING NEW AS New OLD AS Old
FOR EACH ROW
DECLARE
tmpVar NUMBER;
BEGIN
tmpVar := 0;

select count(*) into tmpVar from TSTATIONINFO where sitename=:new.sitename; ---注意此时使用new

if tmpVar=0 then
insert into TSTATIONINFO (sitename) values (:new.sitename);
end if;
END insert_row;
/

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

转载于:http://blog.itpub.net/77580/viewspace-212768/

最后

以上就是安静柚子为你收集整理的TRIGGER应用示例的全部内容,希望文章能够帮你解决TRIGGER应用示例所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部