Skip site navigation (1) Skip section navigation (2)

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 (view raw or flat)
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

pgsql-novice by date

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

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group