本文實例講述了oracle 存儲過程、函數和觸發器用法。分享給大家供大家參考,具體如下:
一、存儲過程和存儲函數
指存儲在數據庫中供所有用戶程序調用的子程序叫存儲過程、存儲函數。
創建存儲過程
用CREATE PROCEDURE命令建立存儲過程。
語法:
create [or replace] procedure 過程名(參數列表)asPLSQL子程序體;
--給指定員工漲工資create procedure addSal(empid in number)as psal emp.sal%type;begin select sal into psal from emp where empno=empid; update emp set sal = sal * 1.1 where empno=empid; dbms_output.put_line(empid || '漲工資前' || psal || '漲工資后' || (psal * 1.1));end;
調用存儲過程
--方法一beginaddSal(7369);end;--方法二exec addSal(7369);
存儲函數
函數為一命名的存儲程序,可帶參數,并返回一計算值。函數和過程的結構類似,但必須有一個return子句,用于返回函數值。函數說明要指定函數名,結果值的類型,以及參數類型等。
創建語法:
CREATE [OR REPLACE] FUNCTION 函數名 (參數列表)RETURN 函數值類型ASPLSQL子程序體;
--查詢指定員工的年收入create function queryEmpSal(empid in number)return numberas psal emp.sal%type; pcomm emp.comm%type;begin select sal,comm into psal,pcomm from emp where empno=empid; return (psal*12) + nvl(pcomm,0);end;
函數的調用
declare psal number;begin psal:=queryEmpSal(7369); dbms_output.put_line(psal);end;
或
begin dbms_output.put_line(queryEmpSal(7369));end;
過程和函數中的IN和OUT
一般來講,過程和函數的區別在于函數可以有一個返回值,而過程沒有返回值。
但過程和函數都可以通過out指定一個或多個輸出參數。我們可以利用out參數,在過程和函數中實現返回多個值。
什么時候用存儲過程或函數?
原則:如果只有一個返回值,用存儲函數,否則,就用存儲過程。
創建包和包體
什么是包和包體?
包是一組相關過程、函數、變量、常量、類型和游標等PL/SQL程序設計元素的組合。包具有面向對象設計的特點,是對這些PL/SQL程序設計元素的封裝。
包體是包定義部分的具體實現。
包由兩個部分組成:包定義和包主體。
--包定義create [or replace] package 包名 as[公有數據類型定義][公有游標聲明][公有變量、常量聲明][公有子程序聲明]end 包名;
--包主體create [or replace] package body 包名 as[私有數據類型定義][私有變量、常量聲明][私有子程序聲明和定義][公有子程序定義]beginPL/SQL子程序體;end 包名;
--創建mypackage包create or replace package mypackage as procedure total(num1 in number, num2 in number, num3 out number);end mypackage;
--mypackage包體create or replace package body mypackage as--計算累加和的total過程procedure total(num1 in number, num2 in number, num3 out number) as tmp number := num1;begin if num2 < num1 then num3 := 0; else num3 := tmp; loop exit when tmp > num2; tmp := tmp + 1; num3 := num3 + tmp; end loop; end if;end total;end mypackage;
(*注意:包定義和包體要分開創建)
調用包
declare num1 number;begin mypackage.total(1, 5, num1); dbms_output.put_line(num1);end;
更多關于Oracle相關內容感興趣的讀者可查看本站專題:《Oracle常用函數匯總》、《Oracle日期與時間操作技巧總結》及《php+Oracle數據庫程序設計技巧總結》
希望本文所述對大家Oracle數據庫程序設計有所幫助。
新聞熱點
疑難解答