2011-04-28 3 views
1

Oracle의 필드에서 쉼표로 구분 된 값 목록을 작성하려고합니다.Oracle SQL 문에서 쉼표로 구분 된 값 목록 작성

나는이 작업을 수행하는 몇 가지 예제 코드를 찾을 수 :

DECLARE @List VARCHAR(5000) 
SELECT @List = COALESCE(@List + ', ' + Display, Display) 
FROM TestTable 
Order By Display 

을하지만 난 항상 키워드의에 대한 오류를 얻을 때 그것은 예상했다되지 않습니다. SELECT INTO을 사용할 수는 있지만 작동하지만 하나 이상의 행이있는 경우 가져 오기 오류가 발생합니다. 당신은 어떻게 든 그들을을 연결하지 않는 한 당신은 하나의 변수에 여러 값을 삽입 할 수 없습니다

SELECT myVar = Field1 
FROM myTable 
+0

st 코드, XML 또는 데이터 샘플을 보려면 ** 텍스트 편집기에서 해당 행을 강조 표시하고 편집기 툴바에서 "코드 샘플"버튼 ('{}) '을 클릭하여 멋지게 형식을 지정하고 구문을 강조 표시하십시오! –

+0

[가능한 여러 개의 행을 쉼표로 구분 된 Oracle 목록에 결합 할 수 있습니까?] (http://stackoverflow.com/questions/468990/how-can-i-combine-multiple-rows-into-a- 쉼표로 구분 된 목록의 오라클) – Ben

답변

-1

다음과 같이

이유는 할 수 없습니다.

가 (다시 오라클의 확실하지 않은) 값을 연결하는, 그렇지 않으면

select @myVar = select top 1 Field1 From myTable 

을 (오라클 구문의 확실하지 않은) 단지 하나의 값을 얻으려면

오라클에서
 
set @myVar = '' -- Get rid of NULL 
select @myVar = @MyVar + ', ' + Field1 From myTable 
7

, 이 페이지에서 Tim Hall이 수집 한 많은 string aggregation techniques 중 하나를 사용하십시오.

는 11.2를 사용하는 경우,

이전 버전의
SELECT LISTAGG(display, ',') WITHIN GROUP (ORDER BY display) AS employees 
    INTO l_list 
    FROM TestTable 

이, 내 취향은 어쩌면

SELECT string_agg(display) 
    INTO l_list 
    FROM TestTable 
0

을 수행하는 (팀의이 string_agg라고합니다) 사용자 정의 집계 함수 접근법을 사용하는 것입니다 DBMS_UTILITY.COMMA_TO_TABLE 및 TABLE_TO_COMMA를 사용하여 csv를 분할/결합하십시오.

DECLARE 
    l_list1 VARCHAR2(50) := 'Tom,Dick,Harry,William'; 
    l_list2 VARCHAR2(50); 
    l_tablen BINARY_INTEGER; 
    l_tab  DBMS_UTILITY.uncl_array; 
BEGIN 
    DBMS_OUTPUT.put_line('l_list1 : ' || l_list1); 

    DBMS_UTILITY.comma_to_table (
    list => l_list1, 
    tablen => l_tablen, 
    tab => l_tab); 

    FOR i IN 1 .. l_tablen LOOP 
    DBMS_OUTPUT.put_line(i || ' : ' || l_tab(i)); 
    END LOOP; 

    DBMS_UTILITY.table_to_comma (
    tab => l_tab, 
    tablen => l_tablen, 
    list => l_list2); 

    DBMS_OUTPUT.put_line('l_list2 : ' || l_list2); 
END; 
+0

이 유틸리티는 오라클의 이름 지정 규칙 (30 자 길이, 숫자로 시작할 수 없음 등)을 준수하는 토큰에서만 작동합니다. 적어도 그렇게하는 것이 었습니다. 최신 버전의 데이터베이스에서 변경되었을 수 있습니다. 수년 동안 사용하지 않았습니다. – APC

+0

@APC : 내 나이를 보여주는 것 같아요 .-- 정말 나이가 들지는 않지만, 때로는 나이가 들었습니다. – tbone

+0

및 죄송합니다 VBAHole, SO에 관한 질문에 대한 귀하의 의견이 아닙니다. – tbone

관련 문제