也许这是一个愚蠢的错误,但我无法弄清楚它在哪里。我在Oracle 10g中有一个函数,VARCHAR2作为返回值。
FUNCTION fnNombreEquipoGerente RETURN VARCHAR2 IS
vlNombreEquipoGerente velittda.taconfiguracionparametro.fcdescripcion%TYPE := csgcaracterespacio;
BEGIN
SELECT fcdescripcion
INTO vlNombreEquipoGerente
FROM velittda.taConfiguracionParametro
WHERE fipaisid = csguno
AND fisistemaid = csguno
AND fimoduloid = csgsiete
AND fisubmoduloid = csguno
AND ficonfiguracionid = csgtres;
RETURN vlNombreEquipoGerente;
EXCEPTION WHEN OTHERS THEN
RETURN csgcaracterespacio;
END;
java代码
public String obtenerNombreAutorizadoTienda() {
Connection con = null;
CallableStatement cstmt = null;
String sql="";
String nombre="";
try {
sql = SION.obtenerParametro(Modulo.D_SINCRONIZA_PEDIDOS, "ABASTO.ORDENESCOMPRAFL.FUERALINEA.SPOBTENERNOMBRE.MAQUINAAUTORIZADA");
con = obtenerConexion();
cstmt = con.prepareCall(sql);
cstmt.registerOutParameter(1, OracleTypes.VARCHAR);
cstmt.execute();
nombre = cstmt.getString(1);
SION.log(Modulo.D_SINCRONIZA_PEDIDOS, "Nombre autorizado de BD: " + nombre , Level.INFO);
} catch (Exception ex) {
SION.logearExcepcion(Modulo.D_SINCRONIZA_PEDIDOS, ex, "Ocurrió un error al intentar consultar el nombre de la tienda autorizado: " +" > "+getStackTrace(ex));
}finally {
cerrarConexion(con);
cerrarCallableStatement(cstmt);
con = null;
cstmt = null;
}
return nombre;
}
并返回下一个异常
neto.sion.abasto.cron.ordencompra.dao.OrdenesCompraDao -:- obtenerNombreAutorizadoTienda -:- 225 -:- Ocurrió un error al intentar consultar el nombre de la tienda autorizado: > java.sql.SQLException: Falta el parámetro IN o OUT en el índice:: 2
at oracle.jdbc.driver.OraclePreparedStatement.processCompletedBindRow(OraclePreparedStatement.java:1983)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3571)
at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:3677)
at oracle.jdbc.driver.OracleCallableStatement.execute(OracleCallableStatement.java:4714)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.execute(OraclePreparedStatementWrapper.java:1374)
at org.apache.commons.dbcp.DelegatingPreparedStatement.execute(DelegatingPreparedStatement.java:172)
at org.apache.commons.dbcp.DelegatingPreparedStatement.execute(DelegatingPreparedStatement.java:172)
at neto.sion.abasto.cron.ordencompra.dao.OrdenesCompraDao.obtenerNombreAutorizadoTienda(OrdenesCompraDao.java:218)
at neto.sion.abasto.cron.ordencompra.controlador.EnviarOrdenesCompraController.comprobarPermisoEjecucionEnTienda(EnviarOrdenesCompraController.java:180)
at neto.sion.abasto.cron.ordencompra.controlador.EnviarOrdenesCompraController.enviarOrdenesCompra(EnviarOrdenesCompraController.java:54)
at neto.sion.abasto.cron.ordencompra.tarea.OrdenesCompraCronTask.execute(OrdenesCompraCronTask.java:26)
at org.quartz.core.JobRunShell.run(JobRunShell.java:206)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:548)
SION.obtenerParametro(Modulo.D_SINCRONIZA_PEDIDOS,“ABASTO.ORDENESCOMPRAFL.FUERALINEA.SPOBTENERNOMBRE.MAQUINAAUTORIZADA”);是等于{? =致电USRVELIT.PAABASTOS.FNNOMBREEQUIPOGERENTE()}
有人能找到我的错误吗?我已经失去了一天没有结果的搜索。
谢谢!