在步骤

时间:2017-11-29 13:33:18

标签: java stored-procedures plsql cursor

我想在过程中使用游标作为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;
}

1 个答案:

答案 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;