《Oracle11g之安裝與卸載》 《Oracle之常用命令》 《Oracle之用戶管理》 《Oracle之pl/sql》 《Oracle之塊》 《Oracle之存儲過程》 《Oracle之函數》 《Oracle之包》
包用于在邏輯上組合存儲過程和函數,它由包和包體兩部分組成。
包:只包含了過程和函數的說明,但是沒有過程和函數的實現代碼,類似于java中的接口。
包體:用于實現包規范中的過程和函數,類似于java中接口的實現。
可以使用create package 命令來創建包。
代碼如下:
create or replace package sp_package is PRocedure p_insert(in_info varchar2);--定義p_insert存儲過程 function f_select(in_info varchar2) return varchar2;--定義f_select函數end;–user_objects表為數據庫中保存所有對象
代碼如下:
select object_name from user_objectswhere object_type='PACKAGE';如圖顯示:

可以使用create package body 命令創建包體。
代碼如下:
create or replace package body sp_package is--創建包體procedure p_insert(in_info varchar2) is--實現p_insert存儲過程 begin insert into data (info) values (in_info);--在data表中插入 end;function f_select(in_info varchar2)--實現f_select函數return varchar2 is out_info varchar2(20); begin select info into out_info from data where info =in_info;--查詢data表 return out_info;--必須攜帶返回值 end;end;當調用包的過程或是函數時,在過程和函數前需要帶有包名。
代碼如下:
call sp_package.p_insert('aabbcc'); 如圖所示: 
代碼如下:
var res varchar2(10);--定義變量call sp_package.f_select('aabbcc') into:res;--調用包中函數,并將返回值賦值print res;--打印結果如圖所示:

其實調用包中的存儲過程以及函數,只是在原先調用存儲過程以及函數中加上包名。
Oracle jar包csdn下載地址:http://download.csdn.net/download/abrazen_zz/9749345
代碼如下:
Class.forName("oracle.jdbc.driver.OracleDriver");//加載驅動 Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "scott", "tiger");//獲得連接 CallableStatement cstm = conn.prepareCall("{call sp_package.p_insert(?)}");//連接對應的存儲過程,指明包名 cstm.setString(1, "ccnn");//設置插入數據,1代表上述中第1個? cstm.execute();//執行代碼如下:
Class.forName("oracle.jdbc.driver.OracleDriver");//加載驅動 Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "scott", "tiger");//獲得連接 CallableStatement cstm = conn.prepareCall("{?=call sp_package.f_select(?)}");//連接對應的存儲過程 cstm.registerOutParameter(1, oracle.jdbc.OracleTypes.VARCHAR); //設置返回類型 cstm.setString(2, "ccnn");//設置數據,2對應第二個? cstm.execute();//執行 String result = cstm.getString(1);//得到返回數據 System.out.println("執行結果:"+result);新聞熱點
疑難解答