Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3120825
  • 博文数量: 238
  • 博客积分: 864
  • 博客等级: 军士长
  • 技术积分: 2940
  • 用 户 组: 普通用户
  • 注册时间: 2012-10-08 23:01
个人简介

WeChat: cj_william / Mail: william.chen.cn@outlook.com

文章分类

全部博文(238)

文章存档

2018年(2)

2016年(35)

2015年(47)

2014年(104)

2013年(38)

2012年(12)

分类: 其他平台

2015-04-22 10:19:55

之前看过老白的一片文章关于数据库中的Null的,原文如下:

如你所知,EQ sapce 不等效于 IS NULL。
通过SAP创建的表,如果是初次创建,所有的列都会存在一个初始值(MANDT为'000',普通CHAR类型为' ',日期类型为'00000000',数值类型为0。。等等),即Field的NOT NULL为'X',不允许空值。当这个表有了一部分数据后,又更改这个表,添加了一些字段,那么这些新加的字段如果不勾上“Initial Value”就有可能有空值了,也就是NULL值,这样就给SELECT带来很大麻烦。
解决的办法就是勾中“Initial Value”,这样就能够保证字段有初始值了。

今天在群里又有小伙伴提出了相关的问题,做了一些扩充的解释,过程如下
问:
 select from dtable 的时候 where条件里面char1类型字段条件 = ‘’和 is null有啥区别吗? 
这有个自定义表 条件里写 zdel = '' 和zdel NE 'X'都取不到值 只有zdel is null才取到值 

显然根据老白文中提到的勾上初始值选项,是可以的。此处问题是:
关键是勾上和没有勾上究竟产生了什么影响?  (体现大牛的时刻呀,哈哈)
给张图、生动一下

红框里的代码注释掉 就能write出结果,保留就sy-subrc = 4,write不出东西。
是NULL的时候 where语句里 就只能和NULL比较? 
为啥查不出东西了。 NULL NE 'X'不成立?

看看大顾们给的解释:
but they are converted to initial values of the correct type when passed to data objects.  
这句话就说NULL值通过select语句取到数据然后传给程序里的data object的时候,被转换成initial value了。
所以我上面那个代码 在where条件里加ZDEL是NULL值,用 NE 'X'做判断取不到数据 ;
不加那条件,取出来之后ZDEL的值从NULL转成'',用NE 'X',可以输出。

这里跟我们强调了一点,Select语句从DB取出数据到ABAP运行层面是有一层数据对象转换的。这使我想起了SAP的数据层次架构(图略),代码编译转换之间的关系。举例SAP系统语言的存储和显示层不也有着此类的转换吗:中文显示ZH 后台存储实则为 1 。

这里也告诉了我们大顾之所以为大顾是有道理的。
 

阅读(4073) | 评论(0) | 转发(0) |
0

上一篇:SAP 成本要素

下一篇:次级成本要素

给主人留下些什么吧!~~