집 >데이터 베이스 >MySQL 튜토리얼 >저장 프로시저를 사용하지 않고 Oracle에서 여러 행을 단일 행으로 어떻게 연결할 수 있습니까?
Oracle에서 저장 프로시저 없이 여러 행을 단일 행으로 연결
Oracle에서 데이터 작업을 할 때 다음과 같은 경우가 있을 수 있습니다. 여러 행을 단일 행으로 결합해야 합니다. 전통적으로 이는 저장 프로시저를 사용하여 달성할 수 있었습니다. 그러나 Oracle의 LISTAGG 절을 사용하는 더 효율적이고 간단한 솔루션이 있습니다.
Oracle의 LISTAGG 절
Oracle 11gR2에 도입된 LISTAGG 절을 사용하면 다음을 연결할 수 있습니다. 여러 값을 단일 문자열로 변환합니다. 다음 구문을 사용합니다.
LISTAGG(expression, delimiter) WITHIN GROUP (ORDER BY column)
예
다음 데이터 세트를 고려하십시오.
question_id | element_id |
---|---|
1 | 7 |
1 | 8 |
2 | 9 |
3 | 10 |
3 | 11 |
3 | 12 |
연결하려면 각 Question_id에 대한 element_id 값을 단일 행으로 묶으면 다음 쿼리를 사용할 수 있습니다.
SELECT question_id, LISTAGG(element_id, ',') WITHIN GROUP (ORDER BY element_id) FROM your_table GROUP BY question_id;
Output
question_id | element_id |
---|---|
1 | 7,8 |
2 | 9 |
3 | 10,11,12 |
대규모 결과에 대한 고려 사항 문자열
결과 문자열이 다음을 초과할 것으로 예상되는 경우 4000자(VARCHAR2 데이터 유형의 최대 길이)인 경우 Oracle 12cR2에 도입된 다음과 같은 향상된 기능을 사용할 수 있습니다.
SELECT question_id, LISTAGG(element_id, ',') WITHIN GROUP (ORDER BY element_id) ON OVERFLOW TRUNCATE/ERROR FROM your_table GROUP BY question_id;
위 내용은 저장 프로시저를 사용하지 않고 Oracle에서 여러 행을 단일 행으로 어떻게 연결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!