Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1269125
  • 博文数量: 287
  • 博客积分: 11000
  • 博客等级: 上将
  • 技术积分: 3833
  • 用 户 组: 普通用户
  • 注册时间: 2007-08-16 08:43
文章分类
文章存档

2013年(15)

2012年(17)

2011年(17)

2010年(135)

2009年(85)

2008年(18)

分类: 系统运维

2009-04-17 12:37:14

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;
...
阅读(1380) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~