STORE PROCEDURE

OSCAR
18 de Abril del 2008
COMO PUEDO LLAMAR DESDE JAVA A UN STORE PROCEDURE
DE ORACLE

ivo_es
18 de Abril del 2008
Te pongo acontinuacion un ejemplo de llamada a una funcion que retorna un entero, la idea es poner el "call" con "?" donde vayan los parametros, luego poner las variables que completan esos parametros y hacer el "execute".

Si quieres llamar a un procedimiento y no a una funcion quita el "?=" de delante del "call" y no registres ningun parametro de salida.

Driver DriverNuevaPartidaVF;
Connection ConnNuevaPartidaVF;
try{

DriverNuevaPartidaVF = (Driver)Class.forName(_DRIVER).newInstance();

ConnNuevaPartidaVF = DriverManager.getConnection(_STRING,_USERNAME,_PASSWORD);
CallableStatement NuevaPartidaVF = ConnNuevaPartidaVF.prepareCall("{?= call NOMBREPROCEDIMENTO(?,?,?,?,?,?,?,?)}");

NuevaPartidaVF.registerOutParameter(1,Types.INTEGER);
NuevaPartidaVF.setString(2,login);
NuevaPartidaVF.setString(3,tipo);
NuevaPartidaVF.setString(4,descripcion);
...
NuevaPartidaVF.execute();
idPartida=NuevaPartidaVF.getInt(1);
ConnNuevaPartidaVF.close();
}catch(Exception e){
return false;
}

camaleonGDL
18 de Abril del 2008
Aun me queda duda de como se ejecutaría el SP:
Segun la documentación de JAVA, debes hacer el "registerOutParameter(index, type)" por cada valor que regrese el SP antes del "execute". Mi SP regresa un ResultSet, entonces pongo los 11 valores que me regresa con
cs.registerOutParameter(1, Types.VARCHAR);
cs.registerOutParameter(2, Types.VARCHAR);
...
cs.registerOutParameter(10, Types.VARCHAR);
cs.registerOutParameter(11, Types.VARCHAR);


(cs es el objeto CallableStatement)
despues hago el ResultSet rs = cs.executeQuery(); pero me marca un error de "Not implemented".

Opte por ejecutar solamente el cs.execute() y despues pedir los valores con el cs.getString(index) y me marca el mismo error.

Alguna idea?