Oracle存储过程与触发器
存储过程
存储过程最直接的理解:就是保存了批量的sql(select,insert,if for),以后可以通过一个名字把这些批量的sql执行,使用存储过程在大批量数据查询或计算时会带来高性能,存储过程编写和调试比较复杂,不同数据库产品存储过程差异非常大,很难实现平滑一致。
● 建立存储过程
create or replace procedure proc_test(in_var number,out_var out sys_refcursor)
as
begin
open out_var for select * from emp where deptno=in_var;
end;
● 执行存储过程
var ret refcursor
exec proc_test(20,:ret)
print :ret
触发器
触发器是特殊的存储过程,它与数据库的insert、update和delete相关联,如定义完成触发器之后,会在insert、update或delete语句执行前或执行后自动执行触发器中的内容。
触发器示例,向emp表中加入数据,采用触发器自动再向t_log表里加入一条数据。
● 首先建立t_log表
create table t_log (
log_id number(10) primary key,
log_time date
)
● 为建立t_log的主键建立sequence
create sequence seq_log_id start with 1 increment by 1;
● 建立触发器
create or replace trigger tri_test
after insert on emp
begin
insert into t_log(log_id, log_time) values(seq_log_id.nextval, sysdate);
end;
● 向emp表中加入数据
insert into emp(empno, deptno) values(7777, 10);
在emp中多了一条数据empno为7777,在t_log中自动加入了一条数据,这就是触发器的作用。