首页 > 数据库 > Oracle > 正文

Oracle学习-光标类型的out参数

2024-08-29 13:54:48
字体:
来源:转载
供稿:网友

在存储过程中,有输入的参数也有输出参数,有一个问题是:如果我们要输出的参数特别多,或者说要输出一张表的所有字段,那张表可能有特别多的字段,我们要对每个输出的字段都使用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);--释放资源		}	}}


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表