Postgres从字符串运行SQL语句

时间:2014-06-26 19:07:33

标签: sql postgresql postgresql-9.1 executequery dynamic-queries

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

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

选择打开,关闭,从abc中删除

但是,它也可以是: 从abc中选择打开

或者 选择打开,从abc关闭

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

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

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

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

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