ORA-01428: argument '0' is out of range 오류는 오라클에서 기본적으로 제공하는 내장 수학함수(mathematical function) 등에서 적합하지 않은 매개변수를 설정하는 경우에 발생합니다. 이번 주제는 SQRT 함수를 예제로 안내해 드리겠습니다. 참고로 SQRT는 제곱근의 영어를 뜻하며 Square Root의 약자입니다. 아, 그리고 아규먼트 0는 입력하는 값에 따라 바뀌며, 이번 예제는 -1이 발생할 것입니다.
ORA-01428: '0' 인수가 범위를 벗어났습니다
다음 예제는 SQRT 함수에 인자 값을 -1로 설정하였을 때 오류가 발생하는 현상을 보여드리고 있습니다.
SELECT SQRT (-1) FROM DUAL;
ERROR at line 1:
ORA-01428: argument '-1' is out of range
예시의 SQRT 함수는 제곱근을 뜻하는 함수이며, 제곱하여 해당 값이 되는 수를 가리킵니다. 예를 들면 제곱근 4는 제곱하여 4가 되는 수인 2라는 값을 반환합니다.
SELECT SQRT (4) FROM DUAL;
SQRT(4)
----------
2
이것이 버전 차이에서 발생하는 현상인지는 모르겠으나, 오라클 문서에서는 스퀘어루트 함수의 매개변수를 다음과 같이 음수 값이 가능하다고 표현하고 있습니다.
"숫자 값입니다. 예를 들어 Sqrt(100)는 값 10을 반환합니다. 숫자 값에는 소수 및 음수 값이 포함될 수 있습니다."
ORA-01428: argument '0' is out of range
다만, 데이터베이스에서 허수가 유의미한 경우는 많지 않을 것입니다. 그리하여 저 또한 제곱근에 음수 값을 넣지 않습니다. 마찬가지로 ORA-01428: argument '0' is out of range 오류를 해결하기 위해서 사용하려는 수학함수의 인수 범위를 확인하여 예외발생을 방지할 수 있습니다.
다음 예제는 값이 음수인 경우 NULL을 반환하도록 하는 해결 방법 예시자료입니다.
--파라미터가 음수인 경우 (파라미터 := -1)
SELECT CASE WHEN :PARAM < 0 THEN NULL ELSE SQRT (:PARAM) END "Square Root"
FROM DUAL;
Square Root
-----------
--파라미터가 양수인 경우 (파라미터 := 9)
SELECT CASE WHEN :PARAM < 0 THEN NULL ELSE SQRT (:PARAM) END "Square Root"
FROM DUAL;
Square Root
-----------
3