oracle 儲存過程、函式和觸發器用法例項詳解
阿新 • • 發佈:2020-03-01
本文例項講述了oracle 儲存過程、函式和觸發器用法。分享給大家供大家參考,具體如下:
一、儲存過程和儲存函式
指儲存在資料庫中供所有使用者程式呼叫的子程式叫儲存過程、儲存函式。
建立儲存過程
用CREATE PROCEDURE命令建立儲存過程。
語法:
create [or replace] procedure 過程名(引數列表) as PLSQL子程式體;
--給指定員工漲工資 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;
呼叫儲存過程
--方法一 begin addSal(7369); end; --方法二 exec addSal(7369);
儲存函式
函式為一命名的儲存程式,可帶引數,並返回一計算值。函式和過程的結構類似,但必須有一個return子句,用於返回函式值。函式說明要指定函式名,結果值的型別,以及引數型別等。
建立語法:
CREATE [OR REPLACE] FUNCTION 函式名 (引數列表) RETURN 函式值型別 AS PLSQL子程式體;
--查詢指定員工的年收入 create function queryEmpSal(empid in number) return number as 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 [私有資料型別定義] [私有變數、常量宣告] [私有子程式宣告和定義] [公有子程式定義] begin PL/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,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資料庫程式設計有所幫助。