Oracle 의 empty string 과 NULL
APPLIES TO:
Oracle Server - Enterprise Edition - Version: 9.2.0.8 and later [Release: 9.2 and later ] Information in this document applies to any platform.
GOAL
Given a table where a character column is defined as not null:
create table tester (id number not null, dat varchar2(30) default ' ' not null);
Why does the default value not get used in the following statements?
insert into tester values (1, '');
insert into tester values (1, null);
ERROR at line 1: ORA-01400: cannot insert NULL into ("REFRESH"."TESTER"."DAT") How might you still insert a record in these circumstances?
Note that the string value '' (no space) is seen by Oracle as a null per documentation: Oracle� Database SQL Language Reference 11g Release 2 (11.2) Part Number E17118-03 E021-02, CHARACTER VARYING data type (Oracle does not distinguish a zero-length VARCHAR string from NULL)
SOLUTION
The "DEFAULT" column option does not work in this scenario because a value, albeit null, was provided in the insert for the dat column. The default value is only used if the column is omitted from the insert statement. To utilize the default value defined at the column-level, the insert would need to be written as either:
insert into tester (id) values (1);
insert into tester values (1, default);
In the case where a value is supplied but seen as null by Oracle, then use a trigger to provide a valid value:
create or replace trigger tester_null_ck_trig
before insert or update of dat on tester
for each row
declare
begin
if :new.dat is null then
:new.dat := ' ';
end if;
end;
/
insert into tester values (1, '');
insert into tester values (1, null);
REFERENCES
http://download.oracle.com/docs/cd/E11882_01/server.112/e17118/ap_standard_sql003.htm#g14847
댓 글 자 주석:
다음은 Oracle 10g 문서 에서 이 점 에 대한 설명 입 니 다.
Oracle 의 핵심 SQL: 2003 에 대한 준수 성
https://docs.oracle.com/cd/B19306_01/server.102/b14200/ap_standard_sql003.htm
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Oracle 생성 향후 3일간의 전체 시점 (단계 상세)수요: X 좌표축 시간은 모두 정시 시간으로 앞으로 3일 동안의 예측을 보여준다(x 축은 앞으로 3일 동안의 정시 시간을 보여준다), 3시간마다 한 눈금, 가로 좌표는 모두 24개의 눈금을 보여준다 1단계: 현재 시...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.