數據庫程序設計7 包

目錄

包的創建

包聲明

創建包體

刪除包

開發包的原則

內置包

動態SQL

本地動態SQL


打包了相關的PL/SQL類型、子程序到一個容器中。

兩個部分組成:

  • 聲明

注意:

  1. 包本身不能被調用、被參數化或被嵌套
  2. 允許Oracle服務器一次讀多個對象到內存中
  3. 用戶只能訪問程序包的包頭部分,包體被隱藏

可以考慮成一個類,和麪向對象有相通之處。

包的聲明和包體可以放在不同的文件中,方便管理。

包的創建

包聲明

語法:

CREATE [OR REPLACE] PACKAGE
package name
IS| AS
    公共變量、異常、遊標、子程序等聲明
END
package name;

例子:

CREATE OR REPLACE PACKAGE comm package
IS
    g comm    NUMBER := 100 ;
    PROCEDURE reset comm(p comm IN NUMBER) ;
END comn package;

創建包體

CREATE OR REPI ACE PACKAGE BODY
    package_ name
IS
    私有的變量、靜態變量、遊標、異常、類型、子程序、子程序體
END package name;

這裏注意:

  • 在包體中定義的標識符是私有結構,在包的外部不可見
  • 在包體中先定義私有變量和子程序,後定義公共子程序

另外,創建函數和之前的函數是一樣的。

刪除包

語法:

DROP PACKAGE package_name;
DROP PACKAGE BODY package_name;//只刪除包體

開發包的原則

  1. 先定義包聲明,再定義包體
  2. 包聲明中應該只包含公共結構
  3. 改變包的聲明需要重新編譯每個涉及到的子程序
  4. 包體的變化不要求重新編譯包的聲明
  5. 包聲明應該儘可能包含少的內容

使用包可以獲得更好的封裝性及模塊性,另外可以提升性能。

內置包

oracle提供的包,擴展了數據庫的功能,使用時可以省略包名。

動態SQL

SQL語句經歷的階段:

  • 解析(Parse)
  • 綁定(Bind)
  • 執行(Excute)
  • 取回(Fetch)

注意:大量頻發訪問的儘量使用綁定變量,持久化數據儘量使用佔位符

動態SQL效率較低

本地動態SQL

語法

EXECUTE IMMEDIATE '動態SQL'
[INTO 變量列表]
[USING 綁定參數列表] ;

注意:只能返回一行結果

例子:

CREATE OR REPLACE PROCEDURE del rows
    (p_table_name IN VARCHAR2,p_rows_deld OUT NUMBER)
IS
    V_str varchar2(50);
BEGIN
    v_str:= 'delete from '||I p_table_name ||' where sal> 3000';
    EXECUTE IMMEDIATE v_str;
    p_rows_deld := SQL%ROWCOUNT;
END;

表名在執行的時候才能確定。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章