我有一个db2存储过程,如下所示。此proc调用CL来调用RPG程序。
CREATE PROCEDURE bsm4obj/TXCL4055
(
INOUT POCNO CHAR (10),
INOUT POCRN DEC ( 2 , 0 ),
INOUT PSPNO CHAR (10),
INOUT PMTAD CHAR (1),
INOUT PYREX CHAR (1),
INOUT PMTYR CHAR (1),
INOUT PKMLK CHAR (10),
INOUT HATVR CHAR (1)
)
LANGUAGE CL NOT DETERMINISTIC NO SQL EXTERNAL
NAME bsm4obj/txCL4055 PARAMETER STYLE GENERAL
我从服务器调用此proc。 (ODBC语言ID土耳其语);
OdbcCommand cmd = new OdbcCommand("{CALL BSM4OBJ.TXCL4055(?,?,?,?,?,?,?,?)}", as400con);
cmd.CommandType = CommandType.Text;
当执行RPG程序时(步骤如下),变量'ŞŞ'不会被编译器识别为像'@@'那样。
TSDEPRIFEQ'ŞŞ'
//读取类似TSDEPR IFEQ'@@'
程序在As400上的QPADEV会话中完美执行,但是在SQL调用上的行为不是这样的。
我用RPG中的临时替换土耳其静态字符。 但我想找到确切的解决方案。 如果你建议我会很高兴
答案 0 :(得分:0)
默认情况下,RPG并不总是正确处理字符文字。它在编译时CCSID中保存文字的十六进制值,但它解释作业CCSID中的十六进制值。
从7.2开始,您可以编写H spec关键字CCSID(* EXACT),这将导致RPG记住字符文字的真实CCSID。
另一种解决方法是使用%UCS2对文字进行编码。
if TSDEPR = %ucs2('ŞŞ');