Как получить описательные сообщения об ошибках от DB2?

Когда я называю SQL-оператор через JDBC на DB2 и сбоях оператора, я ловлю SQLException со следующим текстом сообщения:

com.ibm.db2.jcc.a.nn: DB2 SQL Error: SQLCODE=-206, SQLSTATE=42703,
    SQLERRMC=O.METADATENSATZ, DRIVER=3.52.95

Я попробовал автоматический перевод сообщения согласно ошибочному списку, опубликованному IBM, но существуют заполнители в сообщениях, ссылающихся на другие элементы исключения.

При поиске этих элементов в исключении я нашел DB2ExceptionFormatter и попробованный для использования его для доступа к недостающим элементам.

Но здесь я остановился, потому что DB2ExceptionFormatter дал мне ключ к разгадке:

Ошибка произошла при попытке получить текст сообщения из сервера. Только маркеры сообщения доступны.

Таким образом, мой вопрос: Что я должен настроить для получения корректных сообщений от сервера DB2?

Если бы я могу получить человекочитаемое сообщение от сервера, я мог бы использовать его непосредственно и не должен был бы переводить его один.

7
задан tangens 27 April 2010 в 09:41
поделиться

2 ответа

Я не уверен, какое сообщение вы видите выше (это похоже на iSeries?), Но вам лучше перейти к справочнику сообщений DB2 по здесь .

Поиск SQL0206 дает нам эту страницу со следующей информацией:

имя недопустимо в контексте, в котором оно используется.

SQLERRMC - это «O.METADATENSATZ», поэтому я бы понял, что это означает, что вы отправили оператор SQL в DB2, и он сообщает, что «O.METADATENSATZ» недействителен ... либо столбец не существует, либо таблица «О» не существует.

Как указано в ссылке на сообщение , если вы хотите автоматически переводить сообщения об ошибках DB2:

Чтобы вызвать справку по сообщениям, откройте процессор командной строки и введите:

? XXXnnnnn

, где XXX представляет действительный префикс сообщения, а nnnnn представляет действительный номер сообщения.

Текст сообщения, связанный с заданным значением SQLSTATE, можно получить, введя:

? ннннн

или

? nn

, где nnnnn - это пятизначный SQLSTATE (буквенно-цифровой), а nn - двузначный код класса SQLSTATE (первые две цифры значения SQLSTATE).

В вашем случае, если ввести «? SQL0206» в DB2 CLP, вы получите сообщение об ошибке.

6
ответ дан 7 December 2019 в 03:13
поделиться

Я нашел подсказку здесь :

retrieveMessagesFromServerOnGetMessage:

Указывает, вызывают ли вызовы JDBC SQLException.getMessage драйвер IBM DB2 чтобы JDBC и SQLJ вызывали хранимую процедуру DB2 for z / OS, которая извлекает текст сообщения об ошибке. Тип данных этого свойства - логический. По умолчанию установлено значение false, что означает, что полный текст сообщения не возвращается клиенту.


Я пробовал это, но результат sqlException.getMessage () изменился только на

O.METADATENSATZ

без какого-либо окружающего текста сообщения.


Я нашел это :

Прежде чем вы сможете использовать определенные функции драйвера IBM® Data Server для JDBC и SQLJ в подсистеме DB2® for z / OS®, вам необходимо установить набор хранимых процедур и создать набор таблиц.

...

WLM должен быть установлен в системе z / OS.

WLM - это диспетчер рабочих нагрузок DB2 , который недоступен для редакции DB2 Express, которую я использую для разработки: - (

3
ответ дан 7 December 2019 в 03:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: