繁体   English   中英

从记录类型的单列中分割/提取值,将用户定义的函数应用于多行CTE

[英]Split/extract values from record-type single column, apply user-defined function to multiple-row CTE

使用PostgreSQL 9.2,我定义了一个函数,它接受一个参数并返回一个多列表。 我想将该函数应用于CTE行中的多个参数。 我得到的结果是一列元组,而不是我想要的多列。 以机智:

sandbox=# CREATE FUNCTION myfunc(arg int) RETURNS table(col1 int, col2 int) AS
sandbox-# 'SELECT arg+1, arg+2'
sandbox-# LANGUAGE SQL;
CREATE FUNCTION
sandbox=# select * from myfunc(1);
 col1 | col2 
------+------
    2 |    3
(1 row)

sandbox=# WITH rows AS (
sandbox(#   SELECT 1 AS arg UNION SELECT 2 AS arg
sandbox(# )
sandbox-# SELECT * FROM (SELECT myfunc(arg) FROM rows) x;
 myfunc 
--------
 (2,3)
 (3,4)
(2 rows)

给定CTE,以下两个SELECT子句相互评估为具有类型record的单列的表:

SELECT myfunc(arg) FROM rows;
SELECT * FROM (select myfunc(arg) FROM rows) x;

以下三个都失败了(CTE未显示):

SELECT myfunc(arg).col1 FROM rows;
ERROR:  syntax error at or near "."
LINE 4: SELECT myfunc(arg).col1 FROM rows;
                          ^

SELECT col1 FROM (select myfunc(arg) FROM rows) x;
ERROR:  column "col1" does not exist
LINE 4: SELECT col1 FROM (select myfunc(arg) FROM rows) x;
               ^

SELECT col1 FROM (SELECT * FROM (select myfunc(arg) FROM rows) x) y;
ERROR:  column "col1" does not exist
LINE 4: SELECT col1 FROM (SELECT * FROM (select myfunc(arg) FROM row...
               ^

如何获取包含元组单列中的值的多列表?

在myfunc周围加上额外的括号很重要。

select (myfunc(arg)).* from rows;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM