| 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: | Whole Thread | Raw Message | 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 |