>데이터 베이스 >MySQL 튜토리얼 >저장 프로시저를 사용하지 않고 Oracle에서 여러 행을 단일 행으로 어떻게 연결할 수 있습니까?

저장 프로시저를 사용하지 않고 Oracle에서 여러 행을 단일 행으로 어떻게 연결할 수 있습니까?

Barbara Streisand
Barbara Streisand원래의
2025-01-05 20:02:401090검색

How Can I Concatenate Multiple Rows into a Single Row in Oracle Without Using a Stored Procedure?

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;
  • ON OVERFLOW TRUNCATE: 결과 문자열을 자릅니다. 지정된 길이를 초과하는 경우
  • ON OVERFLOW ERROR: 결과 문자열이 지정된 길이를 초과하면 오류가 발생합니다.

위 내용은 저장 프로시저를 사용하지 않고 Oracle에서 여러 행을 단일 행으로 어떻게 연결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.