oracle存儲過程和觸發器

--過程
創建過程,create procedure語句可以用於創建過程,簡化語法如下:
create [or replace] procedure procedure_name
[(parameter_name [in|out|in out] type [,...])]
{is | as}
begin
  procedure_body
end parameter_name;

其中,or replace說明如果該過程已經存在,則用新的過程代替它。該選項可以用來修改一個現有過程;in|out|in out定義了參數的模式。in爲默認的模式。type指定參數的類型。 procedure_body包含執行過程任務的sql和pl/sql語句。

--創建一個過程,給某個教師加工資
create or replace
procedure update_t_sal(t_tno in t.tno%type, t_num in number)
as
t_count_id integer;
begin 
  select count(*) into t_count_id from t 
  where t_tno=tno;
  if t_count_id = 1 then
    update t 
    set sal=sal+t_num
    where  t_tno=tno;
    commit;
  end if;
exception
  when others then
  rollback;
end update_t_sal;

--過程的調用
call update_t_sal('t1', 100);

--刪除過程
drop procedure update_t_sal;

--觸發器
觸發器(trigger)是當特定的SQL DML語句,如insert,update或delete語句在特定的數據庫表上運行時,由數據庫自動運行(或者用技術來講是自動激活)的過程。觸發器對於實現表中某個列值的高級變更審計等功能非常有用。簡化語法如下:
create [or replace] trigger trigger_name
{before|after|instead of} trigger_event
on table_name
[for each row [when trigger_condition]]
begin
  trigger_body
end trigger_name
其中,for each row指定觸發器是一個行級觸發器,即當觸發器激活時,trigger_body中包含的代碼會爲每一行運行一次,如果for each row沒有,則觸發器是一個語句級觸發器,即不管所作用的行有多少,當觸發器激活時,trigger_body中包含的語句只運行一次。befor指定觸發器在觸發事件運行之前激活,after是定觸發器在觸發事件運行之後激活,instead of指定用觸發器激活代替觸發事件的運行。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章