原文地址 http://www.javaworld.com.tw/jute/post/view?bid=21&id=148969&sty=1&tpg=1&age=-1
這裡先不管 Java 搭配 procedure 恰不恰當
只是提供語法給大家參考
Oracle 版本:10g 或 9i
JDBC 版本:10.2.0.1.0 ( 在此應用上 10.1.0.2.0 版本連 9i 的可以, 但連 10g 的有問題 )
Procedure 語法
CREATE OR REPLACE PROCEDURE PRO_RETURN_RS( in_n in a.f_1%type , ) AS BEGIN open out_rs SELECT f_1,f_2 FROM a WHERE f_1>in_n ; END; / |
這裡須要有一個 out 的參數, 型態是 sys_refcursor , 用來將資料集傳出
9i 以前必須自行宣告一個 cursor 型態, 到了 9i 後已有提供一個可以直接用的 sys_refcursor 型態了
Java 語法
Class.forName(); Connection cn = DriverManager.getConnection( ,, ); call = cn.(); call.setInt(1,1); call.(2, ); call.execute(); ResultSet rs = (2); (rs.next()) System.out.println(rs.getInt()++rs.getString()+); cn.close(); |
同樣的, 若是要用 procedure 傳出字串, 則可以參考以下語法
Procedure 語法
CREATE OR REPLACE PROCEDURE PRO_RETURN_STRING( in_n in number ,out_s out varchar2 ) AS BEGIN SELECT f_2 into out_s FROM a WHERE f_1=in_n ; END; / |
Java 語法
Class.forName(); Connection cn = DriverManager.getConnection( ,, ); CallableStatement call = cn.prepareCall(); call.setInt(1,1); call.registerOutParameter(2, ); call.execute(); String s = (String) call.getObject(2); out.println(s); cn.close(); |