好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

详解Oracle在out参数中访问光标

详解Oracle在out参数中访问光标

一 概念

申明包结构
包头:负责申明
包体:负责实现 

二 需求

查询某个部门中所有员工的所有信息

三 包头

?

1

2

3

4

5

CREATE OR REPLACE

PACKAGE MYPACKAGE AS

  type empcursor isref cursor ;

  procedure queryEmplist(dno in number,emplist out empcursor);

END MYPACKAGE;

四 包体

包体需要实现包头中声明的所有方法

?

1

2

3

4

5

6

7

8

CREATE OR REPLACE

PACKAGE BODY MYPACKAGE AS

  procedure queryEmplist(dno in number,emplist out empcursor) AS

BEGIN

--打开光标

   open emplist forselect* from emp where deptno = dno;

END queryEmplist;

END MYPACKAGE;

五 在应用程序中访问包中的存储过程

1、代码

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

package demo.oracle;

import java.sql.CallableStatement;

import java.sql. Connection ;

import java.sql.ResultSet;

import oracle.jdbc.OracleCallableStatement;

import oracle.jdbc.OracleTypes;

import org.junit.Test;

import demo.utils.JDBCUtils;

publicclassTestCursor{

/*

  CREATE OR REPLACE PACKAGE MYPACKAGE AS

  type empcursor is ref cursor ;

  procedure queryEmplist(dno in number,emplist out empcursor);

END MYPACKAGE;

  * */

@Test

publicvoid testCursor(){

String sql= "{call MYPACKAGE.queryEmplist(?,?)}" ;

Connection conn = null ;

CallableStatement call = null ;

ResultSet rs = null ;

try{

//获取数据库的连接

   conn =JDBCUtils.getConnection();

//创建statement

   call = conn.prepareCall(sql);

//对于 in 参数,赋值

   call.setInt(1,10);

//对于 out 参数,申明

   call.registerOutParameter(2,OracleTypes. CURSOR );

//执行调用

   call. execute ();

//取出该部门中所有员工的信息

   rs =((OracleCallableStatement)call).getCursor(2);

while(rs. next ()){

//取出该员工的员工号,姓名,薪水和职位

int empno = rs.getInt( "empno" );

String name =rs.getString( "ename" );

double salay = rs.getDouble( "sal" );

String job = rs.getString( "empjob" );

System. out .println(empno+ "\t" + name + "\t" +salay+ "\t" +job);

}

}catch(Exception e){

   e.printStackTrace();

}finally{

JDBCUtils.release(conn, call, rs);

}

}

}

2、运行结果

?

1

2

3

7782  CLARK  6450.0  MANAGER

7839  KING  10100.0  PRESIDENT

7934  MILLER  3300.0  CLERK

以上就是Oracle在out参数中访问光标的实例,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

原文链接:http://cakin24.iteye.com/blog/2389812

查看更多关于详解Oracle在out参数中访问光标的详细内容...

  阅读:25次