본문 바로가기
Database/Oracle

ORA – 300004 : when using SYS_CONNECT_BY_PATH function, cannot have separator as part of column value 해결방법

by 나비와꽃기린 2019. 2. 22.
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.








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 @가 안 들어오기를 바래야하는 걸까......???

( 상호 협업간 @는 넣지 말자 커뮤니케이션 정의가 필요함 )