Thread: 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