Re: Funcion Void

From: Raúl Andrés Duque Murillo <ra_duque(at)yahoo(dot)com(dot)mx>
To: "Jaime Casanova" <jcasanov(at)systemguards(dot)com(dot)ec>
Cc: "Lista - PostgreSQL" <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Funcion Void
Date: 2009-11-09 02:04:20
Message-ID: 28A4FC3AB7764FF4971D70E20CAE90BB@Principal
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

>> 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

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Yadisnel Galvez Velazquez 2009-11-09 02:11:02 Re: Ayuda con NOTIFY en C
Previous Message Yadisnel Galvez Velazquez 2009-11-09 02:03:38 Re: Ayuda con NOTIFY en C