儲存過程和儲存函式和觸發器示例

2021-08-27 10:32:27 字數 1898 閱讀 8522

oracle的

scott使用者

1、儲存過程示例:為指定的職工在原工資的基礎上長10%

的工資

sql>createorreplaceprocedureraisesalary(empidinnumber)

aspsalemp.sal%type;

begin

selectsalintopsalfromempwhereempno=empid;

updateempsetsal=sal*1.1whereempno=empid;

dbms_output.put_line('員工號

:'||empid||'

漲工資前

'||psal||'漲工資後

'||psal*1.1);

end;

procedurecreated

sql>setserveroutputon

sql>execraisesalary(7369);

員工號:7369

漲工資前

800漲工資後

880

pl/sqlproceduresuccessfullycompleted

sql>/**/

查詢某職工的總收入

createorreplacefunctionqueryempsalary(empidinnumber)

returnnumber

aspsalnumber;--定義變數儲存員工的工資

pcommnumber;--定義變數儲存員工的獎金

begin

selectsal,commintopsal,pcommfromempwhereempno=empid;

returnpsal*12+nvl(pcomm,0);

end;

functioncreated

sql>declare

v_salnumber;

begin

v_sal:=queryempsalary(7934);

dbms_output.put_line('salaryis:'||v_sal);

end;

salaryis:15600

pl/sqlproceduresuccessfullycompleted

sql>begin

dbms_output.put_line('salaryis:'||queryempsalary(7934));

end;

salaryis:15600

pl/sqlproceduresuccessfullycompleted

3、建立觸發器示例1

:限制非工作時間向資料庫插入資料

sql>createorreplace

triggersecurityemp

beforeinsertonemp

declare

begin

ifto_char(sysdate,'day')in('星期四

','星期六

','星期日')

orto_number(to_char(sysdate,'hh24'))notbetween8and18then

');

endif;

end;

triggercreated

4、建立觸發器示例2

:確認資料(檢查

emp表中

sal的修改值不低於原值)

sql>createorreplacetriggerchecksal

beforeupdateofsalonemp

foreachrow

declare

begin

if:new.sal<:old.salthen

');

endif;

end;

triggercreated

儲存過程和觸發器

儲存過程 stored procedure 是在大型資料庫系統中,一組為了完成特定功能的sql 語句集,經編譯後儲存在資料庫中,使用者通過指定儲存過程的名字並給出引數 如果該儲存過程帶有引數 來執行它。簡單的敘述 在大型資料庫系統中,儲存過程和觸發器具有很重要的作用。無論是儲存過程還是觸發器,都是s...

儲存過程和觸發器

1 什麼是儲存過程呢?定義 將常用的或很複雜的工作,預先用sql語句寫好並用乙個指定的名稱儲存起來,那麼以後要叫資料庫提供與已定義好的儲存過程的功能相同的服務時,只需呼叫execute,即可自動完成命令。講到這裡,可能有人要問 這麼說儲存過程就是一堆sql語句而已啊?microsoft公司為什麼還要...

觸發器和儲存過程

觸發器用處還是很多的,比如校內網 開心網 facebook,你發乙個日誌,自動通知好友,其實就是在增加日誌時做乙個後觸發,再向通知表中寫入條目。因為觸發器效率高。而uch沒有用觸發器,效率和資料處理能力都很低。儲存過程的實驗步驟 mysql delimiter mysql create proced...