我有一个如下所示的 db2 存储过程。此进程正在调用 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
我从服务器调用此进程。(ODBC 语言 ID 土耳其语(;
OdbcCommand cmd = new OdbcCommand("{CALL BSM4OBJ.TXCL4055(?,?,?,?,?,?,?,?)}", as400con);
cmd.CommandType = CommandType.Text;
当执行RPG程序时(步骤如下(,编译器不会识别变量"ŞŞ",而是识别"@@"。
TSDEPR IFEQ 'ŞŞ'
读起来像 TSDEPR IFEQ '@@'
该程序在 As400 上的 QPADEV 会话中完美执行,但在 SQL 调用上的行为并非如此。
我在 RPG 中用等效的临时字符替换了土耳其静态字符。但我想找到确切的解决方案。如果您建议,我将非常高兴
默认情况下,RPG 并不总是正确处理角色文字。它将文本的十六进制值保存在编译时 CCSID 中,但它解释作业 CCSID 中的十六进制值。
从 7.2 开始,你可以编写 H spec 关键字 CCSID(*EXACT(,这将使 RPG 记住字符文字的真实 CCSID。
另一种解决方法是使用 %UCS2 对文本进行编码。
if TSDEPR = %ucs2('ŞŞ');