Re: RECORD.* doesn't work in Pl/PGSQL
От | Merlin Moncure |
---|---|
Тема | Re: RECORD.* doesn't work in Pl/PGSQL |
Дата | |
Msg-id | b42b73150804221550l261da8feqf75f1c610c410344@mail.gmail.com обсуждение исходный текст |
Ответ на | RECORD.* doesn't work in Pl/PGSQL ("Gurjeet Singh" <singh.gurjeet@gmail.com>) |
Ответы |
Re: RECORD.* doesn't work in Pl/PGSQL
|
Список | pgsql-hackers |
On Tue, Apr 22, 2008 at 4:10 PM, Gurjeet Singh <singh.gurjeet@gmail.com> wrote: > RECORD.* doesn't work in plpgsql, but NEW.* and OLD.* do in trigger > functions created in plpgsql. > > The example function process_emp_audit() on page > http://www.postgresql.org/docs/8.3/interactive/plpgsql-trigger.html , shows > that we can use OLD.* and NEW.* as: > > INSERT INTO emp_audit SELECT 'D', now(), user, OLD.*; > > but if I try to do the same thing in my own plpgsql function, it throws > a runtime ERROR: > > create table t1( a int, b char ); > create table t2( a int, b char ); > > create or replace function log_rotate() returns void as $$ > declare > rec record; > begin > > for rec in delete from t2 returning * loop > insert into t1 select 1, rec.*; -- throws ERROR: record type has > not been registered > end loop; > > end; > $$ language 'plpgsql'; you can do this: create or replace function log_rotate() returns void as $$ declare rec t1; begin for rec in delete from t2 returning 1, * loop insert into t1 select rec.*; end loop; end; $$ language plpgsql;
В списке pgsql-hackers по дате отправления: