Re: plpgsql - Insert from a record variable?

Поиск
Список
Период
Сортировка
От Phil Endecott
Тема Re: plpgsql - Insert from a record variable?
Дата
Msg-id 2179249@chezphil.org
обсуждение исходный текст
Ответ на Re: plpgsql - Insert from a record variable?  ("Phil Endecott" <spam_from_postgresql_sql@chezphil.org>)
Ответы Re: plpgsql - Insert from a record variable?
Список pgsql-sql
I wrote:
> perhaps rather than inspecting the record variable to see what fields
> it contains, I can look at the table to see what columns it contains

This is my effort.  It doesn't work, because I can only EXECUTE
SQL statements, not PLPGSQL statements.  I need to EXECUTE an
assignment statement to accumulate the string of column values.

I have a feeling that I can EXECUTE a CREATE FUNCTION statement,
and then call the function, but this seems over-the-top.  I just
want to insert a record into a table!  Any better ideas?

-- Simply insert record r into table t.

-- Doesn't work, because EXECUTE takes an SQL command, not
--   a plpgsql statement.

create function insert_record ( record, text ) as '
-- probably ought to pass schema as well as table name, since
-- information_schema.columns query doesn't use search_path.
declare r as alias for $1; t as alias for $2;
 cr information_schema.columns%rowtype; first boolean; column_names text; column_values text;
begin
 first := true; for cr in select * from information_schema.columns           where table_name=t loop   if not first
then    column_names := column_names || '', '';     column_values := column_values || '', '';     first := false;   end
if;  column_names := column_names || quote_ident(cr.column_name);
 
!!  execute ''column_values := 
!!     column_values || quote_literal(r.'' || cr.column_name || '')''; end loop;
 execute ''insert into '' || t || ''('' || column_names ||         '') values ('' || column_values || '')'';

end;
' language plpgsql;



--Phil.


В списке pgsql-sql по дате отправления:

Предыдущее
От: "Phil Endecott"
Дата:
Сообщение: Re: plpgsql - Insert from a record variable?
Следующее
От: basic
Дата:
Сообщение: Re: plpgsql - Insert from a record variable?