【发布时间】:2013-04-23 21:42:02
【问题描述】:
我想知道如何在函数中使用动态查询。我尝试了很多方法,但是,当我尝试编译我的函数时,会显示一条消息 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)
怎么了?我该如何解决这个问题?
【问题讨论】:
-
这显然是 plpgsql 语法。
[Oracle]标签在这里做什么? -
@ErwinBrandstetter 上一个问题是关于将 PL/SQL 转换为 PL/PgSQL,所以可能会继续。我已经删除了标签。
-
文档是值得一试的。大量精力投入到 PostgreSQL(和 PL/PgSQL)文档中。在这种情况下,您需要以 Dynamic statements in PL/PgSQL 开头。
标签: database postgresql plpgsql bulkinsert dynamic-sql