iSeries db2 存储过程调用上的 RPG 程序运行时中的字符集问题



我有一个如下所示的 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('ŞŞ');

最新更新