Информационная область диагностики
Таблица 20.2. Информационная область диагностики
Элемент | Тип данных |
CONDITION_NUMBER (номер состояния) | Точный числовой, масштаб 0 |
RETURNED_SQLSTATE (значение SQLSTATE) | Символьная строка, 6 символов |
MESSAGE_TEXT (текст сообщения) | Символьная строка переменного размера, не менее 128 символов |
MESSAGE_LENGTH (длина сообщения) | Точный числовой, масштаб 0 |
MESSAGE OCTET LENGTH (длина сообщения в октетах) | Точный числовой, масштаб 0 |
CLASS_ORIGIN (источник класса) | Символьная строка переменного размера, не менее 128 символов |
SUBCLASS_ORIGIN (источник подкласса) | Символьная строка переменного размера, не менее 128 символов |
CONNECTION_NAME (имя соединения) | Символьная строка переменного размера, не менее 128 символов |
SERVER_NAME (имя сервера) | Символьная строка переменного размера, не менее 128 символов |
CONTRAINT_CATALOG (каталог ограничения) | Символьная строка переменного размера, не менее 128 символов |
CONTRAINT_SCHEMA (схема ограничения) | Символьная строка переменного размера, не менее 128 символов |
CONSTRAINT_NAME (имя ограничения) | Символьная строка переменного размера, не менее 128 символов |
ENVIRONMENT_NAME (имя среды) | Символьная строка переменного размера, не менее 128 символов |
CATALOG_NAME (имя каталога) | Символьная строка переменного размера, не менее 128 символов |
SCHEMA_NAME (имя схемы) | Символьная строка переменного размера, не менее 128 символов |
TABLE_NAME (имя таблицы) | Символьная строка переменного размера, не менее 128 символов |
COLUMN_NAME (имя столбца) | Символьная строка переменного размера, не менее 128 символов |
CURSOR_NAME (имя курсора) | Символьная строка переменного размера, не менее 128 символов |
CONDITION_IDENTIFIER (идентификатор состояния) | Символьная строка переменного размера, не менее 128 символов |
PARAMETR_NAME (имя параметра) | Символьная строка переменного размера, не менее 128 символов |
ROUTINE_CATALOG (каталог программы) | Символьная строка переменного размера, не менее 128 символов |
ROUTINE_SCHEMA (схема программы) | Символьная строка переменного размера, не менее 128 символов |
ROUTINE_NAME (имя программы) | Символьная строка переменного размера, не менее 128 символов |
SPECIFIC_NAME (специфическое имя) | Символьная строка переменного размера, не менее 128 символов |
TRIGGER_CATALOG (каталог триггера) | Символьная строка переменного размера, не менее 128 символов |
TRIGGER_SCHEMA (схема триггера) | Символьная строка переменного размера, не менее 128 символов |
TRIGGER_NAME (имя триггера) | Символьная строка переменного размера, не менее 128 символов |
В элементе CONDITION_NUMBER содержится порядковый номер информационной области. Если оператор создает пять элементов состояния, которые заполняют пять информационных областей, то значение CONDITION_NUMBER для пятой такой области будет равно пяти. Чтобы получить доступ к конкретной информационной области, используйте оператор GET DIAGNOSTICS (получить диагностику) вместе с требуемым значением CONDITTONJSrUMBER. (Об операторе GET DIAGNOSTICS рассказывается ниже, в разделе "Что означает информация, возвращаемая SQLSTATE".) А в элементе RETURNED_SQLSTATE находится значение SQLSTATE, соответствующее данным этой информационной области.
Элемент CLASS_ORIGIN сообщает, откуда взято значение для кода класса, возвращаемое в параметре SQLSTATE. Если значение определено стандартом SQL, то элемент CLASS_ORIGIN равен TSO 9075'. А если оно определено реализацией СУБД, то в элементе CLASS_ORIGIN находится строка, в которой указана СУБД-источник. Элемент SUBCLASS_ORIGIN, в свою очередь, сообщает источник значения для кода подкласса, которое возвращено в параметре SQLSTATE.
Значение, находящееся в элементе CLASS_ORIGIN, является достаточно важным. Значение SQLSTATE, равное, например, '22012', относится к стандартным значениям этого параметра. Поэтому вам известно, что оно означает одно и то же во всех реализациях SQL. Однако если значение SQLSTATE равно '22500', первые два символа находятся в стандартном диапазоне и указывают на исключительную ситуацию, связанную с отсутствием данных, а последние три символа уже находятся в диапазоне, определяемом реализацией. Ну а если значение SQLSTATE равно '90001', то это значение полностью находится в диапазоне, определяемом реализацией. Одни и те же значения SQLSTATE, находящиеся в таком диапазоне, могут в разных реализациях означать совершенно различные понятия.
А где же найти описание '22500' или '90001' Для этого надо взглянуть в документацию пользователя СУБД. А какой именно СУБД? Ведь с помощью оператора CONNECT можно соединиться сразу с несколькими. Чтобы узнать, какой из них является источником ошибки, взгляните на элементы CLASS_ORIGIN и SUBCLASS_ORIGIN. В них находятся значения, которые определяют каждое приложение. Проверяя эти значения, можно определить, к какой СУБД относятся значения SQLSTATE. Значения, находящиеся в элементах CLASS_ORIGIN и SUBCLASS_ORIGIN, также определяются реализацией, но обычно содержат название компании-разработчика СУБД.
Если ошибка является нарушением ограничения, это ограничение можно определить с помощью элементов CONSTRAINT_CATALOG, CONSTRAINT_SCHEMA и CONSTRAINT_NAME.