PL/SQL包(package)操作例項講解
阿新 • • 發佈:2018-12-26
建立包裝規範定義
規範是介面到包。它只是宣告的型別,變數,常量,異常,遊標和子程式可從封裝外部引用。置於規範的所有物件被稱為公共物件。任何子程式在封裝主體中沒有包定義但編碼被稱為私有物件。下面的程式碼片段顯示了具有多個的程式包規範定義。一個包中可以定義的全域性變數和多個程式或函式。
-- Created on 2018/4/2 by E.WANG -- 建立包規範定義 create or replace package math_package as --建立兩個整數加法儲存過程 procedure add(a in int,b in int,c out int); --建立兩個是整數的減法函式 function sub(a in int,b in int ,c out int) return int; --建立乘法儲存過程 procedure mul(a in int,b in out int); --建立除法函式 function div(a in int ,b in out number) return number; end math_package;
執行上述程式碼給出如下截圖:
建立包主體
包體已經在包定義和其他私人宣告中宣告的各種方法,這是從程式碼隱藏在包外的程式碼。CREATE PACKAGE BODY語句用於建立包體。下面的程式碼片段顯示了包體宣告上面建立的math_package包:
-- Created on 2018/4/2 by E.WANG --給包math_package建立包體 create or replace package body math_package as --建立兩個整數加法儲存過程 procedure add(a in int,b in int,c out int) is begin c:=a+b; dbms_output.put_line(a || ' + ' || b || ' = ' || c); end add; --建立兩個是整數的減法函式 function sub(a in int,b in int ,c out int) return int is begin if a>b then c:=a-b; else c:=b-a; end if; return c; exception when VALUE_ERROR then dbms_output.put_line('The value is error!'); end sub; --建立乘法儲存過程 procedure mul(a in int,b in out int) is tmp int; begin tmp:=b; b:=a*b; dbms_output.put_line(a || ' * ' || tmp || ' = ' || b); end mul; --建立除法函式 function div(a in int ,b in out number) return number as begin if b!=0 then b:=a/b; else raise ZERO_DIVIDE; end if; return b; exception when ZERO_DIVIDE then dbms_output.put_line('ZERO_DIVIDE'); end div; end math_package;
執行上述程式碼截圖:
使用包元素
訪問包元素(變數,過程或函式)的語法如下:
package_name.element_name;
使用上述建立包的操作例項原始碼:
-- Created on 2018/4/2 by E.WANG declare --定義幾個變數 a int; b int; c int; d number; tmp number; begin --給a,b賦值 a:=10; b:=20; d:=0; --呼叫math_package的add儲存過程 math_package.add(a,b,c); --呼叫math_package的mul儲存過程 math_package.mul(a,b); --重新給變數賦值 a:=10; b:=20; --呼叫math_package的sub函式 c:=math_package.sub(a,b,c); if a>b then dbms_output.put_line(a || ' - ' || b || ' = ' || c); else dbms_output.put_line(b || ' - ' || a || ' = ' || c); end if; --呼叫math_package的div函式 d:=2; tmp:=d; d:=math_package.div(a,d); dbms_output.put_line(a || ' / ' || tmp || ' = ' || d); end;
執行結果截圖如下: