Oracle教程
Oracle练习题

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中自动加入了一条数据,这就是触发器的作用。