2

我想基于一个字符串执行一条 SQL 语句。我通过一个返回字符串的函数创建了 SQL 语句。谁能解释我如何执行返回的语句?我知道你不能用普通的 SQL 来做,所以我想把它放在一个函数中。唯一的问题是语句中的列并不总是相同的,所以我不知道要为这些列使用哪些数据类型。我正在使用 Postgres 9.1.0。

例如,假设从我的函数返回的 SQL 字符串是:

从 abc 中选择打开、关闭、丢弃

但是,也可以是: Select open from abc

从 abc 中选择打开、关闭

如何执行这些字符串中的任何一个,以便将结果作为仅包含语句中列出的列的表返回?

编辑:该函数是用 PL/pgSQL 编写的。结果将用于报告他们不想看到没有值的列。因此,我编写的函数返回所有具有值的列的名称,然后将其添加到 SQL 语句中。

谢谢你的帮助!

4

1 回答 1

0

我认为您不能直接从函数返回行,因为它的返回类型是未知的。即使您将返回类型指定为RECORD,您也必须在调用时列出返回的列。基于韦恩康拉德的想法,你可以这样做:

CREATE FUNCTION my_create(cmd TEXT) RETURNS VOID AS $$
    BEGIN
        EXECUTE 'CREATE TEMPORARY TABLE temp_result AS ' || cmd;
    END;
$$ VOLATILE LANGUAGE plpgsql;

然后像这样使用函数:

BEGIN;
SELECT my_create(...);
SELECT * FROM temp_result;
ROLLBACK; -- or COMMIT
于 2014-07-15T12:55:34.377 回答