DB2-400 中带有 CSSID 的十六进制值

Posted

技术标签:

【中文标题】DB2-400 中带有 CSSID 的十六进制值【英文标题】:hex values with CSSID in DB2-400 【发布时间】:2020-02-21 21:50:28 【问题描述】:

我有一个存储过程,我在其中传递一个值(来自 CHARACTER(13),CSSID 为 65535,并尝试通过它返回一个 ID

程序是:

BEGIN

DECLARE GET_ID_BY_WEB_IDENTIFIER_C1 CURSOR WITH RETURN FOR
SELECT ID FROM TABLE . ITEMT WHERE WEB_IDENTIFIER = P_WEB_IDENTIFIER ;

OPEN GET_ID_BY_WEB_IDENTIFIER_C1 ;
END 

并且参数 P_WEB_IDENTIFIER 是一个具有匹配 cssid 的 CHARACTER(26)。我也试过这个,它是一个字符 13,结果相同。

当我这样称呼时:

CALL PROGRAM . GET_ID_BY_WEB_IDENTIFIER (x'0213725501A421B9A457123001')

我找回了我的 ID,但是当我这样调用时(因为它在生产中通过网络调用):

 CALL PROGRAM . GET_ID_BY_WEB_IDENTIFIER ('0213725501A421B9A457123001')

我收到转换错误

如何确保仅传递字符串 '0213725501A421B9A457123001' 会以这种方式返回我的 ID?

【问题讨论】:

【参考方案1】:

这个x'0213725501A421B9A457123001' 是一个十六进制 字符串文字。 一眼看去,它主要代表不可打印的字符。

'0213725501A421B9A457123001' 是一个实际的字符串。 它在 db2 上的十六进制等效值为 x'F0F2F1F3F7F2F5F5F0F1C1F4F2F1C2F9C1F4F5F7F1F2F3F0F0F1'

大不同...

您的网络应用程序还需要将其作为十六进制文字传递,请务必将存储的 proc 参数定义为 CCSID 65535(二进制/无翻译)

您可以选择将字符串值转换为存储过程中的十六进制(二进制)值。操作系统有一些内置函数可以做到这一点,对于 RPG 示例,请看这里https://***.com/a/58997608/2933177

【讨论】:

那么我该如何调用我需要的程序呢?如果我在它前面加上“x”来调用它,它会找到记录并返回 ID 好吧,我正在通过 php 调用,但我更愿意在 400 上的 DB2 中的存储过程中进行调用

以上是关于DB2-400 中带有 CSSID 的十六进制值的主要内容,如果未能解决你的问题,请参考以下文章

Java中带有十六进制的字节

DB2 AS400 Java 函数总是返回相同的值

如何在 DB2/400 中创建生成的列

DB2/400 中的 if-else 语句

Cognos 10.2.2 as400 iSeries DB2 jdbc 连接

在 DB2/400 中获取仅按用户分组的最新结果