Получение нулевого значения в текстовом столбце хранимой процедуры

#db2

#db2

Вопрос:

Ниже приведен запрос, который я использую для получения определения SP, но в TEXT column я получаю как NULL значение в IBM DATA Studio , но я могу CALL использовать SP.

 SELECT PROCNAME, TEXT FROM SYSCAT.PROCEDURES WHERE PROCNAME LIKE '%USP_ABC%'
 

Пожалуйста, помогите

Комментарии:

1. Хранимая процедура может не быть SQL. Что находится в ЯЗЫКОВОЙ колонке ? Кроме того, ТЕКСТОВЫЙ столбец является CLOB , поэтому инструмент , который вы используете для отправки SQL, должен иметь возможность отображать их — если вы сомневаетесь, используйте SUBSTR(TEXT, 1, 1024), например, для извлечения из clob.

2. ЯЗЫК — только SQL, и для других SP я могу видеть ТЕКСТОВОЕ значение, за исключением USP_ABC, это может быть из-за длины. Но, используя SUBSTR(TEXT, 1, 1024), я получил часть подстроки SP

3. вы могли бы использовать db2look для сброса DDL хранимых процедур или просто просмотреть в Data Studio и сгенерировать DDL оттуда.

Ответ №1:

Вы подтвердили, что syscat.procedures.язык — SQL, и что ваш инструмент запроса способен отображать substr() текста.

Обходной путь зависит от длины (текста) интересующей строки:

 SELECT PROCNAME, substr(TEXT,1, 1024) FROM SYSCAT.PROCEDURES WHERE PROCNAME LIKE '%USP_ABC%'
 

Возможно, вам потребуется настроить длину извлечения substr в зависимости от длины текста и вашей конфигурации. Например, substr(TEXT, 1, 2048 ) или более высокое значение длины по мере необходимости, с которым может справиться ваш инструмент запроса.

Вы можете найти длину текстового столбца с ДЛИНОЙ (ТЕКСТОМ) для интересующей строки.

Вы также можете ПРЕОБРАЗОВАТЬ CLOB в char или varchar до длины, которая соответствует их пределам и любым имеющимся у вас ограничениям инструмента запроса. Другой вариант — использовать другой инструмент запроса, который может работать с CLOB.

Комментарии:

1. Но это не дает полного кода SP

2. Я пробовал SUBSTR(ТЕКСТ, 17,1024) до начальной точки 17, он работает, после этого SUBSTR(ТЕКСТ, 18,1024) не работает

3. substr(text, 1, 1040) работает, когда я увеличиваю значение длины 1041, оно не работает

Ответ №2:

Используете ли вы последнюю версию Data Studio с последним исправлением? Похоже, у вас может быть недопустимый символ UTF-8 в вашем SP, или, поскольку вы используете SUBSTR и SUBSTRING, вы разбиваете многобайтовый символ на два.

Вы могли бы попробовать установить

 -Ddb2.jcc.charsetDecoderEncoder=3 
 

в вашем eclipse.ini, чтобы заставить Java использовать символ замены, а не заменять недопустимую строку на nul

Смотрите эту техническую заметку

https://www-01.ibm.com/support/docview.wss?uid=swg21684365

В противном случае поднимите это с помощью IBM Support