|
Программирование >> Построение запросов sql
<тип переменной> :: = {<тип цанных> имя цомена TYPE OF имя цомена}. Следует обратить внимание на то, что для каждой переменной используется свой оператор DECLARE VARIABLE, который заканчивается точкой с запятой. Правило составления имен локальных переменных такое же, как и для любых других идентификаторов языка SQL (см. п. 2.7). В качестве типа данных можно указывать один из системных типов (см. п. 2.9), ранее созданный домен или конструкцию TYPE OF <имя цомена>, которая извлекает только тип из существующего домена (т.е. ограничения и значения по умолчанию, определенные для данного домена, не учитываются). Например, чтобы объявить переменную x целого типа, необходимо использовать следующий оператор: DECLARE VARIABLE x INTEGER;. Объявить переменную y на домене BOOLEAN можно следующим образом: DECLARE VARIABLE y BOOLEAN;. Все локальные переменные должны быть объявлены до первого выполняемого блока триггера (процедуры). Объявленным переменным в дальнейшем могут присваиваться различные значения с помощью оператора присваивания, имеющего следующий синтаксис: имя локальной переменной = <выражение>;. Переменным должны присваиваться значения того типа данных, с каким они были объявлены. Допускается при объявлении локальной переменной сразу же ее инициализировать, например следующим образом: DECLARE VARIABLE x INTEGER = 123; или DECLARE VARIABLE x INTEGER DEFAULT 123;. СУБД делает доступным множество переменных, поддерживаемых в контексте текущего соединения клиента и его деятельности. Эти контекстные переменные доступны для использования в PSQL. Большинство контекстных переменных процедурного языка используются только в триггерах. Существует только одна контекстная переменная PSQL, которую можно использовать как в триггерах, так и в ХП. Это переменная ROWCOUNT, возвращающая количество строк, полученных выполненным запросом DML или SELECT. В триггерах для реализации отслеживания целостности данных используются контекстные переменные ОЮ.столбец и NEW.столбец. Эти переменные хранят старые и новые значения указанного столбца таблицы, когда выполняется запрос на модификацию данных. Также в триггерах могут использоваться логические контекстные переменные UPDATING, INSERTING и DELETING для задания определенных действий в зависимости от типа события DML, для которого срабатывает триггер. Входные параметры недоступны для использования в триггерах. Они используются для передачи значений хранимым процедурам из клиентских приложений или других хранимых процедур. Выходные параметры также недоступны для использования в триггерах. Они используются для возвращения значений из ХП вызвавшим их объектам. Говоря о переменных процедурного языка, следует особо отметить то, что в запросах SQL локальные переменные, входные и выходные параметры должны использоваться с двоеточием перед именем переменной, чтобы указать, что это переменные, а не имена столбцов таблиц. В остальных случаях (например, при присваивании значения переменной, в логических условиях условных операторов) не требуется наличия двоеточия перед именем переменной. Двоеточие перед контекстными переменными не ставится никогда. Примеры практического использования всех четырех типов переменных в модулях на PSQL приведены при изучении ХП и триггеров. 6.1.2. Условные операторы При программировании на PSQL существует возможность использовать следующие типы условных структур: - ветвление, управляемое оператором IF THENELSE; - циклическое выполнение группы операторов, пока условие WHILE не станет ложным. 6.1.2.1. Оператор ветвления IF Оператор ветвления IF имеет следующий формат: IF (логическое условие) THEN <группа операторов1> ELSE <группа операторов2>], где логическое условие - любой предикат, который должен быть истинным, чтобы выполнилась <группа операторов>, следующая за THEN; <группа операторов> { <блок операторов> DML оператор оператор процедурного языка FireЫrd }; <блок операторов> BEGIN <группа операторов> END. Блок операторов - это группа операторов SQL, рассматриваемых как единое целое. Блок операторов начинается с зарезервированного слова BEGIN и заканчивается зарезервированным словом END. При этом блок операторов может содержать вложенный блок операторов, заключенный в операторные скобки BEGIN END, и т.д. Для вложенных блоков после зарезервированного слова END разделительная точка с запятой не ставится. Следует отметить, что между BEGINEND может не быть ни одного оператора, т.е. допустим пустой блок операторов. Следует отметить, что если <группа операторов> представляет собой один единственный 0М1 оператор или оператор процецурного языка FireЫrd, то заключать данный оператор в скобки BEGIN END не обязательно. Следующий фрагмент кода иллюстрирует использование оператора IF в теле ХП в предположении, что Street Cod, House Nom, Flat Nom были ранее объявлены как локальные переменные или входные параметры, а Line - как локальная переменная или выходной параметр: IF (House Nom IS NOT NULL AND Flat Nom IS NOT NULL) THEN Line = Код улицы - Street Cod , д. House Nom , кв. Flat Nom; ELSE Line = Street Cod; Как следует из примера, в конце каждого оператора ставится точка с запятой, в том числе и перед ELSE. 6.1.2.2. Оператор WHILE Для организации цикла с предусловием можно использовать оператор WHILE, который имеет следующий формат: WHILE (логическое условие) DO <группа операторов>. Следующий фрагмент кода иллюстрирует использование в ХП оператора WHILE в предположении, что Digit и Result были ранее объявлены как локальные перменные или параметры: Result = CAST (Digit as VARCHAR(8)); WHILE (CHAR LENGTH(Result)<8) DO Result = 0 Result; В этом фрагменте переданное целое число (Digit) преобразовывается в строку из 8 символов (Result), а затем дополняется нулями слева до получения нужного количества символов. 6.1.3. Курсоры в PSQL При написании хранимых процедур и триггеров очень часто возникает необходимость выбрать информацию из БД перед выполнением каких-либо
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |