|
Программирование >> Построение запросов sql
Такой комментарий отделяется от основного текста сценария следующим образом: /* comment text */ - однострочный, который располагается в конце строки кода в скрипте, DDL или DML-запросе, хранимой процедуре, триггере. Отделяется от основного текста сценария следующим образом: -- comment text Однострочный комментарий часто используется для комментирования нежелательных частей утверждений, например в следующем виде: ... WHERE C1 = 9 OR C2 = 99 -- OR C3 = 999 В данном случае часть условия поиска (OR COL3 = 999) закомментирована. При использовании данного вида комментария игнорируется текст до следующей строки. Примечания. 1. Рекомендуется создавать комментарии, используя латинские символы, т.к. извлечение комментариев с кириллицей может вызывать ошибки. 2. Не допускается смешивание однострочного комментария с блочным комментарием. Пример SQL-сценария по созданию учебной базы данных и заполнению ее данными приведен в приложении Б. 6.1.5. Генераторы В PSQL существует очень важный с точки зрения практического использования БД механизм порождения уникальных значений, которые могут применяться, например, для уникальной идентификации строк таблиц -генератор последовательности. Генератор последовательности - это специальный объект БД для получения целочисленных значений, следующих с определенным шагом. В БД Firebird каждый генератор имеет уникальное имя и текущее значение. Для создания генератора используется следующий запрос: CREATE { SEQUENCE GENERATOR } имя генератора;. При выполнении такого запроса происходит два следующих действия: - на специальной странице БД отводится 4 байта для хранения значения генератора; - в системной таблице RDB$GENERATORS заводится запись, куда помещаются <имя генератора> (поле RDB$GENERATOR NAME), его номер (поле RDB$GENERATOR ID) и признак того, что генератор создан пользователем (значение в поле RDB$SYSTEM FLAG равно нулю). Следует отметить, что по стандарту SQL для обозначения генератора последовательности используется синтаксический термин SEQUENCE, в то время как GENERATOR - это синтаксический термин InterBase. Для соответствия SQL-стандарту для работы с генераторами последовательностей рекомендуется использовать именно термин SEQUENCE. По умолчанию генератор создается с текущим значением ноль. Для установки определенного (текущего) значения генератора <целое значение> можно использовать команду следующего формата: SET GENERATOR <имя генератора> TO <целое значение>;. Однако для соответствия SQL-стандарту предпочтительнее использование следующего запроса: ALTER SEQUENCE имя генератора RESTART WITH целое значение;. При этом целое значение - это значение типа BIGINT, которое должно лежать в пределах от -263 до 263-1. Например, генератор с именем ExecutorID, который может использоваться для автоматической генерации очередного значения первичного ключа таблицы Executor учебной БД, можно определить с помощью следующего запроса: CREATE SEQUENCE Executor ID;. Установка начального значения равным 5 для созданного генератора ExecutorID может быть выполнена следующим образом: ALTER SEQUENCE Executor ID RESTART WITH 5;. Создание генератора и установка начального значения могут быть произведены при выполнении описанных выше запросов в SQL-редакторе утилиты IBExpert или при использовании этих запросов в тексте SQL сценария. После создания генератора получение его очередного (следующего) значения производится вызовом функции GEN ID или функции NEXT VALUE FOR. Функция GEN ID имеет следующий формат: GEN ID (имя генератора, шаг), где шаг представляет собой целое значение (если оно равно нулю, то будет получено текущее значение генератора). Формат функции NEXT VALUE FOR имеет следующий вид: NEXT VALUE FOR имя генератора;. Значение шага при использовании данной функции всегда равно 1. Если нет необходимости использовать приращение шага, отличное от 1, рекомендуется пользоваться функцией NEXT VALUE FOR, так как именно она соответствует наиболее позднему стандарту SQL. Приращение значения генератора, не равное 1, может быть задано только через функцию GEN ID. Функции вызова генератора могут использоваться в следующих случаях: - для получения очередного значения генератора и присвоения его локальной переменной в теле триггера или хранимой процедуры; - в списке возвращаемых элементов запроса SELECT; - при добавлении и изменении строк (INSERT- и UPDATE-запросы DML). Например, для созданного генератора Executor ID получение очередного значения и присвоение его локальной переменной ExecutorNumber (в теле триггера или хранимой процедуры) имеют следующий вид: Executor Number = GEN ID(Executor ID, 1);. Функции получения значения генератора могут использоваться в списке возвращаемых элементов запроса SELECT. В таком случае в предложении FROM запроса SELECT указывается системная таблица Firebird RDB$DATABASE, которая всегда содержит только одну строку со служебной информацией о базе данных. Данная таблица используется для запросов, которые возвращают одно вычисляемое значение или контекстную переменную [18]. Например, для получения текущего значения генератора ExecutorID в списке возвращаемых элементов запроса SELECT можно использовать следующий запрос: SELECT GEN ID (Executor ID,0) FROM RDB$DATABASE;. Результат выполнения этого запроса представлен на рис. 6.1. GEN ID Рис. 6.1. Результат получения текущего значения генератора Для получения следующего значения созданного генератора Executor ID с помощью функции NEXT VALUE FOR нужно выполнить следующий запрос: SELECT NEXT VALUE FOR Executor ID FROM RDB$DATABASE;. В результате выполнения этого запроса будет выдано значение, равное 6. Примером использования генератора последовательности в DML-запросе на вставку строки может служить следующий запрос: INSERT INTO Executor VALUES (NEXT VALUE FOR Executor ID, Иванов А.А.);. Следует отметить, что вызов функции вида GEN ID (<имя генератора>, 0) никогда не должен использоваться в запросах DML на добавление или изменение данных. Созданный и неиспользуемый генератор можно удалить путем выполнения следующего запроса: DROP { SEQUENCE GENERATOR } имя генератора;. 6.1.6. Исключительные ситуации Исключительные ситуации (exception) - это сообщения, которые генерируются, когда появляется ошибка в теле хранимой процедуры или триггера. В СУБД Firebird существуют предварительно определенные исключения с ассоциированными с ними текстами сообщений. Такие сообщения выдаются пользователю, например, при попытке удалить объект, который находится в использовании, при попытке вставить некорректные данные в столбец, на который наложено ограничение, и т. д. Но, кроме этого, существует возможность создания пользовательских исключений.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |