SQL用户定义的Java函数(CCSID 65535和CCSID 1200之间的字符转换无效)

时间:2011-10-03 06:11:10

标签: sql ibm-midrange

我遇到了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程序)可以工作。

5 个答案:

答案 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.然后正常工作。