Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначенные для поддерживания проводов на необходимой высоте над землей, водой...
Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...
Топ:
Характеристика АТП и сварочно-жестяницкого участка: Транспорт в настоящее время является одной из важнейших отраслей народного хозяйства...
Комплексной системы оценки состояния охраны труда на производственном объекте (КСОТ-П): Цели и задачи Комплексной системы оценки состояния охраны труда и определению факторов рисков по охране труда...
Интересное:
Мероприятия для защиты от морозного пучения грунтов: Инженерная защита от морозного (криогенного) пучения грунтов необходима для легких малоэтажных зданий и других сооружений...
Аура как энергетическое поле: многослойную ауру человека можно представить себе подобным...
Что нужно делать при лейкемии: Прежде всего, необходимо выяснить, не страдаете ли вы каким-либо душевным недугом...
Дисциплины:
|
из
5.00
|
Заказать работу |
Содержание книги
Поиск на нашем сайте
|
|
|
|
В главе 14 мы изучали оператор SET TRANSACTION (задать транзакцию). В нем можно указать DIAGNOSTICS SIZE (размер диагностики). Этот размер является количеством информационных областей, выделяемых для хранения информации о состоянии. Если в операторе SET TRANSACTION не будет предложения DIAGNOSTICS SIZE, то СУБД выделит количество информационных областей, которое в ней установлено по умолчанию.
Заголовок области состоит из восьми элементов, которые приведены в табл. 20.1.
Таблица 20.1. Область заголовка диагностики.
| Поля | Тип данных |
| number (количество) | Точный числовой, масштаб 0 |
| row_count (количество строк) | Точный числовой, масштаб 0 |
| command_functton (командная функция) | Символьная строка переменного размера, не менее 128 символов |
| command_function_code (код командной функции) | Точный числовой, масштаб 0 |
| more (больше) | Символьная строка, длина 1 |
| transact ions_commited (фиксированные транзакции) | Точный числовой, масштаб 0 |
| transactions_rolled_back (откатанные транзакции) | Точный числовой, масштаб 0 |
| transactions_active (состояние транзакции) | Точный числовой, масштаб 0 |
Ниже эти элементы описаны более детально.
· В поле NUMBER хранится количество областей, заполненных диагностической информацией о текущей операции.
· В поле ROW_COUNT содержится количество строк, задействованных при выполнении оператора SQL INSERT, UPDATE или DELETE.
· Поле COMMAND_FUNCTION описывает только что выполненный динамический оператор SQL (если последний выполненный оператор SQL действительно был динамическим).
· Поле COMMAND_FUNCTION_CODE отображает номер кода для только что выполненного динамического оператора SQL (если последний выполненный оператор SQL действительно был динамическим). Каждая динамическая функция имеет соответствующий код.
· Поле MORE содержит одно из значений: 'Y' (да) или 'N' (нет). Значение 'Y' указывает на то, что записей состояния больше, чем может вместить область диагностики. Значение 'N' означает, что все сгенерированные записи состояния представлены в области диагностики. Вы можете получить необходимое количество записей, увеличив его, используя оператор SET TRANSACTIONS, однако эта возможность зависит от используемой вами реализации.
· Поле TRANSACTIONS_COMMITED содержит количество совершенных транзакций.
· Поле TRANSACTIONS_ROLLED_BACK содержит количество транзакций, которые были откатаны.
· Поле TRANSACTIONS_ACTIVE содержит значение 'Г, если транзакция в настоящее время активна, и значение '0' в противном случае. Транзакция считается допустимой для активизации, если открыт курсор или СУБД находится в ожидании отложенного параметра.
· Информационная область диагностики
· В информационных областях хранятся данные по каждой отдельной ошибке, предупреждению или состоянию успешного завершения. Каждая информационная область (табл. 20.2) состоит из 26 элементов.
· Таблица 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.
Пример нарушения ограничения
Из всей информации, предоставляемой оператором GET DIAGNOSTICS, самой важной является информация о нарушении ограничения. Рассмотрим пример. Создана таблица EMPLOYEE (сотрудник) со столбцами ID (идентификатор) и Salary (зарплата):
CREATE TABLE EMPLOYEE(ID CHAR(5) CONSTRAINT EmpPK PRIMARY KEY,Salary DEC(8.2) CONSTRAINT EmpSal CHECK Salary > 0,Dept CHAR(5) CONSTAINT EmpDeptREFERENCES DEPARTMENT);Кроме того, имеется таблица DEPARTMENT (отдел) со столбцами DeptNo (номер отдела) и Budget (бюджет):
CREATE TABLE DEPARTMENT(DeptNo CHAR(5),Budget DEC(12.2) CONSTRAINT DeptBudgetCHECK(Budget >= SELECT SUM(Salary) FROM EMPLOYEEWHERE EMPLOYEE.Dept=DEPARTMENT.DeptNo),…);А теперь посмотрите на следующий оператор INSERT:
INSERT INTO EMPLOYEE VALUES(:ID_VAR,:SAL__VAR,:DEPT_VAR);Предположим, что вы получили значение SQLSTATE, равное '23000'. Посмотрев в документацию по SQL, вы видите, что этому значению соответствует описание "нарушение ограничения целостности". Это означает, что имеет место одна из следующих ситуаций.
· Значение IDJVAR повторяет уже существующее значение ID, т.е. нарушено ограничение PRIMARY KEY.
· Значение SALJVAR отрицательное – иначе говоря, нарушено ограничение CHECK на столбце Salary.
· Значение DEPT_VAR не является правильным ключом, соответствующим какой-либо из строк таблицы DEPARTMENT, так что нарушено ограничение REFERENCES в столбце Dept.
· Значение SAL_VAR настолько большое, что у сотрудников, работающих в отделе, для которого вводятся новые данные, сумма окладов превышает значение Budget для этого отдела. На этот раз имеется нарушение ограничения CHECK в столбце Budget таблицы DEPARTMENT. (Вспомните, что при изменении базы данных должны проверяться все связанные с ним ограничения, а не только те, которые определены в изменяемых таблицах.)
Обычно, чтобы узнать причины невыполнения оператора INSERT, приходится проводить большое количество тестов. Но на этот раз все, что нужно, можно узнать с помощью команды GET DIAGNOSTICS:
DECLARE ConstNameVar CHAR(18);GET DIAGNOSTICS EXCEPTION 1ConstNameVar = CONSTRAINT_NAME;И если значение SQLSTATE равно '23000', то этот оператор GET DIAGNOSTICS присваивает переменной ConstNameVar одно из следующих значений: 'EmpPK', 'EmpSal', 'EmpDept' или 'DeptBudget'. Обратите внимание, для того, чтобы однозначно определить ограничение CONSTRAINT_NAME, еще могут понадобиться значения элементов CONSTRAINT_SCHEMA и CONSTRAINT_CATALOG.
|
|
|
Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...
Папиллярные узоры пальцев рук - маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни...
Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...
Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначенные для поддерживания проводов на необходимой высоте над землей, водой...
© cyberpediasu.com 2017-2026 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!