end;
insert into scott.emp values(11,'OFFICELADY','SALE',7698,'1-5月-2011',29000,3000,20);
--对表进行删除操作后的记录
create or replace trigger old_tri after delete on scott.emp
for each row
begin
dbms_output.put_line('删除的用户是:'||:old.ename);
end;
delete from scott.emp where empno=11;
--before和after
--行级触发器,语句级触发器 (for each row)
--行级触发器对DML语句影响每一行的操作,例如update语句,有多少条语句,触发器就会被执行多少次
--语句级触发器对我们的DML语句只执行一次操作,例如insert语句,即使有多条,触发器只被执行一次
--before表示在语句执行之前出发
--after表示在语句执行之后进行出发
--实际看到的效果没有什么区别
--禁用触发器,启用触发器
alter trigger new_tri disable;
alter trigger old_tri enable;
--禁用一个表中所有触发器
alter table tb_stu disable all triggers;
--删除触发器
drop trigger new_tri;
select * from scott.emp;
select * from lu.emptest
函数
| --定义一个函数实现加法运算 create or replace function myAdd(num1 number,num2 number) return number--在规则说明中需要return --只能够返回一个值(和声明的返回类型匹配) --需要return关键字来返回值 --函数不能单独的被调用,只能作为sql代码的一部分来执行 as num3 number; begin num3:=num1+num2; return num3; end; --调用函数:函数不能单独的被调用,需要作为sql一部分来调用 declare n number; begin n:=myAdd(12,34); dbms_output.put_line(n); end; --定义一个函数,查询emp 将所有的信息打印到output --并且计算出所有员工的工资总和,返回工资总和 --函数和存储过程一样,在定义的时候如果没有参数就不需要"()" create or replace function getMsg return number as cursor emp_msg is select * from scott.emp; totalSal number; begin for e in emp_msg loop dbms_output.put_line(e.ename||'-'||e.sal); end loop; select sum(sal) into totalSal from scott.emp; return totalSal; end; --调用函数 select getMsg() from dual; |
包
| --定义一个包的说明部分 (类似接口) create or replace package my_package is procedure myProc; function myAdd(m number,n number)return number; end my_package; --定义一个人包的主题部分(类似程序体DAO) create or replace package body my_package is procedure myProc is cursor emp_msg isselect * from scott.emp; begin for e in emp_msg loop dbms_output.put_line(e.ename); endloop; end; function myAdd(m number,n number) return number as num number; begin num:=n+m; return num; end; end my_package; call my_package.myProc(); select my_package.myAdd(1,2) 结果 from dual; |