| 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: | Whole Thread | Raw Message | 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    === 
| 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[] |