【问题标题】:hex values with CSSID in DB2-400DB2-400 中带有 CSSID 的十六进制值
【发布时间】: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?

【问题讨论】:

    标签: sql db2 db2-400


    【解决方案1】:

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

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

    大不同...

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

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

    【讨论】:

    • 那么我该如何调用我需要的程序呢?如果我在它前面加上“x”来调用它,它会找到记录并返回 ID
    • 好吧,我正在通过 PHP 调用,但我更愿意在 400 上的 DB2 中的存储过程中进行调用
    猜你喜欢
    • 1970-01-01
    • 2016-04-22
    • 2018-07-26
    • 1970-01-01
    • 2019-04-18
    • 1970-01-01
    • 1970-01-01
    • 2014-02-18
    相关资源
    最近更新 更多