데이터베이스 작업에서는 문자열을 개별 행으로 분할해야 하는 경우가 많습니다. Oracle은 특히 10g 이상 버전에서 이 작업을 관리하기 위한 효과적인 방법을 제공합니다.
정규 표현식과 connect by
절을 사용하는 간단하면서도 강력한 기술입니다. 여기에는 임시 테이블을 구성하고 정규식 함수를 사용하여 하위 문자열을 추출하는 작업이 포함됩니다.
<code class="language-sql">with temp as ( select 108 Name, 'test' Project, 'Err1, Err2, Err3' Error from dual union all select 109, 'test2', 'Err1' from dual ) select distinct t.name, t.project, trim(regexp_substr(t.error, '[^,]+', 1, levels.column_value)) as error from temp t, table(cast(multiset(select level from dual connect by level <= length(regexp_replace(t.error, '[^,]+')) + 1) as sys.OdciNumberList)) levels;</code>
temp
CTE(공통 테이블 표현식)는 샘플 데이터를 시뮬레이션합니다.length(regexp_replace(t.error, '[^,] ')) 1
은 쉼표로 구분된 값을 계산하여 오류 수를 결정합니다.select level from dual connect by level <= ...
은 1부터 오류 개수까지 일련의 숫자를 생성합니다.table(cast(multiset(...) as sys.OdciNumberList))
은 숫자 시퀀스를 사용 가능한 컬렉션으로 변환합니다.temp
을 숫자 컬렉션과 결합하여 필요한 모든 조합을 만듭니다.trim(regexp_substr(t.error, '[^,] ', 1, levels.column_value))
은 생성된 숫자를 위치 지표로 사용하여 각 오류를 추출합니다.이 방법은 데이터 무결성을 유지하면서 여러 값이 포함된 문자열을 별도의 행으로 효율적으로 분할합니다.
위 내용은 Oracle에서 문자열을 여러 행으로 효율적으로 분할하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!