Oracle學習-光標類型的out參數

在存儲過程中,有輸入的參數也有輸出參數,有一個問題是:如果我們要輸出的參數特別多,或者說要輸出一張表的所有字段,那張表可能有特別多的字段,我們要對每個輸出的字段都使用out參數嗎?可以是可以,但我們不可能這麼做。我們想:能不能像java程序中,能不能定義一個集合或者一個bean容器來包含所有要輸出的字段。

下面就使用光標類型的out參數來輸出我們需要的數據信息:

我們可以新建一個包:包頭和包體


包頭:

CREATE OR REPLACE 
PACKAGE MYCORSOR AS    --創建一個叫mycorsor的包
type user_cursor is ref cursor; --定義一個cursor類型的user_cursor
procedure queryuserlist(userlist out user_cursor); --創建存儲過程,輸出cursor類型userlist
END MYCORSOR;
包體:

CREATE OR REPLACE
PACKAGE 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);--釋放資源
		}
	}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章