oracle数据库sql语句13 触发器



/**-----------------------
 *语句级触发器
 */
 
--创建emp副本emp1
create table emp1 as select * from emp where 1=2;


--插入触发器
create or replace trigger trg_emp1_insert_output_number
after insert on emp1
declare
num number(10);
begin
select count(*) into num from emp1;
dbms_output.put_line(num);
end;
/




--
insert into emp1 select * from emp where deptno=10;
insert into emp(empno,ename,sal) values(111,'sss', 5000);




--更新触发器
create or replace trigger trg_emp_update
after update on emp
declare
v_sal number;
begin
select avg(sal) into v_sal from emp;
dbms_output.put_line(v_sal);
end;
/


--
update emp set sal=sal+100;
 


--插入 或 更新 或 删除
create or replace trigger trg_emp1
after insert or update or delete on emp1
declare
num number(10);
v_sal number(7,2);
begin
if inserting then
select count(*) into num from emp1;
dbms_output.put_line('人数:'||num);
elsif updating then
select avg(sal) into v_sal from emp1;
dbms_output.put_line('平均工资:'||v_sal);
else
for i in (select deptno, count(*) num from emp1 group by deptno) loop
dbms_output.put_line(i.deptno||'人数:'||i.num);
end loop;
end if;

end;
/


--insert
insert into emp1 select * from emp where deptno=10;


--update
update emp1 set sal=sal+100;








--emp2
create table emp2 as select * from emp where 1=2;


--禁止非工作时间对emp2表进行操作
create or replace trigger trg_emp2
before insert or update or delete on emp2
begin
if to_char(SYSDATE, 'HH24:MI') not between
'08:00' and '18:00' or to_char(SYSDATE, 
'DY','NLS_DATE_LANGUAGE=AMERICAN')
IN('SAT','SUM')
then
raise_application_error(-20015,'只能在工作时间操作');
end if;
end;
/






--insert
insert into emp2 select * from emp where deptno=10;


--update
update emp2 set sal=sal+100;








--emp3
create table emp3 as select * from emp;


/**-----------------------
 *行句级触发器
 */
create or replace trigger trg_emp3
after update of sal on emp3
for each row
begin
if updating then 
dbms_output.put_line('更新编号:'||:new.empno||'更新工资'||:old.sal||'更新后工资'||:new.sal);
end if;
end;
/
 
--update
update emp3 set sal=sal+100 where empno=7934;


 
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值