【发布时间】:2022-11-02 19:13:39
【问题描述】:
我有一个 sql 语句存储在 PostgreSQL 9.4 数据库中。我可以使用存储的语句,在另一个语句中选择它并将结果集用作表吗?
例如:在“pc_preset”表中,“sql_rule”字段中存储了多条带有SQL语句的记录。我可以查询他们:
SELECT
sql_rule
FROM
mc_preset
WHERE
id_preset = 1
这给了我作为字符串的存储语句,例如:
SELECT
user_id,
firstname,
lastname,
birthdate,
birthplace_id
FROM
user
WHERE
gender_id = 1
现在我想创建另一个语句并将存储语句的结果集用作别名表并将其与其他表连接。
SELECT *
FROM
RESULT_SET_OF_SQL_RULE AS "table1"
LEFT JOIN table2 ON table2.birthplace_id = table1.birthplace_id
在另一个示例中,我希望在子选择中使用结果集。
SELECT *
FROM
table2
WHERE
birthplace_id IN (SELECT birthplace_id
FROM RESULT_SET_OF_SQL_RULE
WHERE birthdate < '2000-01-01'
)
我不想使用数据库视图,因为存储的语句可以由应用程序中的(管理员)用户修改,因此需要存储在数据库表中。
在How can I use an SQL statement stored in a table as part of another statement? 的基础上,我创建了一个 PostgreSQL 函数,但我无法根据需要对其进行修改。
CREATE OR REPLACE FUNCTION exec_mc_preset_sql_rule_get_result_set(preset_id integer)
RETURNS ??
LANGUAGE plpgsql
AS $function$
declare
result_set integer;
stmt character varying;
begin
SELECT sql_rule into stmt
FROM mc_preset
WHERE id_preset = preset_id;
execute immediate stmt
?? into result_set;
return result_set;
end
$function$
;
如果不可能给出完整的结果集,而只能给出一列值的数组,那么最好在第二个参数中指定我想要返回的字段。
- 我必须如何编写函数
- 如何在我的语句中使用该函数?
非常感谢。
【问题讨论】:
标签: sql postgresql postgresql-9.4