写出来怪丢人,到现在还没搞懂这个。
在BW中创建ADSO,定义Key字段。可以看到ADSO表的定义中,所有的Key和Data属性如下:
所有的key会有关键字key打头,所有字段都有not null.
但是并不是有个字段是blank空的就不能更新进去了。这里的疑惑就在于,原始数据是空值blank,那么更新到主键字段类型是char的ADSO里,其实满足了not null 。
同时其他关键值字段,以int 型或者quan curr类型加载到ADSO里都满足它的not null 的要求的。
那么就要到ABAP里面来看,null的定义是什么。
在ABAP里,这里只讨论ABAP里。可能和其他Oracle My SQL不一样。
null是无的意思。不占用内存空间,不存在值。这里的重点是不占用内存空间。not null就是说分配内存空间。
而char类型的初始值是一位 ‘ ’ ,space
space在ASC II码值中的二进制表示是 00100000 占了一字节。
numc类型的初始值是’0…0’ 。于是这些初始值都是占用内存空间的。
更新到ADSO中,也是char是空的,n是0。所以主键是空值,不代表不能更新到ADSO中。
只是这个空的char值,在query里展示的时候,会被展示成# 这个意思是not assigned 。对应空值。
底下赋一些图,定长的CPNX类型都要指定长度的。