0

我正在尝试在 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;

有什么想法或想法吗?

4

1 回答 1

0

第一件事是您必须在计划时知道您的结果在列方面的样子。所以你不能真正进一步自动化。但是,根据您的 PostgreSQL 版本,您可能会有一些选项。这些包括:

  1. 具有可变列数并返回 JSON 或 HSTORE 而不是元组的动态 SQL。

  2. 具有可变列数并返回 XML 而不是元组的动态 SQL。

  3. 具有可变列数并返回 REFCURSOR 的动态 sql。这将保留元组,但需要事务并需要单独的客户端 FETCH 命令。

  4. 直接 SQL 并返回可变数量的行而不是列......

但是,如果您想返回可变数字或列名,则不能在 SQL 中执行此操作。

于 2013-11-09T12:37:29.950 回答