《Oracle11g之安裝與卸載》 《Oracle之常用命令》 《Oracle之用戶管理》 《Oracle之pl/sql》 《Oracle之塊》 《Oracle之存儲(chǔ)過程》 《Oracle之函數(shù)》 《Oracle之包》
存儲(chǔ)過程用于執(zhí)行特定的操作。當(dāng)建立存儲(chǔ)過程時(shí),既可以指定輸入?yún)?shù)(in),也可以指定輸出參數(shù)(out)。 通過在存儲(chǔ)過程中使用輸入?yún)?shù),可以將數(shù)據(jù)傳遞到執(zhí)行部分。通過使用輸出參數(shù),可以將執(zhí)行部分的數(shù)據(jù)傳遞到應(yīng)用環(huán)境。在sql/plus中可以使用create PRocedure 命令來建立過程。
優(yōu)點(diǎn):sql語句每次都需要被編譯,過程只需要編譯一次。實(shí)現(xiàn)模塊化、減少網(wǎng)絡(luò)傳輸量、提高安全性(在java中調(diào)用只需要傳參數(shù),而不需要傳完整的sql語句)。
缺點(diǎn):移植性不好,如:更換數(shù)據(jù)庫,所有存儲(chǔ)過程需手動(dòng)導(dǎo)入
一、插入例子
創(chuàng)建存儲(chǔ)過程在命令窗口中調(diào)用存儲(chǔ)過程java中調(diào)用存儲(chǔ)過程二、查詢例子
查詢結(jié)果單一查詢結(jié)果多個(gè)插入的存儲(chǔ)過程與刪除、更改類似。
代碼如下:
create or replace procedure p_insert(param1 in varchar2) isbegin insert into data(info) values(param1);end;/--以/作為結(jié)束,不能直接復(fù)制,后續(xù)單獨(dú)加上解析: create or replace :代表創(chuàng)建或替換,也可單獨(dú)使用create p_insert :代表存儲(chǔ)過程名 varchar2:oracle專有的字符數(shù)據(jù)類型 param1:輸入?yún)?shù)名
可以使用 call或exe[cute]執(zhí)行存儲(chǔ)過程
如圖所示:

代碼如下:
Class.forName("oracle.jdbc.driver.OracleDriver");//加載驅(qū)動(dòng)Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "scott", "tiger");//獲得連接CallableStatement cstm = conn.prepareCall("{call p_insert(?)}");//連接對(duì)應(yīng)的存儲(chǔ)過程cstm.setString(1, "332211");//插入數(shù)據(jù),該參數(shù)在第一位,則第一個(gè)參數(shù)為1cstm.execute();//執(zhí)行補(bǔ)充:data表是博主自己創(chuàng)建的,內(nèi)容在上面圖中有給出。
代碼如下:
create or replace procedure p_query1(param1 in varchar2,param2 out varchar2) isbegin--查詢結(jié)果使用into 放入param2變量(查詢結(jié)果單一) select info into param2 from data where info=param1;end;/代碼如下:
Class.forName("oracle.jdbc.driver.OracleDriver");//加載驅(qū)動(dòng) Connectionconn conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "scott", "tiger");//獲得連接 CallableStatement cstm = conn.prepareCall("{call p_query1(?,?)}");//連接對(duì)應(yīng)的存儲(chǔ)過程p_query1 cstm.setString(1, "ccc");//設(shè)置查詢數(shù)據(jù)為ccc,該參數(shù)在第1位 cstm.registerOutParameter(2, oracle.jdbc.OracleTypes.VARCHAR); //設(shè)置返回類型 cstm.execute();//執(zhí)行 String result = cstm.getString(2);//得到返回?cái)?shù)據(jù) System.out.println("執(zhí)行結(jié)果:"+result);java代碼中,設(shè)置返回類型要與創(chuàng)建存儲(chǔ)過程中時(shí)一致。
結(jié)果如圖所示:

包名為pack_info,內(nèi)部定義個(gè)游標(biāo)類型。
create or replace package pack_info is--定義一個(gè)游標(biāo)類型,名為c_infotype c_info is ref cursor;end pack_info;/pack_info.c_info:代表使用pack_info中的c_info類型,該類型為游標(biāo)類型。
代碼如下:
Class.forName("oracle.jdbc.driver.OracleDriver");//加載驅(qū)動(dòng) Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "scott", "tiger");//獲得連接 CallableStatement cstm = conn.prepareCall("{call p_query2(?,?)}");//連接對(duì)應(yīng)的存儲(chǔ)過程 cstm.setString(1, "ccc");//設(shè)置查詢數(shù)據(jù),該參數(shù)在第1位 cstm.registerOutParameter(2, oracle.jdbc.OracleTypes.CURSOR); //設(shè)置返回類型為游標(biāo) cstm.execute();//執(zhí)行 ResultSet result = (ResultSet) cstm.getObject(2);//得到返回?cái)?shù)據(jù) while (result.next()) { System.out.println(result.getString("info")); System.out.println(result.getString("num")); }結(jié)果如圖所示:

Oracle jar包c(diǎn)sdn下載地址:http://download.csdn.net/download/abrazen_zz/9749345
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注