Пользовательская Java-функция SQL (преобразование символов между CCSID 65535 и CCSID 1200 недопустимо) - PullRequest
2 голосов
/ 03 октября 2011

У меня возникла проблема с функцией 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 (программы с открытым исходным кодом SQL, которая использует ODBC) это работает.

Ответы [ 5 ]

2 голосов
/ 03 октября 2011

CCSID 65535 означает «нет перевода символов» ... поэтому, если ваша таблица создана с определенным CCSID, я бы предложил запустить приложение с этим CCSID.

1 голос
/ 14 марта 2012

У меня была такая же проблема. Я обнаружил, что это не касается параметров функции (у меня были целые числа).

Дело в том, как вы вызываете функцию . Например, в моем случае вызов с помощью System i Navigator работал, но не с помощью программы RPG (которая, вероятно, использует CCSID пользователя, то есть 65535).

Для последнего я решил с помощью CHGJOB CCSID(37) (37 для "COM EUROPE EBCDIC", любой может выбрать правильную кодовую страницу ) и затем снова ввести CHGJOB CCSID(65535).

Другой похожий способ - CHGUSRPRF USRPRF(MYUSER) CCSID(37). Ничего лучшего не нашел ...

0 голосов
/ 28 декабря 2015

Решение - сделать CHGUSRPRF с CCSID для 37, затем запустить встроенный SQL, затем изменить CCSID задания на 65535. Тогда все работает нормально.

0 голосов
/ 17 сентября 2014

использовать простое приведение, где CSSID 37 = CSSID 65535,

Пример:

select cast( campo1 as varchar(500) CCSID 37 ) from biblioteca.tabla

db2 необычно

0 голосов
/ 29 мая 2014

Вышеприведенный выбор тоже работает нормально, за исключением того, что если вы попытаетесь вставить переменную хоста: INTO в RPG, это приведет к ошибке.Решение - сделать chgjob с CCSID до 37, затем запустить встроенный SQL, а затем изменить CCSID обратно на 65535. Тогда все работает нормально.Если вам нужна дополнительная информация или образцы, отправьте мне электронное письмо на William.Ramos@mohawkind.com для получения дополнительной информации.Я столкнулся с этой проблемой, используя функции ENCODE / DECODE в мире RPG.Спасибо.

...