No puedo realizar un INSERT desde una función

Inicio Foros Foro principal Desarrolladores No puedo realizar un INSERT desde una función

  • Este debate está vacío.
Viendo 3 entradas - de la 1 a la 3 (de un total de 3)
  • Autor
    Entradas
  • #32007
    Jose Fuglistaler
    Participante

    Buenas!!

    Tengo un problema, cuando invoco a una función desde una clase Mxxxx – Método beforeSave( )

    //Llamó a la función

    CallableStatement call = DB.prepareCall(“{ ?=call nro_expediente(?) }”);
    call.registerOutParameter(1, Types.INTEGER);
    call.setInt(2, getAnio());
    call.execute();
    int valorRetorno = call.getInt(1);

    Produce el siguiente error:

    Code:
    ===========> MExpediente.beforeSave: [11]
    org.postgresql.util.PSQLException: ERROR: la transacción es de sólo lectura
    Where: sentencia SQL: «UPDATE libertya.m_expediente_nro SET nro = $1 WHERE anio = $2 »
    PL/pgSQL function “nro_expediente” line 15 at SQL statement; State=25006; ErrorCode=0
    at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2102)
    at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1835)
    at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:500)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:388)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:381)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:616)
    at org.postgresql.ds.jdbc23.AbstractJdbc23PooledConnection$StatementHandler.invoke(AbstractJdbc23PooledConnection.java:455)
    at $Proxy3.execute(Unknown Source)
    at org.openXpertya.model.MExpediente.beforeSave(MExpediente.java:54)
    at org.openXpertya.model.PO.doBeforeSave(PO.java:3937)
    at org.openXpertya.plugin.handlersPO.PluginPOBeforeSaveHandler.processActualAction(PluginPOBeforeSaveHandler.java:22)
    at org.openXpertya.plugin.handlersPO.PluginPOHandler.processPO(PluginPOHandler.java:72)
    at org.openXpertya.model.PO.handlePersistence(PO.java:3932)
    at org.openXpertya.model.PO.save(PO.java:1765)
    at org.openXpertya.model.MTable.dataSavePO(MTable.java:2296)
    at org.openXpertya.model.MTable.dataSave(MTable.java:1541)
    at org.openXpertya.model.MTab.dataSave(MTab.java:899)
    at org.openXpertya.apps.APanel.cmd_save(APanel.java:1674)
    at org.openXpertya.apps.APanel.actionPerformed(APanel.java:1504)
    at org.openXpertya.apps.AppsAction.actionPerformed(AppsAction.java:292)

    La verdad ni idea que puede ser, pienso que puede ser algo sobre permisos?? La función es correcta.
    Muchas Gracias!!
    Saludos
    josefu

    #36425
    Federico Cristina
    Superadministrador

    Buenas,

    Disculpá la demora en la respuesta. Si te fijas en el código de algunas clases de Libertya en gral., para ejecutar una sentencia SQL de modificación se utiliza el método estático executeUpdate() de la clase DB:

    Code:
    DB.executeUpdate(“UPDATE …”);

    Con esta invocación no deberías tener problemas.

    Saludos,
    Federico

    #36483
    Jose Fuglistaler
    Participante

    Muchas Gracias Federico!!

    Lo había solucionado de la siguiente forma… le agregué una variable a la función ALTER FUNCTION funcionMMMMM SET transaction_read_only=’off’; de esa forma anduvo.

    Saludos
    josefu

Viendo 3 entradas - de la 1 a la 3 (de un total de 3)
  • Debes estar registrado para responder a este debate.