#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