Re: Loop through records - Mailing list pgsql-novice

From A. Kretschmer
Subject Re: Loop through records
Date
Msg-id 20051119074057.GA11307@webserv.wug-glas.de
Whole thread Raw
In response to Loop through records  (Emiliano Amilcarelli <emiliano.amilcarelli@vtin.it>)
List pgsql-novice
am  11.11.2005, um 16:43:29 +0100 mailte Emiliano Amilcarelli folgendes:
>
> CREATE OR REPLACE FUNCTION "public"."new_allarma" (soglia name) RETURNS
> text AS
> $body$
> DECLARE
>     rec RECORD;
>     agent text;
> BEGIN
>        FOR rec in SELECT * from "ERRORS" where "MAX_ERRORS" > = soglia

You can't run a sql with variables in this way. I show you a example:

,----[  example  ]
| CREATE OR REPLACE FUNCTION loop (val varchar) returns text as $$
| declare
|         rec     RECORD;
|         sql     varchar;
| begin
|         sql := 'select * from foo where val = \'' || $1 || '\';';
|         raise notice 'sql %',sql;
|         for rec in execute sql loop
|                 RAISE NOTICE '--> RECORD  --> ';
|         end loop;
|         RAISE NOTICE 'Complete';
|         RETURN 'OK';
| end;
| $$
| LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;
`----


and a test:

test=# select * from foo;
 id | val
----+-----
  1 | a
  2 | b
  3 | c
(3 Zeilen)


test=# select * from loop('a');
HINWEIS:  sql select * from foo where val = 'a';
HINWEIS:  --> RECORD  -->
HINWEIS:  Complete
 loop
------
 OK
(1 Zeile)


The point is, you should create a string that contains your sql, and
this string can you execute.

Read the docu for more details:
http://www.postgresql.org/docs/8.1/interactive/plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN


HTH, Andreas
--
Andreas Kretschmer    (Kontakt: siehe Header)
Heynitz:  035242/47212,      D1: 0160/7141639
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
 ===    Schollglas Unternehmensgruppe    ===

pgsql-novice by date:

Previous
From: A Gilmore
Date:
Subject: Re: ERROR: operator does not exist: integer = integer[]
Next
From: "A. Kretschmer"
Date:
Subject: Re: Logging