存儲過程
存儲過程最直接的理解:就是保存了批量的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中自動加入了一條數據,這就是觸發器的作用。