기술 정보
home
채널 소개
home

LAG/LEAD 함수의 offset 파라미터에 NULL 입력 시 11005 오류 발생

문서 유형
장애 해결
분야
App개발
키워드
SQL
적용 제품 버전
6FS06
6FS07
6FS07PS
7FS01
7FS02
7FS02PS
1 more property

현상

LAG 및 LEAD 내장 함수의 offset 파라미터에 숫자가 아닌 NULL 값을 입력하면, 쿼리 결과 대신 TBR-11005 오류가 발생합니다.
TBR-11005: Specified value '-E+125' is invalid for mathematical function argument(s). at line 1, column 45 of null: SELECT TABLE_NAME, NUM_ROWS, LAG(NUM_ROWS, NULL, 0) --수행쿼리1: 명시적 offset 파라미터 NULL 값 수행 시 SQL> SELECT TABLE_NAME, NUM_ROWS, LAG(NUM_ROWS, NULL, 0) OVER (PARTITION BY OWNER ORDER BY NUM_ROWS) AS LROW FROM DBA_TABLES; --수행쿼리2: DECODE 문에 해당 하지 않는 값으로 인해 offset 파라미터 NULL 인자로 수행 시 SQL> SELECT TABLE_NAME, NUM_ROWS, LAG(NUM_ROWS, DECODE(OWNER, 'SYS', 1, 'TIBERO',2), 0) OVER (PARTITION BY OWNER ORDER BY NUM_ROWS) AS LROW FROM DBA_TABLES;
SQL
복사
LAG(expr, offset, default)
LAG 함수는 자기 자신과 조인하지 않고도, 하나의 테이블 내에서 여러 개의 로우를 동시에 참조할 수 있는 분석 함수입니다.
지정된 offset만큼 현재 로우 기준으로 앞에 위치한 로우의 값에 접근할 수 있습니다.
LEAD(expr, offset, default)
LEAD 함수 역시 별도의 조인 없이, 동일 테이블 내의 여러 로우를 동시에 참조할 수 있도록 하는 분석 함수입니다.
지정된 offset만큼 현재 로우 기준으로 뒤에 위치한 로우의 값에 접근할 수 있습니다.

원인

offset 파라미터에 음수 값이 들어가는 것을 방지하기 위해 offset과 number_zero를 비교하는 로직을 사용하고 있었으나, NULL과 number_zero를 비교하여 에러가 발생하였습니다.

해결

NULL 인 경우 별도 처리하도록 쿼리를 변경합니다.
--NULL 인 경우 해당 ROW값으로 출력 되도록 우회 SELECT TABLE_NAME, NUM_ROWS, LAG(NUM_ROWS, NVL(NULL,0), 0) OVER (PARTITION BY OWNER ORDER BY NUM_ROWS) AS LROW FROM DBA_TABLES; --DECODE에 해당하는 데이터와 해당하지 않는 데이터 구분하여 조회 (DECODE에 해당하지 않는 조건은 3번째 인자인 default 파라미터 출력) SELECT TABLE_NAME, NUM_ROWS, LAG(NUM_ROWS, DECODE(OWNER, 'SYS', 1, 'TIBERO',2), 0) OVER (PARTITION BY OWNER ORDER BY NUM_ROWS) AS LROW FROM DBA_TABLES WHERE OWNER IN ('SYS','TIBERO') UNION ALL SELECT TABLE_NAME, NUM_ROWS, 0 AS LROW FROM DBA_TABLES WHERE OWNER NOT IN ('SYS','TIBERO') ;
SQL
복사