шестнадцатеричные значения с CSSID в DB2-400 - PullRequest
0 голосов
/ 22 февраля 2020

У меня есть хранимая процедура, в которой я передаю значение (из CHARACTER (13) с CSSID 65535 и пытаюсь вернуть по нему идентификатор

Процедура:

BEGIN

DECLARE GET_ID_BY_WEB_IDENTIFIER_C1 CURSOR WITH RETURN FOR
SELECT ID FROM TABLE . ITEMT WHERE WEB_IDENTIFIER = P_WEB_IDENTIFIER ;

OPEN GET_ID_BY_WEB_IDENTIFIER_C1 ;
END 

и параметр P_WEB_IDENTIFIER - это CHARACTER (26) с совпадающим cssid. Я также пытался сделать это с символом 13 с такими же результатами.

Когда я вызываю это:

CALL PROGRAM . GET_ID_BY_WEB_IDENTIFIER (x'0213725501A421B9A457123001')

Я получаю свой идентификатор, но когда я звоню так (как он вызывается в производстве через Интернет):

 CALL PROGRAM . GET_ID_BY_WEB_IDENTIFIER ('0213725501A421B9A457123001')

Я получаю ошибку преобразования

Как мне сделать Вы уверены, что передача только строки '0213725501A421B9A457123001' вернет мой идентификатор таким образом?

1 Ответ

0 голосов
/ 22 февраля 2020

Этот x'0213725501A421B9A457123001' является шестнадцатеричным строковым литералом.
С первого взгляда он представляет в основном непечатаемые символы.

'0213725501A421B9A457123001' - это действительная строка.
Это шестнадцатеричный эквивалент для db2: x'F0F2F1F3F7F2F5F5F0F1C1F4F2F1C2F9C1F4F5F7F1F2F3F0F0F1'

Большая разница ...

Ваше веб-приложение должно пройти также как шестнадцатеричный литерал, обязательно определите сохраненный параметр pro c как CCSID 65535 (Binary / no-translation)

При желании вы можете преобразовать строковое значение в шестнадцатеричное (двоичное) значение внутри сохраненный про c. Для этого в ОС есть несколько встроенных функций, например, в RPG, смотрите здесь { ссылка }

...