科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道DB2用户定义函数实现多种语言的排序

DB2用户定义函数实现多种语言的排序

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文主要关注 DB2 V8 for Linux, UNIX, and Windows,但是这个 UDF 示例也可以用在即将发布的 Viper 上。这个 UDF 也应该能够用在 DB2 V7 FP3 或更高版本上,但是这没有经过测试。

来源:IT专家网 2008年6月4日

关键字: IBM 数据库 DB2

  • 评论
  • 分享微博
  • 分享邮件

清单 2. 修改的 Windows bldrtn.bat 文件

:link_step
    rem Link the program.
    link -debug -out:%1.dll -dll %1.obj db2api.lib icudt.lib icuuc.lib
    icuin.lib -def:%1.def

运行 bldrtn 脚本来编译这个 UDF: bldrtn sortkey

将 sortkey(在 Windows 上是 sortkey.dll)文件复制到 sqllib/function 中。连接到数据库,并运行 DDL 脚本来对这个函数进行编目:

db2 connect to sample

db2 -tvf createfn.db2

注意,如果以这种方式编译这个 UDF,那么在运行它的任何机器上必须完整地安装 ICU。

使用 SORTKEY UDF

语法

>>--SORTKEY--(--string-expression--,--collation-name--)--><

这个 UDF 的模式是 ICU。如果模式 ICU 在 SQL PATH 中,那么就不必对这个 UDF 进行显式限定引用。

SORTKEY UDF 返回一个 VARCHAR(1200) FOR BIT DATA 字符串,代表在指定的 collation-name 中 string-expression 的排序键。如果排序键的长度超过 1200 字节,那么排序键被截断并返回一个警告(SQLSTATE 01HKY)。SORTKEY 的结果是可空的。如果任何参数是 null,那么结果就是 NULL。

可以对两个字符串的 SORTKEY 结果进行二进制比较,从而判断它们在指定的 collation-name 中的次序。为了让比较有意义,使用的 SORTKEY 结果必须来自相同的 collation-name。

string-expression

这个表达式返回一个 CHAR、VARCHAR、GRAPHIC 或 VARGRAPHIC 字符串,UDF 要判断这个字符串的排序键。string-expression 的最大长度是 100 个字符(SQLSTATE 22001)。如果 string-expression 是 CHAR 或 VARCHAR,这个表达式必须不是 FOR BIT DATA (SQLSTATE 42846)。如果 string-expression 是空字符串,那么结果是一个具有非零长度的有效排序键。

collation-name

这个字符串表达式指定在判断排序键时使用的排序规则。collation-name 的值不是大小写敏感的,而且必须是空字符串(对应于默认的 UCA 排序)或者 “排序规则名” 中定义的一个名称。(SQLSTATE SKCOL)。

必须从 Unicode 数据库调用 SORTKEY,否则返回一个错误。(SQLSTATE SKUTF)。

示例

example.db2 中的 Unicode 字符

example.db2 文件包含几个用 UTF-8 进行编码的字符。理想情况下,应该从一个 Unicode shell 调用下面的示例。如果不是从 Unicode shell 调用示例,那么表 SORTKEY_GERMAN1 和 SORTKEY_GERMAN2 会包含不正确的数据,示例 4 会失败。

为了允许从非 Unicode shell 调用示例,可以将注册表变量 DB2CODEPAGE 设置为 1208。这会使 DB2 客户机以 UTF-8 格式处理数据。加重音的字符无法正确显示,但是示例可以正确地运行。

为了设置 DB2CODEPAGE 并运行示例,执行以下命令:

db2 terminate
    db2set DB2CODEPAGE=1208
    db2 connect to sample
    db2 -tf example.db2

当 DB2CODEPAGE 设置为 1208 时,它对其他应用程序可能会产生某些意料之外的效果。在运行示例之后,可以用以下命令恢复 DB2CODEPAGE:

db2 terminate
    db2set DB2CODEPAGE=

这些示例使用的表、数据和查询可以在文件 example.db2 中找到。当连接数据库时,可以用以下命令执行它:

db2 -tf example.db2

ORDER BY

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章