我想在过程中使用游标作为out参数但是,当我在java中执行时,游标返回null
这是我的程序
CREATE OR REPLACE PROCEDURE OBTENER_ESTADO (RESULTADO OUT SYS_REFCURSOR)
AS
BEGIN
CURSOR RESULTADO
IS SELECT ID, NOMBRE FROM ESTADOS;
CLOSE RESULTADO;
EXCEPTION
WHEN OTHERS THEN
NULL;
END OBTENER_ESTADO;
这是我的java代码
public List<EstadosMexico> procedimientoEstados(Connection conn){
List<EstadosMexico> le = null;
try{
CallableStatement cs = conn.prepareCall("{ CALL OBTENER_ESTADO(?)}");
cs.registerOutParameter(1, OracleTypes.CURSOR);
cs.executeUpdate();
ResultSet cursor = (ResultSet) cs.getObject(1);
cs.close();
le = new ArrayList();
while(cursor.next()) {
le.add(new EstadosMexico(cursor.getString(1), cursor.getInt(2)));
}
cursor.close();
} catch(SQLException ex) {
System.out.println(ex.getSQLState() + " " + ex.getMessage());
}
return le;
}
答案 0 :(得分:1)
以下是将SYS_REFCURSOR
用作过程的OUT
参数的方法。你的方式在语法上是不正确的。
CREATE OR REPLACE PROCEDURE OBTENER_ESTADO (RESULTADO OUT SYS_REFCURSOR)
AS
BEGIN
OPEN RESULTADO FOR
SELECT ID, NOMBRE FROM ESTADOS;
EXCEPTION
WHEN OTHERS
THEN
NULL;
END OBTENER_ESTADO;