Oracle 23c부터 UPDATE 문에 대해서도 DEFAULT ON NULL 속성을 지정할 수 있습니다. 참고로 INSERT 문에 대한 DEFAULT ON NULL 속성은 12.1 버전에 추가되었습니다.
You can define columns as DEFAULT ON NULL for update operations, which was previously only possible for insert operations. Columns specified as DEFAULT ON NULL are automatically updated to the specific default value when an update operation tries to update a value to NULL. This feature simplifies application development and removes your need for complex application code or database triggers to achieve the desired behavior. Development productivity is increased and code becomes less error-prone.
테스트를 위해 아래와 같이 테이블을 생성하겠습니다. c2 칼럼은 INSERT 문과 UPDATE 문에 대한 DEFAULT ON NULL 속성을 가집니다.
-- 1
DROP TABLE t1 PURGE;
CREATE TABLE t1 (
c1 NUMBER
, c2 VARCHAR2(2) DEFAULT ON NULL FOR INSERT AND UPDATE 'A');
아래 INSERT 문을 수행하면 c2 칼럼에 A가 입력됩니다.
-- 2-1
INSERT INTO t1 (c1) VALUES (1);
INSERT INTO t1 (c1, c2) VALUES (2, NULL);
COMMIT;
-- 2-2
SELECT * FROM t1;
C1 C2
-- --
1 A
2 A
2 행이 선택되었습니다.
c2 칼럼을 널로 갱신해도 c2 칼럼 값이 A로 갱신됩니다.
-- 3-1
UPDATE t1 SET c2 = NULL;
COMMIT;
-- 3-2
SELECT * FROM t1;
C1 C2
-- --
1 A
2 A
2 행이 선택되었습니다.
*_TAB_COLUMNS 뷰의 default_on_null 칼럼은 INSERT 문, default_on_null_upd 칼럼은 UPDATE 문에 대한 DEFAULT ON NULL 속성 여부를 표시합니다. DEFAULT ON NULL 속성을 정의하면 NOT NULL 제약조건이 자동으로 생성됩니다.
-- 4-1
SELECT column_name, nullable, default_length, data_default_vc, default_on_null, default_on_null_upd
FROM user_tab_columns
WHERE table_name = 'T1';
COLUMN_NAME NULLABLE DEFAULT_LENGTH DATA_DEFAULT_VC DEFAULT_ON_NULL DEFAULT_ON_NULL_UPD
----------- -------- -------------- --------------- --------------- -------------------
C1 Y NO NO
C2 N 3 'A' YES YES
2 행이 선택되었습니다.
-- 4-2
SELECT owner, constraint_name, constraint_type, search_condition_vc, generated
FROM user_constraints
WHERE table_name = 'T1';
OWNER CONSTRAINT_NAME CONSTRAINT_TYPE SEARCH_CONDITION_VC GENERATED
----- --------------- --------------- ------------------- --------------
TUNA SYS_C008320 C "C2" IS NOT NULL GENERATED NAME
1개의 행이 선택되었습니다.