Oracle 版本:10g 或 9i
JDBC 版本:10.2.0.1.0 ( 在此應用上 10.1.0.2.0 版本連 9i 的可以, 但連 10g 的有問題 )
Procedure 語法
1 2 3 4 5 6 7 8 9 10 | CREATE OR REPLACE PROCEDURE PRO_RETURN_RS( in_n in a.f_1%type , out_rs out sys_refcursor ) AS BEGIN open out_rs for SELECT f_1,f_2 FROM a WHERE f_1>in_n ; END; / |
9i 以前必須自行宣告一個 cursor 型態,
到了 9i 後已有提供一個可以直接用的 sys_refcursor 型態了
Java 呼叫 procedure 回傳 ResultSet 的語法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | Class.forName("oracle.jdbc.driver.OracleDriver"); Connection cn = DriverManager.getConnection( "jdbc:oracle:thin:@localhost:1521:sid","uid","pwd" ); //取得 ResultSet CallableStatement call = cn.prepareCall( "{call pro_return_rs(?,?)}" ); call.setInt(1,1); call.registerOutParameter( 2, oracle.jdbc.driver.OracleTypes.CURSOR ); call.execute(); ResultSet rs = (ResultSet) call.getObject(2); while(rs.next()){ System.out.println( rs.getInt("f_1")+","+rs.getString("f_2") ); } cn.close(); |
同樣的, 若是要用 procedure 傳出字串, 則可以參考以下語法
Procedure 語法
1 2 3 4 5 6 7 8 9 | 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 語法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | Class.forName("oracle.jdbc.driver.OracleDriver"); Connection cn = DriverManager.getConnection( "jdbc:oracle:thin:@localhost:1521:sid","uid","pwd" ); //取得 String CallableStatement call = cn.prepareCall( "{call pro_return_string(?,?)}" ); call.setInt(1,1); call.registerOutParameter(2, OracleTypes.VARCHAR); call.execute(); String s = (String) call.getObject(2); out.println(s); cn.close(); |
--關鍵字--
{java procedure}{java procedure 取得回傳 resultset}{java 呼叫 procedure}
沒有留言:
張貼留言
廣告訊息會被我刪除