before 语句触发器
create or replace trigger tr_sec_emp
before insert or update or delete on emp
begin
if to_char(sysdate,'DY','nls_date_language=american') in ('sat','sun') then
raise_application_error(-20001,'不能在休息日操作!');
end if ;
end ;
条件谓词
create or replace trigger tr_sec_emp
before insert or update or delete on emp
begin
if to_char(sysdate,'DY','nls_date_language=american') in ('sat','sun') then
case
when inserting then
raise_application_error(-20001,'不能在休息日操作!');
when updating then
raise_application_error(-20001,'不能在休息日操作!');
when deleting then
raise_application_error(-20001,'不能在休息日操作!');
end case;
end if;
end ;
行触发器
create or replace trigger tr_emp_sal after/before update of sal on emp for each row begin if :new.sal < :old.sal then raise_application_error(-20001,'工资只涨不降'); end if; end ;
限制行触发器
create or replace trigger tr_sal_change after update of sal on emp for each row when (old.job='salesman') declare v_temp int; begin ------- end;
系统触发器
create table log_table( username varchar(20), logon_time date, logoff_time date, address varchar2(20)); create or replace trigger tr_logon after logon on database begin insert into log_table(username,logon_time,address) values (ora_login_user,sysdate,ora_client_ip_address); end; / create or replace trigger tr_logon before logoff on database begin insert into log_table(username,logoff_time,address) value s(ora_login_user,sysdate,ora_client_ip_address); end; /
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/90618/viewspace-426903/ ,如需转载,请注明出处,否则将追究法律责任。