Ghost索引调用oracle函数

时间:2014-05-07 01:07:45

标签: java oracle sqlexception

也许这是一个愚蠢的错误,但我无法弄清楚它在哪里。我在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()}

有人能找到我的错误吗?我已经失去了一天没有结果的搜索。

谢谢!

0 个答案:

没有答案