在PL / SQL DATE
数据类型中存储固定长度值。它们以二进制格式存储,但以默认格式显示为字符。
考虑以下声明:
v_regdate DATE;
此处v_regdate
未初始化,因此其值为NULL。只是想知道如何以二进制格式存储NULL。
答案 0 :(得分:4)
如果给定日期(实际上,任何数据类型)变量/列的值为null,则不存储任何内容。 Null只是简写,nada,zip(至少就存储的数据而言)。
您可以从此测试用例中看到:
create table test (col1 number, col2 date);
insert into test (col1) values (1);
insert into test (col1, col2) values (2, sysdate);
commit;
select col1,
to_char(col2, 'dd/mm/yyyy hh:mi:ss') col2,
dump(col1) col1_dump,
dump(col2) col2_dump
from test;
COL1 COL2 COL1_DUMP COL2_DUMP
---------- ------------------- -------------------- ----------------------------------------
1 Typ=2 Len=2: 193,2 NULL
2 28/01/2015 11:12:33 Typ=2 Len=2: 193,3 Typ=12 Len=7: 120,115,1,28,12,13,34
drop table test;
注意" NULL"通过转储col2报告的空值;这意味着"此行中没有任何内容存储此行"。
答案 1 :(得分:2)
在PL / SQL中,DATE数据类型存储固定长度值...
那不太对劲。日期有一个使用七个字节的内部表示,是的,所有实际日期的长度都是七个字节,如果你想这样看的话。您可以在{@ 1}}中找到@ boneist的答案,所以我不会重复它。
但是一个空值并没有将这七个字节全部设置为某种东西 - 如果这是你正在寻找的东西,它就不是一个神奇的值;例如,它不是0x00的七个字节。 null变量的长度为零字节。
答案 2 :(得分:2)
请记住,Oracle没有定义如何为给定的数据类型存储null,因为null的定义确实是“未定义”。这就是为什么,例如:
SELECT 1 来自双重 WHERE NULL = NULL;
什么都不返回。你不能将一个“未定义”与另一个“未定义”进行比较并期望等效。