我想基于字符串执行SQL语句。我通过一个返回字符串的函数创建了SQL语句。任何人都可以解释我如何执行返回的语句?我知道你不能在纯SQL中做到这一点,所以我想把它放在一个函数中。唯一的问题是语句中的列并不总是相同,所以我不知道哪些数据类型用于列。我正在使用Postgres 9.1.0。
例如,假设从我的函数返回的SQL字符串是:
选择打开,关闭,从abc中删除
但是,它也可以是: 从abc中选择打开
或者 选择打开,从abc关闭
如何执行这些字符串中的任何一个,以便结果将作为只返回语句中列出的列的表返回?
编辑:该函数是用PL / pgSQL编写的。结果将用于报告他们不希望看到没有值的列。所以我写的函数返回所有具有值的列的名称,然后将其添加到SQL语句中。
感谢您的帮助!
答案 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