Programming/Oracle

[Oracle] null 함수

Isaac S. Lee 2023. 9. 4. 17:23

💡null 함수


nvl(컬럼, 값)
nvl(컬럼, 값, 값)

nvl(null value)은 null을 치환하는 함수이다.

 

null value

case end 사용

SELECT
	name, 
	CASE
		WHEN population IS NOT NULL THEN population
		WHEN population IS NULL THEN 0
	END
FROM tblCountry;

 

nvl 사용

SELECT name, nvl(population, 0) FROM tblCountry;

null 함수는 null 전용의 replace 함수라고 볼 수 있다.

null을 찾아서 0으로 값을 바꿔주었다.

 

일련번호 만들기

CREATE TABLE tblItem
(
	seq NUMBER PRIMARY KEY,
	name varchar2(100) NOT NULL,
	color varchar2(50) NOT NULL
);

일련번호가 필요한 테이블을 생성하였다.

 

null value를 사용하지 않을 경우

--ORA-01400: cannot insert NULL into ("HR"."TBLITEM"."SEQ")
INSERT INTO tblItem (seq, name, color)
			VALUES ((SELECT max(seq) + 1 FROM tblItem), '마우스', 'white');

INSERT INTO tblItem (seq, name, color)
			VALUES (1, '마우스', 'white');

이 경우는 데이터를 수동으로 한 번 넣어준 뒤에 실행해 줘야 오류가 발생하지 않고 값이 들어가므로 좋은 방법이 아니다.
이때 null value를 이용할 수 있다.

 

null value를 사용할 경우

INSERT INTO tblItem (seq, name, color)
			VALUES ((SELECT nvl(max(seq), 0) + 1 FROM tblItem), '마우스', 'white');

처음에 데이터를 수동으로 넣을 필요 없이 null일 경우에도 데이터가 들어간다.

 

null value 2

SELECT
	name, nvl2(population, 'A', 'B')
FROM tblCountry;

nvl2는 null일 경우와 null이 아닐 경우에 따라서 다른 값을 넣어줄 수 있다.
위 쿼리는 null이 아니면 A를 null이면 B를 돌려준다.