Я хотел бы знать, как использовать динамический запрос внутри функции. Тем не менее, я пробовал много способов, когда пытаюсь скомпилировать мою функцию, появляется сообщение SQL 42601.PostgreSQL - состояние SQL: 42601 ошибка синтаксиса
код, который я использую: сообщение
CREATE OR REPLACE FUNCTION prc_tst_bulk(sql text)
RETURNS TABLE (name text, rowcount integer) AS
$$
BEGIN
WITH v_tb_person AS (return query execute sql)
select name, count(*) from v_tb_person where nome like '%a%' group by name
union
select name, count(*) from v_tb_person where gender = 1 group by name;
END
$$ LANGUAGE plpgsql;
Ошибки я получаю:
ERROR: syntax error at or near "return"
LINE 5: WITH v_tb_person AS (return query execute sql)
Я попытался с помощью:
WITH v_tb_person AS (execute sql)
WITH v_tb_person AS (query execute)
WITH v_tb_person AS (return query execute)
Что не так? Как я могу решить эту проблему?
Сво вопрос, связанный с PostgreSQL equivalent of Oracle “bulk collect”
Это явно синтаксис plpgsql. Что такое тег '[Oracle]' здесь? –
@ErwinBrandstetter Предыдущий вопрос был о переводе PL/SQL на PL/PgSQL, поэтому, возможно, это было перенесено. Я удалил тег. –
Одной вещью, которую стоит попробовать, является документация. Много усилий идет в документации PostgreSQL (и PL/PgSQL). В этом случае вам нужно начать с [Динамических операторов в PL/PgSQL] (http://www.postgresql.org/docs/current/static/plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN) , –