简体   繁体   中英

Syntax error in PL/pgSQL FOR loop

I'm trying to use a FOR loop:

create or replace function update_revisions() returns trigger as 
$$ 
begin 
    declare col_name declare col_name information_schema.columns%ROWTYPE; 

    for col_name in
       select column_name from information_schema.columns
       where table_name='t'
    loop 
        insert into debug_table values (col_name); 
    end loop;
end;
$$
language plpgsql; 

But it always says:

syntax error at or near 'for'

Could someone please give me a hint what's wrong with it?

Immediate problem

Invalid syntax. Untangled:

create or replace function update_revisions()
  returns trigger as 
$$ 
declare
   col_name information_schema.columns%ROWTYPE; 
begin 
   for col_name in
      select column_name from information_schema.columns
      where table_name='t'
   loop 
      insert into debug_table values (col_name); 
    end loop;
end;
$$  language plpgsql;

More problems

  • Table names are not unique in a Postgres database. More in this recent answer:
    Behaviour of NOT LIKE with NULL values

  • The whole approach is inefficient. Use a single INSERT statement instead:

INSERT INTO debug_table (target_column)  -- with column definition list!
SELECT column_name
FROM   information_schema.columns
WHERE  table_name = 't'
AND    table_schema = 'public';          -- your schema

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM