Обсуждение: FOR-IN-EXECUTE, why fail?
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....
mmarencibia@yahoo.es (Marcos Medina) writes:
> I wrote the following:
> CREATE OR REPLACE FUNCTION escritorio.seq_valor_actual( text)
> DECLARE
> ...
> actual integer;
> BEGIN
> ...
> FOR actual IN EXECUTE v_query LOOP
The loop variable has to be a record or row variable, not an integer.
FWIW, 7.5 will give a better error message for this common mistake.
In CVS tip I get
ERROR: loop variable of loop over rows must be a record or row variable at or near "LOOP" at character 416
LINE 14: FOR actual IN EXECUTE v_query LOOP
^
regards, tom lane
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