Re: Insert Table from Execute String Query

Поиск
Список
Период
Сортировка
От Adrian Klaver
Тема Re: Insert Table from Execute String Query
Дата
Msg-id ed8678a9-bfa4-623f-a650-dc87b2d05d34@aklaver.com
обсуждение исходный текст
Ответ на Insert Table from Execute String Query  (İlyas Derse <ilyasderse@gmail.com>)
Список pgsql-general
On 12/6/19 1:00 AM, İlyas Derse wrote:
> I need to insert temp table from execute string query. How can I do ? 
> I'm trying like that but not working.
> 
> CREATE OR REPLACE FUNCTION public.testdyn
> (
>          x integer
> )
> RETURNS TABLE
> (
>          id bigint,
>          text character varying(4000)
> )
> AS $$
>          DECLARE mysql TEXT;
> BEGIN
>          create temp table tmp1
> (
> id1 bigint,
> text character varying(4000)
> );
> mysql = 'select id, text from TEST';
> 
> RETURN QUERY
>        EXECUTE mysql INTO tmp1 ;
> END;
> $$ LANGUAGE plpgsql;

It would help to know what you are trying to do. In the meantime:

1)
create table test (id bigint, text varchar);
insert into test values (1, 'test1'), (2, 'test2');

2) Running your function:

select testdyn(1);
ERROR:  query "SELECT mysql INTO tmp1" is not a SELECT
CONTEXT:  PL/pgSQL function testdyn(integer) line 11 at RETURN QUERY

3) Change to function:

CREATE OR REPLACE FUNCTION public.testdyn(x integer)
  RETURNS TABLE(id bigint, text character varying)
  LANGUAGE plpgsql
AS $function$
         DECLARE mysql TEXT;
BEGIN
         create temp table tmp1
(
id1 bigint,
text character varying(4000)
);
mysql = 'select id, text from TEST';
drop table tmp1;
RETURN QUERY
       EXECUTE mysql;
END;
$function$

select * from testdyn(1);
  id | text
----+-------
   1 | test1
   2 | test2




-- 
Adrian Klaver
adrian.klaver@aklaver.com



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

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: Slow planing...
Следующее
От: Michael Lewis
Дата:
Сообщение: Re: Slow planing...