java.sql.SQLException : ORA – 300004 :
when using SYS_CONNECT_BY_PATH function, cannot have separator as part of column value
개발 중 다음과 같은 에러가 났다.
<원인>
SYS_CONNECT_BY_PATH의 컬럼값을 구분자로 사용할 수 없다는 의미.
SYS_CONNECT_BY_PATH( NM , ‘;’ ) 라고 한다면
NM이라는 컬럼값에 ‘;’ 라는 값이 포함되어 있다는 것
<해결방법>
1. 사용하지 않을 구분자으로 바꿔준다.
데이터에 구분자값이 들어가면 에러가 난다.
EX) SYS_CONNECT_BY_PATH( NM , ‘@’ )
2. 컬럼값을 변경하는 케이스는 해당 구분자값을 임시로 변경한 후 진행.
EX) SYS_CONNECT_BY_PATH( (REPLACE(NM,’;’,’@’),’;’) , ‘;’ )
▼ 필자 케이스
내가 만드는 SYS_CONNECT_BY_PATH의 구분자를 : 로 정했었는데
DATA 중에서 ‘:’ 기호를 사용하고 있는 DATA를 찾았음.
LTRIM(SYS_CONNECT_BY_PATH(X.NM,':'),':') AS PATH
나 같은 경우는 SYS_CONNECT_BY로 사용되는 기준의 DATA가
매일 2번의 배치를 통해 변경되고, 15000~ 건 이상이었음
따라서 해결방법2의 케이스 같은 경우는 DB연산이 들어감으로 쿼리가 너무 느려질까봐..
1번의 해결방법을 선택했음.
è LTRIM(SYS_CONNECT_BY_PATH(X.NM,'@'),'@') AS PATH 다음과 같이 변경하였더니 에러가 나지 않음 단, 메뉴DATA에 @가 안 들어오기를 바래야하는 걸까......??? ( 상호 협업간 @는 넣지 말자 커뮤니케이션 정의가 필요함 )
'Database > Oracle' 카테고리의 다른 글
Java.sql.SQLException : ORA-00907 누락된우괄호 해결방법 (0) | 2019.10.07 |
---|---|
SYNONYM(시노님)이란? / DB 테이블정보,컬럼정보 조회 방법 (0) | 2019.09.04 |
ORA-08002 : sequence is not yet defined in this session 해결방법 (0) | 2019.02.21 |
오라클 컬럼추가/삭제/수정 & 날짜컬럼 변형 및 조작 & 오라클함수생성 방법 (0) | 2019.02.21 |
ORACLE 대소문자 구분없이 검색하는방법 (예제로 설명) (0) | 2018.12.14 |