Thread: FOR-IN-EXECUTE, why fail?

FOR-IN-EXECUTE, why fail?

From
mmarencibia@yahoo.es (Marcos Medina)
Date:
I wrote the following:
CREATE OR REPLACE FUNCTION escritorio.seq_valor_actual( text)
 RETURNS integer AS '
 DECLARE
         secuencia ALIAS FOR $1;
     valor_actual integer := 0;
     v_query text;
     actual integer;
 BEGIN
 RAISE NOTICE ''el parametro tiene el siguiente valor %'' ,secuencia;

 v_query := ''SELECT last_value FROM '' || quote_ident(secuencia);
 RAISE NOTICE ''la sentencia a ejecutar es %'' ,v_query;

 FOR actual IN EXECUTE v_query LOOP
     valor_actual := actual;
 END LOOP;

 RETURN valor_actual;

 END;
 'LANGUAGE 'plpgsql';

And i call:
select seq_valor_actual('s_id_reserva');


The s_id_reserva is a sequence. The error is the following:
WARNING:  plpgsql: ERROR during compile of seq_valor_actual near line 12
ERROR:  missing .. at end of SQL expression

I think the problem is in the FOR but i see correct all.

Can i help me?

Any idea?

Tahnks....

Re: FOR-IN-EXECUTE, why fail?

From
Gaetano Mendola
Date:
Marcos Medina wrote:

> I wrote the following:
> CREATE OR REPLACE FUNCTION escritorio.seq_valor_actual( text)
>  RETURNS integer AS '
>  DECLARE
>          secuencia ALIAS FOR $1;
>      valor_actual integer := 0;
>      v_query text;
>      actual integer;
>  BEGIN
>  RAISE NOTICE ''el parametro tiene el siguiente valor %'' ,secuencia;
>
>  v_query := ''SELECT last_value FROM '' || quote_ident(secuencia);
>  RAISE NOTICE ''la sentencia a ejecutar es %'' ,v_query;
>
>  FOR actual IN EXECUTE v_query LOOP
>      valor_actual := actual;
>  END LOOP;
>
>  RETURN valor_actual;
>
>  END;
>  'LANGUAGE 'plpgsql';
>
> And i call:
> select seq_valor_actual('s_id_reserva');
>
>
> The s_id_reserva is a sequence. The error is the following:
> WARNING:  plpgsql: ERROR during compile of seq_valor_actual near line 12
> ERROR:  missing .. at end of SQL expression
>
> I think the problem is in the FOR but i see correct all.
>
> Can i help me?
>
> Any idea?


You shall declare actual as RECORD and perform inside the loop:

valor_actual = actual.last_value;



Regards
Gaetano Mendola