Tengo una función definida como:

FUNCTION insertar_log(varchar(30), varchar(500))  RETURNS void

Como ven no retorna valor, sin embargo cuando la invoco desde otra función
pl/pgsql me obliga a colocar un destino para el valor devuelto:

ERROR:  Error reiniciando saldos 42601 - la consulta no tiene un destino
para los datos de resultado


podrias mostrar la defincion de la funcion? y como la usas?
deberia funcionar como: select funcion();

/*************************************************************************/
CREATE OR REPLACE FUNCTION insertar_log(varchar(30), varchar(500))
 RETURNS void AS
$BODY$
DECLARE
        paccion                 ALIAS FOR $1;
        pmensaje                ALIAS FOR $2;
        lCurrentDatabase        varchar(30);
        lCurrentUser            varchar(30);
        lCurrentPassword        varchar(30);
        lConnection             varchar(100);
        lSentence               varchar(600);
        lResult                 text;
BEGIN
        /* Current database */
        SELECT  current_database()::varchar(20)
        INTO    lCurrentDatabase;

        /* Current user */
        SELECT  current_user::varchar(20)
        INTO    lCurrentUser;

        /* Current password */
        lCurrentPassword := 'Unforgiven';

        /* Connection */
lConnection := 'dbname=' || lCurrentDatabase || ' user=' || lCurrentUser || ' password=' || lCurrentPassword;
        SELECT  dblink_connect('myconn', lConnection)
        INTO    lResult;

        /* Insert log */
lSentence := 'INSERT INTO def_log(accion_log, mensaje_log) VALUES (''' || paccion || ''', ''' || pmensaje || ''');';
        SELECT  dblink_exec ('myconn', lSentence, false)
        INTO    lResult;

        /* Disconnect */
        SELECT  dblink_disconnect('myconn')
        INTO    lResult;
END;
$BODY$
 LANGUAGE 'plpgsql' VOLATILE
 COST 100;
/*************************************************************************/

La uso:

SELECT insertar_log ('Reiniciar Saldos', 'inicia Proceso') INTO lResult;


Lo he solucionado temporalmente con un 'INTO' hacia una variable pero no
debería requerirse.


entonces si devuelve un valor...

Si, definitivamente.

Otra cosa que intente fue anteponerle a la consulta el 'PERFORM' pero me
genera un error de sintaxis.


perform funcion();

que error te da?


PERFORM SELECT insertar_log ('Reiniciar Saldos', 'inicia Proceso');

ERROR:  error de sintaxis en o cerca de «SELECT»
LINE 1: SELECT  SELECT insertar_log ('Reiniciar Saldos', 'inicia Pro...
               ^
QUERY:  SELECT  SELECT insertar_log ('Reiniciar Saldos', 'inicia Proceso')
CONTEXT:  SQL statement in PL/PgSQL function "reiniciar_saldos" near line 22

********** Error **********

ERROR: error de sintaxis en o cerca de «SELECT»
SQL state: 42601
Context: SQL statement in PL/PgSQL function "reiniciar_saldos" near line 22




__________ Information from ESET NOD32 Antivirus, version of virus signature 
database 4580 (20091106) __________

The message was checked by ESET NOD32 Antivirus.

http://www.eset.com



--
TIP 2: puedes desuscribirte de todas las listas simult�neamente
   (env�a "unregister TuDirecci�nDeCorreo" a [email protected])

Responder a