oracle回来成果集ITeye - AG环亚娱乐

oracle回来成果集ITeye

2019-01-11 19:57:17 | 作者: 春海 | 标签: 回来,成果,进程 | 浏览: 3082

java操作oracle的存储进程 或函数的数据首要有以下几种:无回来参数,回来单个参数,回来成果集;前两种简单运用,下面首要介绍第三种回来成果集;下面给出两种方法,别离是运用存储进程和函数的方法;

存储进程,首要为了便利树立一个自己的包,如下:

 

CREATE OR REPLACE PACKAGE pkg_test AS
 TYPE OEPSMWS_CURSOR IS REF CURSOR;
 PROCEDURE get_data(p_id NUMBER,p_rc OUT OEPSMWS_CURSOR);
 function funcGetdatas(p_id number) return OEPSMWS_CURSOR;
END pkg_test;

别离界说了回来的游标,和进程及函数的界说;

 

CREATE OR REPLACE PACKAGE BODY pkg_test AS
procedure get_datas(p_id number,o_cursor out OEPSMWS_CURSOR ) 
 result_sql varchar2(200);
 begin
 if p_id is null or p_id=0 then
 open o_cursor for select * from area;
 else result_sql:=select * from area where id =:v_id;
 open o_cursor for result_sql using p_id;
 end if; 
 end get_datas; 
-----
function funcGetdatas(p_id number) return o_cursor is rc OEPSMWS_CURSOR ; --界说ref cursor变量
 sqlstr2 varchar2(500);
 begin
 if p_id =0 then
 --静态测验,直接用select句子直接回来成果
 open o_cursor for SELECT ID,name,code FROM area;
 else
 --动态sql赋值,用:w_id来声明该变量从外部取得
 sqlstr2 := select id,name,code from area where id =:w_id;
 --动态测验,用sqlstr字符串回来成果,用using关键词传递参数
 open o_cursor for sqlstr2 using p_id;
 end if;
 return o_cursor ;
 end funcGetdatas;
end pkg_test;

  这样就经过存储进程或函数别离获取回来成果集的游标了;下面是java调用方法:

public static void testOrclcursor(){
 String driver = "oracle.jdbc.driver.OracleDriver";
 String url = "jdbc:oracle:thin:@127.0.0.1:1521:XE ";
 String user = "";
 String pwd = "";
 Connection conn = null;
 CallableStatement cs = null;
 ResultSet rs = null;
 try {
 Class.forName(driver);
 conn = DriverManager.getConnection(url, user, pwd);
 cs = conn.prepareCall("{ call pkg_test.funcGetdatas(?,?) }");
 cs.setInt(1, 290);
 cs.registerOutParameter(2, oracle.jdbc.OracleTypes.CURSOR);
 cs.execute();
 rs = ((OracleCallableStatement) cs).getCursor(2);
 // 或许下一种方法
 // rs=(ResultSet) cs.getObject(2);
 if (rs != null) {
 while (rs.next()) {
 System.out.println(rs.getString("code"));
 } catch (ClassNotFoundException e) {
 e.printStackTrace();
 } catch (SQLException e) {
 e.printStackTrace();
}

 

 

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表AG环亚娱乐立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章