编程开发之--Oracle数据库--存储过程在out参数中使用光标(3)
在本系列學(xué)習(xí)隨筆中的第2節(jié)我們留下了2個(gè)問(wèn)題,我們現(xiàn)在討論在out參數(shù)中使用光標(biāo)。
1、要在out參數(shù)中使用光標(biāo),我們需要申明一個(gè)包的結(jié)構(gòu),包的結(jié)構(gòu)分為包頭和包體,包頭只負(fù)責(zé)申明,包體只負(fù)責(zé)實(shí)現(xiàn)。包頭、包體也是數(shù)據(jù)庫(kù)中的對(duì)象,與表是同一級(jí)別類型。
? ? 應(yīng)用場(chǎng)景舉例:查詢某部門所有員工的所有信息
? ? 包頭:根據(jù)以下步驟創(chuàng)建
命名包名:mypackage:
在包中編寫我們自己的存儲(chǔ)過(guò)程或者存儲(chǔ)函數(shù):
按下鍵盤ctrl+s,sql developer將自動(dòng)存盤并且進(jìn)行編譯:
接下來(lái)我們創(chuàng)建包的主體:
將會(huì)自動(dòng)為我們創(chuàng)建要實(shí)現(xiàn)的包體部分:
然后我們將包體實(shí)現(xiàn)完整:
同樣,按下ctrl+s后,將自動(dòng)幫我們存盤和編譯生成相應(yīng)的包體結(jié)構(gòu)樹:
使用desc語(yǔ)句查看包的結(jié)構(gòu):
2、在應(yīng)用中訪問(wèn)包中的存儲(chǔ)過(guò)程,需要帶上包的名字
? ? 在測(cè)試包中添加我們的測(cè)試類TestCursor.java
package demo.oracle;import java.sql.CallableStatement; import java.sql.Connection; import java.sql.ResultSet;import org.junit.Test;import demo.utils.JDBCUtils; import oracle.jdbc.OracleCallableStatement; import oracle.jdbc.internal.OracleTypes;public class TestCursor {/*** create or replace PACKAGE MYPACKAGE AS type empcursor is ref cursor;procedure queryEmpList(dno in number,empList out empcursor);END MYPACKAGE;*/@Testpublic void testCursor(){//{call <procedure-name>[(<agr1>,<agr2>,...)]}String sql="{call MYPACKAGE.queryEmpList(?,?)}";Connection conn=null;CallableStatement call=null;ResultSet rs=null;try {//獲得數(shù)據(jù)庫(kù)連接conn=JDBCUtils.getConnection();//根據(jù)連接創(chuàng)建statmentcall=conn.prepareCall(sql);//對(duì)in參數(shù)賦值call.setInt(1, 10);//對(duì)out參數(shù)進(jìn)行申明call.registerOutParameter(2, OracleTypes.CURSOR);//執(zhí)行我們的調(diào)用call.execute();//取出該部門中所有員工的信息,由于我們當(dāng)前是Oracle的光標(biāo),Oracle的存儲(chǔ)過(guò)程,所以我們要對(duì)call進(jìn)行轉(zhuǎn)換rs=((OracleCallableStatement)call).getCursor(2);while(rs.next()){//取出該員工的員工號(hào)、姓名、薪水、職位字段作為示例int empno = rs.getInt("empno");String name = rs.getString("ename");double salary = rs.getDouble("sal");String job = rs.getString("job");System.out.println(empno+"\t"+name+"\t"+salary+"\t"+job);}} catch (Exception e) {e.printStackTrace();}finally {JDBCUtils.release(conn, call, rs);}} }啟動(dòng)我們的單元測(cè)試,運(yùn)行結(jié)果:
總結(jié):存儲(chǔ)過(guò)程可以實(shí)現(xiàn)存儲(chǔ)函數(shù)所有的能力
轉(zhuǎn)載于:https://www.cnblogs.com/ZeroMZ/p/9196927.html
超強(qiáng)干貨來(lái)襲 云風(fēng)專訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生總結(jié)
以上是生活随笔為你收集整理的编程开发之--Oracle数据库--存储过程在out参数中使用光标(3)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 性能优化的基本常识
- 下一篇: CentOS 7.4下使用yum安装My