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;
可以执行