Oracle的儲存過程返回結果集
阿新 • • 發佈:2019-01-31
Oracle儲存過程:
CREATE OR REPLACE PROCEDURE getcity (
citycode IN VARCHAR2,
ref_cursor OUT sys_refcursor /* 這個sys_refcursor型別在SYS.STANDARD包中 */
)
AS
BEGIN
OPEN ref_cursor FOR
SELECT *
FROM tb_city_code
WHERE city_code = citycode;
END;
Java呼叫程式碼:
try { DriverManager.registerDriver (new oracle.jdbc.OracleDriver()); Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:wjw", "sms", "sms"); CallableStatement stmt = conn.prepareCall("BEGIN GETCITY(?, ?); END;"); //CallableStatement stmt = conn.prepareCall("{ call GETCITY(?, ?) }"); //用此呼叫方法不能實現多行語法 stmt.setString(1, "021"); stmt.registerOutParameter(2, -10 /* OracleTypes.CURSOR = -10 */); //REF CURSOR(OracleTypes.CURSOR==-10) stmt.execute(); ResultSet rs = (ResultSet) stmt.getObject(2); while (rs.next()) { System.out.println(rs.getString("CITY_NAME")); } rs.close(); rs = null; stmt.close(); stmt = null; conn.close(); conn = null; } catch (SQLException e) { System.out.println(e.getLocalizedMessage()); }