SQL для начинающих



       

Информационная область диагностики



Таблица 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.

Содержание раздела