Re: Loop through records

From: "A(dot) Kretschmer" <andreas(dot)kretschmer(at)schollglas(dot)com>
To: pgsql-novice(at)postgresql(dot)org
Subject: Re: Loop through records
Date: 2005-11-19 07:40:57
Message-ID: 20051119074057.GA11307@webserv.wug-glas.de
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: 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 ===

In response to

Browse pgsql-novice by date

  From Date Subject
Next Message A. Kretschmer 2005-11-19 07:42:54 Re: Logging
Previous Message A Gilmore 2005-11-19 04:59:50 Re: ERROR: operator does not exist: integer = integer[]