Sql DB2中位/十六进制混淆的字符

Sql DB2中位/十六进制混淆的字符,sql,db2-400,Sql,Db2 400,这项工作: SELECT TASKT_ID FROM DATA . TASKT WHERE TASK_WEB_IDENTIFIER = CAST ( HEXTORAW ( '0213725501A421D384233E5001' ) AS CHAR ( 26 ) ) ; 因为这项工作,我将其纳入程序: BEGIN DECLARE GET_TASKT_ID_BY_TASK_WEB_IDENTIFIER_C1 CURSOR WITH RETURN FOR SELECT TASKT_ID FROM

这项工作:

SELECT TASKT_ID FROM DATA . TASKT WHERE TASK_WEB_IDENTIFIER = CAST ( HEXTORAW ( '0213725501A421D384233E5001' ) AS CHAR ( 26 ) ) ;
因为这项工作,我将其纳入程序:

BEGIN

DECLARE GET_TASKT_ID_BY_TASK_WEB_IDENTIFIER_C1 CURSOR WITH RETURN FOR
SELECT TASKT_ID FROM DATA . TASKT WHERE TASK_WEB_IDENTIFIER = CAST ( HEXTORAW ( P_WEB_IDENTIFIER ) AS CHAR ( 26 ) ) ;

OPEN GET_TASKT_ID_BY_TASK_WEB_IDENTIFIER_C1 ;
END 
该过程具有一个参数p_WEB_标识符,该标识符是具有CCSID 65535的位数据的CHAR26

但是,当我现在用如下字符串调用它时:

call PROGRAM . GET_TASKT_ID_BY_TASK_WEB_IDENTIFIER ('0213725501A421D384233E5001');
我发现VARBINARY_函数的参数按长度或数据类型无效

此外,这项工作:

call PROGRAM . GET_TASKT_ID_BY_TASK_WEB_IDENTIFIER (CAST('0213725501A421D384233E5001' as char(26)));

如何确保字符串转换时只传递字符串?

您使用什么来调用存储过程

DB2fori的哪个版本和发行版

在IBM ACS的运行SQL脚本组件或旧版Access for Windows中,语句中的字符串文本被视为varchar

因此,将“0213725501A421D384233E5001”铸造为char26是有意义的。没有显示的是错误消息。通常,当Db正在查找一个名为PROGRAM.get_TASKT_ID_BY_TASK_WEB_标识符的过程时,会出现一个procedure not found错误,该过程采用varchar参数,并且唯一存在的是一个采用char26的过程

IBM的工具在需要时隐式转换方面做得更好。但是我通常在手动测试时使用显式转换,就像您在这里所做的那样。或者我让帕尔姆·瓦尔查开始。如果需要,在过程中转换为字符

char/varchar的差异通常与客户机代码无关,因为它可以在类型定义中是特定的。这只是像ACS这样执行动态语句的交互式工具的一个因素