我想知道如何在函数中使用动态查询。我尝试了很多方法,但是,当我尝试编译我的函数时,会显示一条消息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]'标签在这里做什么? – 2013-04-30 05:29:44
@ErwinBrandstetter上一个问题是关于将PL/SQL转换为PL/PgSQL的问题,所以可能会将其转换。我已经移除了标签。 – 2013-04-30 05:31:27
有一点值得一试,值得一试的是文档。 PostgreSQL(和PL/PgSQL)文档中付出了很多努力。在这种情况下,您需要从[PL/PgSQL中的动态语句]开始(http://www.postgresql.org/docs/current/static/plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN) 。 – 2013-04-30 05:42:23