OracleDataSource dataSource = new OracleDataSource(); dataSource.setURL("jdbc:oracle:thin:@localhost:1521:xe"); dataSource.setUser("hoge"); dataSource.setPassword("fuga"); try (Connection connection = dataSource.getConnection()) { // PL/SQLの定義。ref_curというref_cursorを開き、アウトパラメータ(? := ref_curの部分)に代入している。 CallableStatement statement = connection.prepareCall( "declare " + " ref_cur sys_refcursor;" + " begin " + " open ref_cur" + " for ' select table_name from user_tables'; " + " ? := ref_cur;" + " end;" ); // アウトパラメータの方をcursorと定義する statement.registerOutParameter(1, OracleTypes.CURSOR); statement.execute(); // アウトパラメータをResultSetとして取得し、処理してあげる try (ResultSet resultSet = (ResultSet) statement.getObject(1)) { while (resultSet.next()) { System.out.println("resultSet.getString(\"table_name\") = " + resultSet.getString("table_name")); } } }
2012年11月4日日曜日
PL/SQLで開いたカーソルをJDBC経由でJavaに返す方法
PL/SQLで開いたカーソルをJDBC経由で受け取り、Java側で処理する方法。