Chinaunix首页 | 论坛 | 博客
  • 博客访问: 822980
  • 博文数量: 137
  • 博客积分: 3477
  • 博客等级: 中校
  • 技术积分: 1409
  • 用 户 组: 普通用户
  • 注册时间: 2006-11-30 21:53
文章分类

全部博文(137)

文章存档

2024年(8)

2023年(10)

2022年(4)

2021年(10)

2020年(9)

2018年(1)

2017年(1)

2014年(4)

2013年(3)

2012年(12)

2011年(24)

2010年(2)

2009年(8)

2008年(6)

2007年(34)

2006年(1)

分类:

2011-03-24 22:41:17

这几日编写 DB2 自定义函数,发现一个很特别的问题。ascii 函数的使用范围很特别。

我们首先来看这样一个情况:

# db2
db2-> values ascii('a')
db2-> 97

这个实验在 db2 v8 和 db2 v9 环境下测试均能够通过。

我们再来看一个自定义函数 isdigit


CREATE FUNCTION ISDIGIT (
CHKSTRING CHAR(200)
)
    RETURNS INTEGER
    NO EXTERNAL ACTION
F1: BEGIN ATOMIC

    -- #######################################################################

    -- # Specify the SQL you want to execute by replacing the text within the

    -- # [brackets] with your SQL. There are several ways to do this:

    -- # * Enter your SQL directly, or

    -- # * Cut and paste your SQL, or

    -- # * Right-click in the editor window and select Insert from File...

    -- # Note: Be sure to end the statement with the terminator (usually ';')

    -- # Example: SELECT COUNT(*) FROM SYSIBM.SYSTABLES;

    -- ######################################################################

    --[Your SQL to execute goes here]

   
    DECLARE STRLEN INTEGER ;
    DECLARE LENS INTEGER ;
    DECLARE FLAGS INTEGER ;
    DECLARE STRC CHAR(1) ;

    SET FLAGS=1 ;
     SET LENS = 1;
    WHILE LENS < LENGTH(LTRIM(RTRIM(CHKSTRING))) AND FLAGS <> 0 DO
        SET STRC = SUBSTR(CHKSTRING,LENS,1);
        IF LENGTH(STRC) = 0 THEN
            SET FLAGS = 0;
        ELSE
            IF ASCII(STRC) <48 OR ASCII(STRC)>57 THEN
                SET FLAGS = 0;
            END IF;
        END IF;
        SET LENS = LENS + 1;
       END WHILE;
    RETURN FLAGS;
END F1



这个函数在 db2 v8 的环境下部署的时候,会出现 sqlcode 440 的错误,部署失败。但我们在 db2 v9 的环境下却可以部署成功。

通过反复查看,发现在 db2 v8 系统上建库时使用的字符集是 gb2312 而在 db2 v9 的系统上建库时使用的是 gbk 的字符集。

目前比较疑惑的是,究竟是在建库时使用的字符集的影响,还是 db2 v8 本身存在某些函数不能使用在自定义函数中的限制,不过从测试的情况来看,字符集的影响会更大一些,有可能是某些函数不支持在 gb2312 字符集环境下使用。待下一次再全面测试。

初步认为,部分字符操作函数,在用于自定义函数中时,可能会存在不支持 gb2312 字符集环境的情况。




原创文章,请尊重本人的知识产权。
阅读(4687) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~