create or replace trigger 名 before or after DML(Insert ,uodate ,delete)on 表名 begin 执行语句 end; / 对操作进行日志备份 create or replace trigger 名 before insert on emp begin insert into emp_log(user,to_cahr(sysdate,'yyyy-mm-dd hh:mi:ss','insert); end;
create or replace trigger t_timelimited after insert or delete or update on emp declare v_time varchar2(20); begin v_time:=to_char(sysdate,'hh24'); if v_time=19 then raise_application_error(-20009,'这个时段禁止此操作'); end if; end; 19时 不能进行 这些操作
create or replace trigger t_emp before insert or update or delete on emp begin if inserting then insert into emp_log values(user,to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),'insert'); elsif updating then insert into emp_log values(user,to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),'update'); elsif deleting then insert into emp_log values(user,to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),'delete'); end if; end;
EMP表删除 几行 就插入EMP2 几行 create or replace trigger t_new before delete on emp for each row begin if deleting then insert into emp2 values (:old.empno,:old.ename,:old.job,:old.mgr,:old.hiredate,:old.sal,:old.comm,:old.deptno); end if; end; / 行级触发器 :new.字段名 是 更改后新的内容 :old.字段名 是更改前的内容 要使用 new 和 old 必须先 加上 for each row old和new 如果执行update 更改前的就是old 更改后的就是new 如果是删除 new 就是 空 如果插入 old 就是空
创建序列 SQL> create sequence s_sstu; 序列已创建。 创建表--------------------------------------------------------------------- SQL> create table stu( 2 id int, 3 name varchar2(20)); 创建触发器----------------------------------------------------------------- create or replace trigger t_stu before insert on stu for each row begin select s_sstu.nextval into :new.id from dual; end; / 插入-------------------------------------------------- insert into stu(name) values('mt');
execute immediate 'sql语句'
begin
execute immediate 'create table emp as select * from emp';
end;
可以执行