在存儲過程中,有輸入的參數也有輸出參數,有一個問題是:如果我們要輸出的參數特別多,或者說要輸出一張表的所有字段,那張表可能有特別多的字段,我們要對每個輸出的字段都使用out參數嗎?可以是可以,但我們不可能這么做。我們想:能不能像java程序中,能不能定義一個集合或者一個bean容器來包含所有要輸出的字段。
下面就使用光標類型的out參數來輸出我們需要的數據信息:
我們可以新建一個包:包頭和包體
包頭:
CREATE OR REPLACE PACKAGE MYCORSOR AS --創建一個叫mycorsor的包type user_cursor is ref cursor; --定義一個cursor類型的user_cursorPRocedure queryuserlist(userlist out user_cursor); --創建存儲過程,輸出cursor類型userlistEND MYCORSOR;包體:CREATE OR REPLACEPACKAGE BODY MYCORSOR AS procedure queryuserlist(userlist out user_cursor) AS BEGIN open userlist for select * from TB_USER; --打開光標 END queryuserlist;END MYCORSOR;然后在應用程序調用這個存儲過程package jdbc.test;import java.sql.CallableStatement;import java.sql.Connection;import java.sql.ResultSet;import org.junit.Test;import jdbc.utils.JDBCUtils;import Oracle.jdbc.driver.OracleCallableStatement;import oracle.jdbc.driver.OracleTypes;public class testCursor { @Test public void testcursor() { String sql = "{call MYCORSOR.queryuserlist(?)}";//包名.存儲過程 Connection conn = null; CallableStatement call = null; ResultSet rs = null; try { conn = JDBCUtils.getConn(); call = conn.prepareCall(sql); call.registerOutParameter(1, OracleTypes.CURSOR); call.execute(); rs = ((OracleCallableStatement) call).getCursor(1);--得到輸出內容 while (rs.next()) { System.out.println("id=" + rs.getString("id") + "姓名為:" + rs.getString("name") + "年齡為" + rs.getString("age") + "月薪為" + rs.getString("money")); } } catch (Exception e) { // TODO: handle exception } finally { JDBCUtils.release(conn, call, rs);--釋放資源 } }}
新聞熱點
疑難解答