一、包的作用 • Oracle中包的概念與Java中包的概念非常類似,只是Java中的包是為了分類管理類,但是關鍵字都是package。 • 在一個大型項目中,可能有很多模塊,而每個模塊又有自己的過程、函數等。而這些過程、函數預設是放在一起的(如在PL/SQL中,過程預設都是放在一起的,即Proce ...
一、包的作用
• Oracle中包的概念與Java中包的概念非常類似,只是Java中的包是為了分類管理類,但是關鍵字都是package。
• 在一個大型項目中,可能有很多模塊,而每個模塊又有自己的過程、函數等。而這些過程、函數預設是放在一起的(如在PL/SQL中,過程預設都是放在一起的,即Procedures中),這些非常不方便查詢和維護,甚至會發生誤刪除的事件。所以通過使用包就可以分類管理過程和函數。
• 包中還可以自定義自定義類型,從而在過程和函數中可以直接使用自定義變數。
二、包的構成
• 包規範部分
• 包體部分
--包規範定義語法 create or replace package 包名 as |is --定義存儲過程 --定義函數 --定義ref游標類型 end 包名; --包體定義語法 create or replace package body 包名 is |as --實現存儲過程 --實現函數 end 包名;
三、包的實例
• 定義包:
--定義包規範 create or replace package getemp_package as --定義一個游標類型 type emp_cursor_type is ref cursor; --定義一個存儲過程 procedure getemp(p_sal in number,c_emp out emp_cursor_type); end getemp_package; --定義包體 create or replace package body getemp_package as --實現存儲過程 procedure getemp(p_sal in number,c_emp out emp_cursor_type) as begin --打開游標 open c_emp for select * from emp where sal>p_sal; end getemp; end getemp_package;
• 調用包:
set serveroutput on; declare c_out getemp_package.emp_cursor_type; v_emp emp%rowtype; begin getemp_package.getemp(p_sal=>900,c_emp=>c_out); loop fetch c_out into v_emp; exit when c_out%notfound; dbms_output.put_line(v_emp.empno || '-' || v_emp.ename); end loop; end;