OS/400 V5R4下有关SQL语句处理数字字段为NULL的处理方法
问题:
求助!急!SELECT语句中数字类型和null的问题
SELECT CASE WHEN JA01KN IS NULL THEN ' ' END FROM CNWWIP
因为JA01KN是一个数值型的字段,所以执行上面的sql语句,THEN ' '应该异常才对阿,可是为什么没有异常呢?客户那边就异常了。
和数据,ccsid什么的有关系吗?在400中NULL的数据应该怎么造啊?
客户那边的版本是5.4,我们是5.3的,不知道和这个有没有关系。
答:
对v5r4,IBM有资料说明对数字字段为null,会产生例外报错。
对v5r3,目前还没查到IBM相关的资料。
对v5r4的处理方法:
1) 用例外错误处理子程序,把数据字段为null的内容填入0,接着继续返回程序继续处理;
2) 用SIGNAL处理。
参考信息:
一、
引用网友的文章:
《SIGNAL和RESIGNAL在条件处理器(condition handler)中的应用》
可以通过SIGNAL和RESIGNAL来显示的触发一个指定的SQLSTATE.使用SIGNAL和RESIGNAL的MESSAGE_TEXT来设定伴随SQLSTATE的文本信息(可以理解为错误信息)。
在下面的例子中,在SQL procedure定义了一个处理自定义SQLSTATE 72822的条件处理器(condition handler)。当执行SIGNAL 72822语句时,DB2调用条件处理器(Condition Handler),该条件处理器首先通过IF语句测试变量var,如果var等于OK,处理器重新定义SQLSTATE为72623,并且指定了一个text,如果var不等于OK时,处理器重新定义SQLSTATE为72319,同时指定一个text。
DECLARE EXIT HANDLER FOR SQLSTATE '72822'
BEGIN
IF ( var = 'OK' )
RESIGNAL SQLSTATE '72623'
SET MESSAGE_TEXT = 'Got SQLSTATE 72822';
ELSE
RESIGNAL SQLSTATE '72319'
SET MESSAGE_TEXT = var;
END;
SIGNAL SQLSTATE '72822';
说明:本文是根据IBM DB2 Application Development Guide翻译而来。
二、
IBM有关V5R4技术讲稿中的例子:
OPEN C_GET_COFFEES ;
FETCH C_GET_COFFESS INTO V_AVG_PRICE ;
CLOSE C_FET_COFFESS ;
IF V_AVG_PRICE IS NULL THEN
SIGNAL COFFEES_UNKNOWN_AVG_PRICE
SET MESSAGE_TEXT = 'Unkonwn avg price of coffee.';
EDNIF;
...
阅读(1420) | 评论(0) | 转发(0) |