2010-12-01 2 views
8

오라클에서 여러 행을 반환하는 쿼리에서 쉼표로 구분 된 값 목록을 사용하여 단일 행을 반환하고 반환 된 행을 본질적으로 단일 행.Oracle 9i의 PostgreSQL array()/array_to_string() 함수와 같습니다.

PostgreSQL의에서

이이 배열을 사용하여 다음과 같은 기능을 array_to_string 달성 할 수있다 :

감안할 때 테이블 "사람들":

id | name 
--------- 
1 | bob 
2 | alice 
3 | jon 

는 SQL :

select array_to_string(array(select name from people), ',') as names; 

가 반환합니다 :

names 
------------- 
bob,alice,jon 

Oracle 9i에서 어떻게 동일한 결과를 얻을 수 있습니까?

감사합니다,

매트

+0

도움을 주셔서 감사합니다. 저는 좀 더 조사를 해본 결과이 답변이 저를 위해 속임수라는 것을 알았습니다. http://stackoverflow.com/questions/468990/how-can-i-combine-multiple- rows-into-a-comma-delimited-list-in-oracle/4027064 # 4027064 – walkermatt

답변

5

팀 홀 string aggregation techniques in Oracle의 최종 컬렉션이 있습니다. 당신은 9i에 붙어있는 경우

, 내 개인적인 취향은

SELECT string_agg(name) 
    FROM people 

이 것이 (해당 페이지의 string_agg의 구현이) 사용자 정의 집계를 정의하기 위해 같은 것입니다하지만 당신은 정의해야 새로운 STRING_AGG 함수 새로운 객체를 만드는 것을 피하려면 다른 접근법이 있지만 9i에서는 PostgreSQL 구문보다 더 복잡합니다.

+0

+1 그리고 포인터에 감사드립니다. Hall 씨는 자신의 사이트에 엄청난 돈을 가지고 있습니다! – DCookie

1

10g에서 나는 Tim의 기사 끝에 언급 된 COLLECT 옵션을 선호합니다. 그러나

SELECT deptno, tab_to_string(CAST(MULTISET(SELECT ename FROM emp 
WHERE deptno = dept.deptno) AS t_varchar2_tab), ',') FROM dept 

9i의의의 :

그 접근 방식의 좋은 점은 동일한 기본 기능 (즉 인수로 컬렉션을 받아) 집계로하고 MULTISET 함수로 모두 사용할 수 있다는 것입니다 사용 불가. SYS_CONNECT_BY_PATH는 유연하기 때문에 좋지만 속도가 느릴 수 있으므로 조심하십시오.

관련 문제