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