存儲過程
存儲過程最直接的理解:就是保存了批量的sql(select,insert,if for),以后可以通過一個名字把這些批量的sql執(zhí)行,使用存儲過程在大批量數(shù)據(jù)查詢或計算時會帶來高性能,存儲過程編寫和調試比較復雜,不同數(shù)據(jù)庫產品存儲過程差異非常大,很難實現(xiàn)平滑一致。
● 建立存儲過程
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;
● 執(zhí)行存儲過程
var ret refcursor
exec proc_test(20,:ret)
print :ret
觸發(fā)器
觸發(fā)器是特殊的存儲過程,它與數(shù)據(jù)庫的insert、update和delete相關聯(lián),如定義完成觸發(fā)器之后,會在insert、update或delete語句執(zhí)行前或執(zhí)行后自動執(zhí)行觸發(fā)器中的內容。
觸發(fā)器示例,向emp表中加入數(shù)據(jù),采用觸發(fā)器自動再向t_log表里加入一條數(shù)據(jù)。
● 首先建立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;
● 建立觸發(fā)器
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表中加入數(shù)據(jù)
insert into emp(empno, deptno) values(7777, 10);

在emp中多了一條數(shù)據(jù)empno為7777,在t_log中自動加入了一條數(shù)據(jù),這就是觸發(fā)器的作用。