我遇到了iSeries功能问题,因为我的默认用户配置文件使用的是CCSID 65535,因此无法正确转换数据。我可以将作业更改为CCSID 37,一切正常。
我想要一个解决方案,用户无需更改其工作属性。
该函数正在运行java应用程序,看起来像这样
CREATE FUNCTION mylib/re_Test2(input VARCHAR(500) CCSID 37,
regex VARCHAR(500) CCSID 37)
RETURNS INTEGER
EXTERNAL NAME 'UDFs.re_Test'
LANGUAGE Java
PARAMETER STYLE Java
FENCED
NO SQL
RETURNS NULL ON NULL INPUT
SCRATCHPAD
DETERMINISTIC
我最初没有使用CCSID 37就试过了,但发现一些帖子暗示添加这个会强制将任何参数转换为美国英语。它似乎对我不起作用。
有什么建议吗?
我尝试从STRSQL和RPGLE脚本运行,但是它们都不起作用,但是,SQLSquirrel(一个使用ODBC的开源SQL程序)可以工作。
答案 0 :(得分:2)
CCSID 65535表示“没有字符翻译”...所以如果您的表是使用特定的CCSID创建的,我建议使用该CCSID运行该应用程序。
答案 1 :(得分:1)
我遇到了同样的问题。我发现它与功能参数无关(我有整数)。
问题在于您如何调用该功能。例如,在我的情况下,使用System i Navigator调用它,但不能使用RPG程序(可能使用用户CCSID,即65535)。
对于后者,我用CHGJOB CCSID(37)
解决了(37代表“COM EUROPE EBCDIC”,任何人都可以choose the proper code page),然后再重新CHGJOB CCSID(65535)
。
另一种类似的方式是CHGUSRPRF USRPRF(MYUSER) CCSID(37)
。没找到更好的东西......
答案 2 :(得分:0)
上面的选择也可以正常工作,除非你试图在RPG中放入一个:INTO主变量,它将通过一个错误。解决方案是将CCSID的chgjob执行到37,然后运行嵌入式SQL,然后将CCSID更改为65535.然后工作正常。如果您需要更多信息或样品,请发送电子邮件至William.Ramos@mohawkind.com获取更多信息。我在RPG世界中使用ENCODE / DECODE函数遇到了这个问题。感谢。
答案 3 :(得分:0)
使用简单的演员,CSSID 37 = CSSID 65535
,
示例:
select cast( campo1 as varchar(500) CCSID 37 ) from biblioteca.tabla
db2 不寻常
答案 4 :(得分:0)
解决方案是将CCSID的CHGUSRPRF执行到37,然后运行嵌入式SQL,然后将CCSID更改为65535.然后正常工作。