首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >等效于Oracle9i中的PostgreSQL array() / array_to_string()函数

等效于Oracle9i中的PostgreSQL array() / array_to_string()函数
EN

Stack Overflow用户
提问于 2010-12-02 01:00:41
回答 2查看 19.8K关注 0票数 10

我希望从一个在Oracle中返回多行的查询返回带有逗号分隔的值列表的单行,实质上是将返回的行展平为单行。

在PostgreSQL中,这可以使用数组和array_to_string函数来实现,如下所示:

给定表"people":

代码语言:javascript
复制
id | name
---------
1  | bob
2  | alice
3  | jon

SQL:

代码语言:javascript
复制
select array_to_string(array(select name from people), ',') as names;

将返回:

代码语言:javascript
复制
names
-------------
bob,alice,jon

如何在Oracle 9i中实现相同的结果?

谢谢,

哑光

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-12-02 01:07:24

蒂姆·霍尔拥有string aggregation techniques in Oracle的权威收藏。

如果您坚持使用9i,我个人的偏好是定义一个自定义聚合(在该页面上有一个string_agg的实现),这样您将拥有

代码语言:javascript
复制
SELECT string_agg( name )
  FROM people

但是您必须定义一个新的STRING_AGG函数。如果您需要避免创建新对象,还有其他方法,但在9i中,它们将比PostgreSQL语法更混乱。

票数 6
EN

Stack Overflow用户

发布于 2010-12-02 03:55:42

在10g中,我肯定更喜欢Tim文章末尾提到的COLLECT选项。

这种方法的好处是,相同的底层函数(接受集合作为参数)既可以用作聚合函数,也可以用作多集函数:

代码语言:javascript
复制
SELECT deptno, tab_to_string(CAST(MULTISET(SELECT ename FROM emp 
WHERE deptno = dept.deptno) AS t_varchar2_tab), ',') FROM dept

然而,在9i中这是不可用的。SYS_CONNECT_BY_PATH很好,因为它很灵活,但它可能很慢,所以要小心这一点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4326868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档