ÉèΪÊ×Ò³ ¼ÓÈëÊÕ²Ø

TOP

oracle trigger (´¥·¢Æ÷)(¶þ)
2014-11-24 02:47:23 À´Ô´: ×÷Õß: ¡¾´ó ÖРС¡¿ ä¯ÀÀ:2´Î
Tags£ºoracle trigger ´¥·¢Æ÷
ÄÚ´úÂ뾡Á¿Òª¼òµ¥£¬Èç¹û±È½Ï¸´Ôӵϰ¿ÉÒÔ½«¸´ÔÓ µÄÓï¾ä´æ·Åµ½¹ý³ÌÖУ¬´¥·¢Æ÷Ö»µ÷Óùý³Ì

--2 DDL´¥·¢Æ÷ DDL statements (CREATE, ALTER, DROP)

/*

DDL´¥·¢Æ÷Ëù×÷ÓõĶÔÏó¾Í²»ÊÇij¸ö¾ßÌåµÄ±íÁË£¬¶øÊÇÕë¶Ôij¸öSCHEMA|DATABASE

DDL´¥·¢Æ÷Ä¿µÄÖ÷ÒªÊÇΪÁ˼ǼDDL²Ù×÷£¬

µ±È»Ò²¿ÉÔÚ´¥·¢Æ÷ÖÐÉú³ÉÒì³££¬ÊÂÎñ»Ø¹ö£¬DDL²Ù×÷ʧ°Ü

oracle Êý¾Ý¿âϵͳʼþÊôÐÔº¯Êý:

ora_client_ip_address:¿Í»§¶ËipµØÖ·

ora_database_name:µ±Ç°Êý¾Ý¿âÃû

ora_dict_obj_name:DDL²Ù×÷Ëù¶ÔÓ¦µÄÊý¾Ý¿â¶ÔÏóÃû

ora_dict_obj_owner:DDL²Ù×÷¶ÔÏóµÄËùÓÐÕß

ora_dict_obj_type:DDL²Ù×÷Ëù¶ÔÓ¦µÄÊý¾Ý¿â¶ÔÏóµÄÀàÐÍ

ora_login_user:µÇ¼Óû§Ãû

ora_sysevent:´¥·¢Æ÷µÄϵͳʼþÃû³Æ

...

ÓÃÕâЩÊôÐÔ¿ÉÒÔÃèÊöDDL²Ù×÷

*/

--´´½¨¼Ç¼ddl²Ù×÷µÄtable

CREATE TABLE ddl_records(

event varchar2(30),

username varchar2(30),

owner varchar2(30),

objname varchar2(20),

objtype varchar2(10),

d_date date

)

CREATE OR REPLACE TRIGGER ddl_t

AFTER DDL ON SCHEMA --DLLÒ²¿ÉÒÔÊÇCREATE,DROP,ALTERµÄÈÎÒâ×éºÏ£¬×÷ÓöÔÏó¿ÉÒÔÊǵ±Ç°SCHEMA ,Ò²¿ÉÒÔÊÇDATABASE

BEGIN

insert into ddl_records values(

ora_sysevent,ora_login_user,ora_dict_obj_owner,

ora_dict_obj_name,ora_dict_obj_type,sysdate);

END;

--Ö´ÐÐÒ»¸öddl²Ù×÷

create table test_ddl_triger(id int);

--ddl_records±íÖвåÈëÒ»ÌõÊý¾Ý

/*

event:create,username:scott,owner:scott

objname:test_ddl_triger,objtype:table

*/

drop table test_ddl_triger;--ÓÖ²åÈëÒ»ÌõÊý¾Ý

commit;

--3. ϵͳʼþ´¥·¢Æ÷Database operations (SERVERERROR, LOGON, LOGOFF, STARTUP, SHUTDOWN)

/*

ϵͳʼþ´¥·¢Æ÷ºÍDML´¥·¢Æ÷µÄ¹¦Äܲ¶à£¬¶¼ÊÇΪÁ˼Ǽ¸ú×ÙÊý¾Ý¿âµÄ±ä»¯¡£

²»¹ýÕâЩ´¥·¢Æ÷ÓеĶÔBEFOREºóAFTERÓÐÏÞÖÆ£º

STARTUPʼþÖ»ÄÜÓÐAFTER´¥·¢Æ÷

SHUTDOWNÖ»ÄÜÓÐBEFORE´¥·¢Æ÷

LOGONÖ»ÄÜÓÐAFTER´¥·¢Æ÷

LOGOFFÖ»ÄÜÓÐBEFORE´¥·¢Æ÷

SERVERERRORÖ»ÄÜÓÐAFTER´¥·¢Æ÷

*/

--AFTER SERVERERROR trigger

/*

ÒÔÏÂerror ²»»á´¥·¢

ORA-00600 oracleÄÚ²¿´íÎó

ORA-01034 oracleÎÞ·¨Ê¹ÓÃ

ORA-01403 ûÓвéѯµ½Êý¾Ý

ORA-01422 ·µ»Ø¶àÐÐÊý¾Ý

ORA-01423

ORA-04030

--´¥·¢Æ÷²»»áÐÞ¸´´íÎó

--ÄÚ½¨º¯Êý»ñÈ¡Òì³£ÐÅÏ¢

ora_server_error(index) ·µ»Øerror number£¬ÕÒ²»µ½·µ»Ø0

ora_is_servererror(number) error numberÊÇ·ñÔÚÒì³£stackÖУ¬Ò²¾ÍÊÇÅжϵ±Ç°Òì³£ÊÇ·ñ°üº¬Ö¸¶¨Òì³£

ora_server_error_depth Òì³£ÖÐerrorµÄÊýÁ¿

ora_server_error_msg(index) ´íÎóÐÅÏ¢

...

*/

CREATE OR REPLACE TRIGGER error_echo

AFTER SERVERERROR ON SCHEMA

DECLARE

num number := SQLCODE;

BEGIN

FOR i IN 1..ora_server_error_depth LOOP

dbms_output.put_line('´íÎóÂ룺'||ora_server_error(i));

dbms_output.put_line('´íÎóÐÅÏ¢£º'||ora_server_error_msg(i));

END LOOP;

END;

/*

CREATE OR REPLACE TRIGGER ddl_echo

AFTER DDL ON SCHEMA

BEGIN

dbms_output.put_line(SQLCODE);

IF ora_is_servererror(SQLCODE) THEN

dbms_output.put_line('error:'||sqlerrm);

ELSE

dbms_output.put_line('OK:'||sqlerrm);

END IF;

END;

*/

--¼ìÑéerror_echo´¥·¢Æ÷¹¦ÄÜ

create table t_t(t number);

drop table t_t;

commit;

insert into t_t values('xx');--»áÓÐÒì³££¬±»´òÓ¡³ö

--ά»¤´¥·¢Æ÷

--²é¿´´¥·¢Æ÷ÐÅÏ¢

--user_triggers Êý¾Ý×ÖµäÊÓͼ,»ù±¾ÉÏÄÒÀ¨ÁË´¥·¢Æ÷¶¨ÒåÊÇËùÓÃÐÅÏ¢

select * from user_triggers;

--µ±Ç°Óû§ÓÐȨÏ޲鿴µ½µÄËùÓд¥·¢Æ÷

select * from all_triggers;

--ʹ´¥·¢Æ÷ʧЧ

ALTER TRIGGER trigger_name DISABLE;

--´Óм¤»î´¥·¢Æ÷

ALTER TRIGGER trigger_name ENABLE;

--Õë¶Ôij¸ö±í

--½ûÖ¹ËùÓеĴ¥·¢Æ÷

ALTER TABLE table_name DISABLE ALL TRIGGERS;

--¼¤»îËùÓÐ

ALTER TABLE table_name ENABLE ALL TRIGGERS£»

--´ÓбàÒë´¥·¢Æ÷

ALTER TRIGGER trigger_name COMPILE;

--ɾ³ý´¥·¢Æ÷

DROP TRIGGER trigger_name;

/*

reference:

http://download.o

Ê×Ò³ ÉÏÒ»Ò³ 1 2 3 ÏÂÒ»Ò³ βҳ 2/3/3
¡¾´ó ÖРС¡¿¡¾´òÓ¡¡¿ ¡¾·±Ìå¡¿¡¾Í¶¸å¡¿¡¾Êղء¿ ¡¾ÍƼö¡¿¡¾¾Ù±¨¡¿¡¾ÆÀÂÛ¡¿ ¡¾¹Ø±Õ¡¿ ¡¾·µ»Ø¶¥²¿¡¿
·ÖÏíµ½: 
ÉÏһƪ£ºSQLµãµÎ18¨DSqlServerÖеÄmerge².. ÏÂһƪ£ºsql2005 Êý¾Ý¿âתΪsql 2000Êý¾Ý..

ÆÀÂÛ

ÕÊ¡¡¡¡ºÅ: ÃÜÂë: (ÐÂÓû§×¢²á)
Ñé Ö¤ Âë:
±í¡¡¡¡Çé:
ÄÚ¡¡¡¡ÈÝ: