[oracle] sys_connect_by_path()

2014. 4. 8. 13:54 from DB

SYS_CONNECT_BY_PATH( 컬럼명, '구분자')

 

오라클 계층형 쿼리함수이다.

첫번째 인자에 컬럼명이 두번째 인자는 구분되는 문자열값을 받는다.

 

ORA-30004 : SYS_CONECT_BY_PATH 함수를 사용할 때 열 값의 일부로 분리자를 사용할 수 없습니다.

 

 

함수에서 받는 컬럼명의 해당 값이 해당 구분자를 포함할때 나는 오류이다.

구분자를 바꾸거나 해당컬럼값에 입력되는 값중 구분자를 제한해야 한다.

 

 

 


 

WITH DT AS 

 

    (SELECT TO_DATE('2014-04-02', 'YYYY-MM-DD') - 7 * (LEVEL-1) AS DT1, LEVEL FROM DUAL

     CONNECT BY LEVEL <= (TO_DATE('2014-04-02', 'YYYY-MM-DD')-(TO_DATE('2014-02-05', 'YYYY-MM-DD')) /7+1

    )

    SELECT CHECK_ID

                 CHECK_CATEGORY,

                 CHECK_CATEGORY_NAME,

                 COUNT(*) OVER(PARTITION BY CHECK_CATEGORY) CHECK_CATEGORY_CNT,

                 ROW_NUMBER() OVER(PARTITION BY CHECK_CATEGORY ORDER BY CHECK_ID) CHECK_CATEGORY_RNUM,

                 CHECK_MANAGER,

                 CHECK_MANAGER_NM,

                 CHECK_CONTENT,

                 CHECK_PARAMETER_TARGET,

                 CHECK_PARAMETER_VALUE,

                 CHECK_PURPOSE_TARGET,               

                 CHECK_PURPOSE_VALUE,        

                 STATE_RESULT,        
       FROM (

                  SELECT CHECK_ID,

                               CHECK_CATEGORY,

                               CHECK_CATEGORY_NAME,

                               CHECK_MANAGER,

                               CHECK_MANAGER_NM,

                               CHECK_CONTENT,

                               CHECK_PARAMETER_TARGET,

                               CHECK_PARAMETER_VALUE,

                               CHECK_PURPOSE_TARGET,               

                               CHECK_PURPOSE_VALUE,        

                               SUBSTR(MAX(sys_connect_by path(STATE_RESULT_VALUE, ';') STATE_RESULT

                     FROM  (

                                SELECT CL.CHECK_ID,

                                             CL.CHECK_CATEGORY,

                                             pkg_common.getCodeValueById(CL.CHECK_CATEGORY) CHECK_CATEGORY_NAME,

                                             CL.CHECK_MANAGER,

                                             pkg_common.getCodeValueById(CL.CHECK_MANAGER) CHECK_MANAGER_NM,

                                             CL.CHECK_CONTENT,

                                             CL.CHECK_PARAMETER_TARGET,

                                             CL.CHECK_PARAMETER_VALUE,

                                             CL.CHECK_PURPOSE_TARGET,

                                             CL.CHECK_PURPOSE_VALUE,

                                             ROW_NUMBER() OVER(PARTITION BY CL.CHECK_ID ORDER BY CL.DT1 DESC) RNUM

                                   FROM (

                                             SELECT * FROM TB_SECU_DAY_CHECK_LIST, DT

                                              WHERE NVL(TB_ITP_SECU_DAY_CHECK_LIST.CHECK_DEL_YN, 'N') = 'N'

                                             ) CL,

                                             (

                                             SELECT STATE_DATE,

                                                          CHECK_ID,

                                                          NVL(STATE_RESULT_VALUE, ' ') STATE_RESULT_VALUE

                                                FROM TB_ITP_SECU_DAY_CHECK_STATE

                                              WHERE STATE_DATE BETWEEN TO_DATE('2014-02-05', 'YYYY-MM-DD') AND

                                                          TO_DATE('2014-04-02', 'YYYY-MM-DD')

                                              ) STATE

                                  WHERE CL.CHECK_ID = STATE.CHECK_ID(+)

                                              AND CL.DT1 = STATE.STATE_DATE(+)

                                  ) SL

                       WHERE 1 = 1

                                   START WITH RNUM   =   1

                                   CONNECT BY PRIOR RNUM = RNUM - 1

                                   AND PRIOR CHECK_ID = CHECK_ID

                                   GROUP BY CHECK_ID,

                                                    CHECK_CATEGORY,

                                                    CHECK_CATEGORY_NM,

                                                    CHECK_MANAGER,  

                                                    CHECK_MANAGER_NM,

                                                    CHECK_CONTENT,    

                                                    CHECK_PARAMETER_TARGET,

                                                    CHECK_PARAMETER_VALUE,

                                                    CHECK_PURPOSE_TARGET,               

                                                    CHECK_PURPOSE_VALUE

                                   ORDER BY CHECK_CATEGORY, CHECK_ID

                         ) WHERE 1=1 ;

 

'DB' 카테고리의 다른 글

테이블 insert 권한 줄때 잊지말고 시퀀스도 select 권한도 함께!  (0) 2014.04.03
PL/SQL  (0) 2014.03.06
SQL 언어의 종류  (0) 2014.03.06
데이터베이스 설계단계  (0) 2014.03.06
SQL 표준 개정이력  (0) 2014.03.06
Posted by 에시드 :