Динамический запрос с одинарной кавычкой - PullRequest
0 голосов
/ 04 октября 2019

Я пытаюсь создать хранимую процедуру, которая будет создавать оператор выбора.

Моя процедура выглядит следующим образом.

CREATE OR REPLACE PROCEDURE record_example()
LANGUAGE plpgsql
AS $$
DECLARE

  unload_query text;
BEGIN
 unload_query := 'query =  ('''select * from my_table''')'; 
 insert into query values (unload_query);
  END;
$$; 

Но ошибка ее выдачи. Я не могу закрыть single quote правильно.

LINE 1: SELECT  'query =  ('''select * from my_table''')'
                              ^
QUERY:  SELECT  'query =  ('''select * from my_table''')'
CONTEXT:  SQL statement in PL/PgSQL function "record_example" near line 5

Ожидаемый результат:

Unload query = query = (select * from my table)

1 Ответ

1 голос
/ 04 октября 2019

Если вы хотите получить результат запроса внутри строки, вам нужно использовать оператор конкатенации строк. Кроме того, подзапросы должны быть заключены в круглые скобки.

unload_query := 'query =  (''' || (SELECT * FROM my_table) || ''')';

Это не удастся, если запрос возвращает более одной строки.

Если вы хотите, чтобы литеральная строка в query, у вас естьслишком много цитат:

unload_query := 'query =  (''select * from my_table'')';
...