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 的十六进制值的主要内容,如果未能解决你的问题,请参考以下文章