我正在尝试在postgres数据库中创建一系列字段,这些字段在表中的相同顺序中使用相同的函数,并且想知道是否有某种方法可以使用其他函数自动执行此操作。
以下是我当前sql的一个示例,我希望能够做的是传递[10,20]的函数和数组并让它输出相同的字段。
CREATE OR REPLACE FUNCTION f1(in1 integer, in2 integer) RETURNS integer AS '
SELECT CASE
WHEN in1is NULL THEN 0
WHEN in1 ~ ''^[0-9]+$'' = ''f'' THEN 0
WHEN in1 = transtech_target THEN 1
ELSE 0
END' LANGUAGE SQL;
CREATE OR REPLACE FUNCTION f2(in1 integer, in2 integer) RETURNS integer AS '
SELECT CASE
WHEN in1 is NULL THEN 0
ELSE 0
END' LANGUAGE SQL;
SELECT
f1(inf1, '10') AS f10,
f2(inf2, '10') AS f10up,
f2(inf3, '10') AS f10dn,
f1(inf1, '20') AS f20,
f2(inf2, '20') AS f20up,
f2(inf3, '20') AS f20dn,
FROM table;
任何想法或想法?
答案 0 :(得分:0)
首先,你必须在计划时间知道你的结果在列方面是什么样的。所以你不能真正进一步自动化。但是,根据您的PostgreSQL版本,您可能会有一些选项。其中包括:
动态SQL,列数可变,返回JSON或HSTORE而不是元组。
动态SQL,列数可变,返回XML而不是元组。
具有可变列数并返回REFCURSOR的动态sql。这将保留元组,但需要事务并需要单独的客户端侧FETCH命令。</ p>
直接SQL并返回行的变量数而不是列.....
但是,如果要使用可变数字或返回的列名称,则无法在SQL中执行此操作。