详解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