FOR-IN-EXECUTE, why fail?

Started by Nonamealmost 22 years ago3 messagesgeneral
Jump to latest
#1Noname
mmarencibia@yahoo.es

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

#2Gaetano Mendola
mendola@bigfoot.com
In reply to: Noname (#1)
Re: FOR-IN-EXECUTE, why fail?

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

#3Tom Lane
tgl@sss.pgh.pa.us
In reply to: Noname (#1)
Re: FOR-IN-EXECUTE, why fail?

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