sql >> Base de Datos >  >> RDS >> Oracle

Obteniendo error al ejecutar Stroredprocedure

Como dice Nicholas Karasnov, necesita que los argumentos de la llamada coincidan con la declaración del procedimiento. En este caso tienes un OUT parámetro, por lo que necesita algún lugar para que vayan los datos que está seleccionando, algo correspondiente al sys_refcursor tipo de parámetro.

Si usa SQL*Plus para probar esto, puede declarar un Variable SQL*Plus para esto y luego páselo como una variable de vinculación, y luego use print comando para mostrar el contenido del cursor:

variable rc refcursor
exec javao(1, :rc);
print rc

Esto también funciona en SQL Developer. Cuando llame al procedimiento desde otro código, tendrá una variable declarada en un bloque PL/SQL o en una aplicación externa (por ejemplo, a través de jdbc ), pero los detalles de estos dependen de lo que estés haciendo.

Para llamar desde Java, haría algo como:

// get connection
CallableStatement cStmt = conn.prepareCall("{ call javao(?, ?) }");
cStmt.setInt(1, 1);
cStmt.registerOutParameter(2, OracleTypes.cursor);
cStmt.execute();
ResultSet rSet = ((OracleCallableStatement) cStmt).getCursor(2);
while (rSet.next())
{
    // get columns from result set row and do something with the data
}

... pero eso está bordeando el pseudocódigo, y deberá leer la documentación para completar los espacios en blanco (y corregir cualquier error; probablemente necesite tipos de declaraciones específicos de Oracle, por ejemplo), y agregue el cierre de objetos y el manejo de errores, todo esas otras cosas buenas.