역할 열이있는 사용자 테이블이 있습니다. 각 사용자는 여러 개의 역할을 가질 수 있으며, 사용하기 쉽도록 쉼표로 구분 된 목록을 사용하여 역할을 저장할 수 있습니다.쉼표로 구분 된 문자열을 행으로 구문 분석합니다.
SELECT DISTINCT username,
trim(regexp_substr(str, '[^,]+', 1, level)) authority
FROM
(SELECT username, role str FROM user WHERE role IS NOT NULL
) roles_table
CONNECT BY instr(str, ',', 1, level - 1) > 0
:
USERNAME ROLE
----------------------
bob role1,role2
sally role2
이제 특정 역할을 확인하기 위해 필요, 나는 다음과 같은 부속을 사용하여 (기본 XREF 테이블과 유사) 사용자 역할 매핑을 얻을 수있는 뷰를 만들었습니다 얻을 수
USERNAME AUTHORITY
----------------------
bob role1
bob role2
sally role2
문제는이 하위 쿼리를 실행하는 데 과도한 시간이 걸리는 것입니다. 프로세스를 최적화하기 위해 서식을 지정하는 더 좋은 방법이 있습니까?
아니면 전체 구조를 업데이트하고 XREF 테이블을 사용하도록 되돌릴 필요가 있습니까? 후자의 경우 XREF보기를 만들고 색인을 사용하여 속도를 높일 수 있습니까?
감사합니다.
그리고 Dr. Codd가 첫 번째 정상적인 형식을 사용했기 때문에 이러한 이유가 있습니다. – danihp
중복 된 것입니다 : http://stackoverflow.com/questions/14328621/splitting-string-into-multiple-rows-in-oracle – Kacper