oracle 包 簡單使用


理解PL/SQL包

簡介

包(package)的主要作用是用於邏輯組合相關的PL/SQL類型
比如記錄類型或者集合類型,PL/SQL游標或游標聲明以及PL/SQL子程序
還可以包含任何可以在塊的聲明區中定義的變量

或者說是

將功能或業務相似的存儲過程,函數
以及類型等進行一個封裝

包的組成

一個PL/SQL包由如下兩部分組成

  • 包規范(包聲明)

包規范: 主要是包的一些定義信息,不包含具體的代碼實現部分
也可以說包規范是PL/SQL程序和其他應用程序的接口
包含類型,記錄,變量,常量,異常定義,游標和子程序的聲明

  • 包體

包體是對包規范中聲明的子程序的實現部分
包體的內容對於外部應用程序來說是不可見的
包體就像是一個黑匣子一樣,是對包規范的實現

包的優點

  • 1模塊化設計

通過將邏輯相關的類型,常量,變量,異常和子程序放到一個命名的
pl/sql模塊中,使得每一個包都容易理解,有助於模塊化程序的開發
使得包與包之間的接口簡單,清晰

  • 2規范化的程序設計

在基於包的應用程序設計時,可以首先規划並在包規范中定義包需要提供的功能
即便當前並沒有實現包體,也可以編譯包規范部分
然后引用該包的存儲子程序會被編譯

  • 3實現信息的隱藏

包規范中定義的常量,變量和異常及子程序等時公有的,可以被外部訪問
可以規划將哪些內容公開給外部進行調用
如果不想對外公開,可以在包體中定義這些內容,這樣就可以實現信息的隱藏

  • 4提供全局共享的附加功能

在包中公開的變量或游標在一個會話期會一直存在
因此可以將包中定義的變量當做全局變量來使用

  • 5提供了良好的性能體驗

由於在首次打開包子程序時,整個包都會被加載到內存中
因而后續的調用只需要從內存中讀取而不需要再次讀取磁盤,
提供了較好的性能

包規范

語法

create or replace package 包名
is
  --聲明變量
  --聲明常量
  --類型的定義
  --游標的定義
  --聲明存儲過程
  procedure 存儲過程名[(參數 in|out|in out 類型,..)];
  --聲明函數
  function 函數名[(參數 類型,...)] return 返回值類型;
end[包名];

創建一個包規范

create or replace package pk1
is
  --聲明一個變量
  s varchar2(50);
  --聲明一個常量
  T constant varchar2(10):='TAB_';
  --定義一個集合類型
  type ity is table of varchar2(30);
  --聲明一個存儲過程
  procedure p1;
  --聲明函數
  function fn(n number) return number;
end pk1;

包體

語法

create or replace package body 包名
is
  --聲明私有對象
  --聲明私有變量
  --聲明私有常量
  --私有函數或存儲過程
  --公有對象的實現
end[包名];

注意:
包名,和包聲明的名字一樣
私有對象只能在包體內部調用,在最前面聲明

創建一個包體

create or replace package body pk1
is
  --聲明變量
  ss varchar(50);
  --乘法表
  procedure p1
    is
    begin
      for i in 1..9 loop
        for j in 1..i loop
          dbms_output.put(i||'*'||j||'='||i*j);
        end loop;
      dbms_output.put_line('');
      end loop;
    end;
  
  --階乘
  function fn(n number) return number
    is
    --聲明一個變量保存階乘
      s number(10) :=1;
    begin
      for i in 1..n loop
        s:=i*s;
      end loop;
      return s;
    end;
end;

調用

調用1

begin
  pk1.s:=3;
  dbms_output.put_line(pk1.s);
end;

輸出1

3

調用2

begin
  pk1.ss:=3;
  dbms_output.put_line(pk1.ss);
end;  

輸出2

ORA-06550: 第 2 行, 第 7 列: 
PLS-00302: 必須聲明 'SS' 組件

變量ss在包體中聲明,外部程序不能訪問

調用3

begin
  pk1.p1();
end;

輸出3

1*1=1
2*1=22*2=4
3*1=33*2=63*3=9
4*1=44*2=84*3=124*4=16
5*1=55*2=105*3=155*4=205*5=25
6*1=66*2=126*3=186*4=246*5=306*6=36
7*1=77*2=147*3=217*4=287*5=357*6=427*7=49
8*1=88*2=168*3=248*4=328*5=408*6=488*7=568*8=64
9*1=99*2=189*3=279*4=369*5=459*6=549*7=639*8=729*9=81

調用&&輸出4

SQL> select pk1.fn(4) from dual;
 PK1.FN(4)
----------
        24


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM