动态查询创建和执行PostgreSQL

动态查询创建和执行PostgreSQL,sql,database,postgresql,plpgsql,Sql,Database,Postgresql,Plpgsql,我有以下两个表和两个pl/pgsql函数 CREATE TABLE tt1(id int, name text); CREATE TABLE tt2(id int, name text); INSERT INTO tt1 VALUES (1,'name1'); INSERT INTO tt1 VALUES (2,'name2'); INSERT INTO tt1 VALUES (3,'name3'); INSERT INTO tt2 VALUES (4,'name4'); INSERT INT

我有以下两个表和两个
pl/pgsql
函数

CREATE TABLE tt1(id int, name text);
CREATE TABLE tt2(id int, name text);

INSERT INTO tt1 VALUES (1,'name1');
INSERT INTO tt1 VALUES (2,'name2');
INSERT INTO tt1 VALUES (3,'name3');
INSERT INTO tt2 VALUES (4,'name4');
INSERT INTO tt2 VALUES (5,'name5');
INSERT INTO tt2 VALUES (6,'name6');


CREATE OR REPLACE FUNCTION query_string() RETURNS TEXT  AS
$BODY$
DECLARE
query1 TEXT:='';
BEGIN
    query1 := 'SELECT * FROM tt1 UNION ALL SELECT * FROM tt2';      
    RETURN query1;
END;
$BODY$
LANGUAGE PLPGSQL;



CREATE OR REPLACE FUNCTION use_generated_string() RETURNS VOID     AS
$BODY$
DECLARE
BEGIN
       -- Need to modify here to get the result same as below query by 
       -- calling above function.
       -- "SELECT * FROM tt1 UNION ALL SELECT * FROM tt2"
END;
$BODY$
LANGUAGE PLPGSQL;
query\u string
函数返回查询字符串。 如何修改“use_generated_string”函数,以便通过调用
use_generated_string
函数获得以下查询的结果

SELECT * FROM tt1 UNION ALL SELECT * FROM tt2;
有人能帮忙吗?

使用:


如果声明返回类型(并将调用的SQL固定为该类型),则可以执行以下操作:

CREATE OR REPLACE FUNCTION use_generated_string() RETURNS TABLE( c1 INT, c2 TEXT ) AS
$BODY$
DECLARE
BEGIN
    RETURN QUERY EXECUTE query_string();
END;
$BODY$
LANGUAGE PLPGSQL;
如果返回类型应该保持动态,这是一个微妙的问题,我建议从reading的开始

的答案通过使用
引发通知
避免了整个问题,这非常聪明,但我不确定除了手动文本解析之外,如何使用这样一个调用的结果

CREATE OR REPLACE FUNCTION use_generated_string() RETURNS TABLE( c1 INT, c2 TEXT ) AS
$BODY$
DECLARE
BEGIN
    RETURN QUERY EXECUTE query_string();
END;
$BODY$
LANGUAGE PLPGSQL;