Конструкция SELECT ... INTO
Конструкция SELECT ... INTO
Конструкция SELECT ... INTO обычна для PSQL. Когда из таблицы запрашиваются значения, предложение INTO позволяет сохранить их в переменных - в локальных переменных или в выходных аргументах. В этой процедуре нет выходных параметров. Мы используем переменную ANY SALES, которую мы объявили и инициализировали в начале тела процедуры для хранения счетчика записей продаж. Обратите внимание на префикс двоеточия (:) у переменной ANY_SALES. Мы рассмотрим это, когда процедура будет готова.
SELECT count(po_number) FROM sales
WHERE sales_rep = :emp_num
INTO :any_sales;
IF (any_sales > 0) THEN
EXCEPTION reassign_sales;
В случае если такие записи заказов будут найдены, процедура аккуратно завершается на операторе EXCEPTION, который при отсутствии обработчика исключений передает выполнение прямо на самый последний оператор END процедуры. В этих условиях процедура завершается, а сообщение об исключении передается вызвавшей программе[115].
Если нет исключения, выполнение продолжается. Затем процедура должна выполнить небольшую работу по изменению некоторых позиций вакантной должности (NULL), если она сохраняется для нашего служащего, удалить служащего из проектов и удалить его (или ее) историю продаж. Под конец удаляется сама запись служащего.
UPDATE department
SET mngr_no = NULL
WHERE mngr_no = :emp_num;
UPDATE project
SET team_leader = NULL
WHERE team_leader = :emp_num;
DELETE FROM employee_project
WHERE emp_no = :emp_num;
DELETE FROM salary_history
WHERE errp_no = :emp_num;
DELETE FROM employee
WHERE errp_no = :emp_num;
Работа сделана, служащий ушел. Необязательный оператор EXIT может быть включен в текст с целью документирования. Он может быть весьма полезным, если вы просматриваете скрипты, содержащие множество определений процедур, а эти процедуры имеют много вложенных блоков BEGIN ... END:
EXIT;
END ^ COMMIT ^
Префикс двоеточия (:) для переменных
В этой процедуре мы заметили два различных способа использования префикса двоеточия в переменных.
* Раньше применялось обращение к локальной переменной -.ANY SALES, когда она использовалась в предложении INTO для помещения элемента данных, возвращаемого оператором SELECT.
* В более поздних операторах она использовалась с другими целями. Синтаксис PSQL требует наличия префикса двоеточия для любой переменной или аргумента, когда они используются в операторе DSQL.
Эти два способа использования префикса двоеточия являются постоянными в PSQL. Если вы забыли, где их нужно применять, или используете их там, где PSQL не требует, то ваша процедура не будет компилироваться, а синтаксический анализатор вызовет исключение. Хуже, если переменная с тем же именем, что и столбец таблицы, используется в операторе SQL без двоеточия. Сервер считает, что это ссылка на столбец, выполняет оператор и вызывает исключение. Нечего и говорить, что результат такой операции будет непредсказуемым.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
3. Оригинальная конструкция инфопродукта
3. Оригинальная конструкция инфопродукта Можно сделать оригинальный инфопродукт по конструкции. Например, в вашей нише все делают исключительно аудио– или видеокурсы. А вы сделайте, например, интеллект-карты, коучинговую программу, месячный тренинг. Найдите другой
R.16.3.4 Область видимости макроимен и конструкция #undef
R.16.3.4 Область видимости макроимен и конструкция #undef После появления макроопределения идентификатор из него считается определенным и остается в текущей области видимости (независимо от правил областей видимости в С++) до конца единицы трансляции или пока его определение
20.3.5. Конструкция системы управления задачами была плохо реализована
20.3.5. Конструкция системы управления задачами была плохо реализована Не считая возможности приостанавливать процессы (что само по себе является тривиальным дополнением к планировщику, который мог бы быть сделан довольно безопасно), управление задачами предусмотрено
Конструкция for-do
Конструкция for-do Синтаксис конструкции for-do для цикла с увеличением значения счетчика:for идентификатор_счетчика := начальное_значение to конечное_эначение do блок_кода;Синтаксис конструкции for-do для цикла с уменьшением значения счетчика:for идентификатор_счетчика :=
Конструкция while-do
Конструкция while-do Синтаксис конструкции while-do: while выражение do блок_кода;Выход из цикла while-do происходит в том случае, если выражение, расположенное между ключевыми словами while и do, дает значение False. Цикл может не выполниться ни одного
Конструкция repeat-until
Конструкция repeat-until Синтаксис конструкции repeat-until: repeat блок_кода until выражение;Выход из цикла repeat-until происходит в том случае, если выражение, расположенное после ключевого слова until, дает значение
Совет 42. Следите за тем, чтобы конструкция less<T> означала operator<
Совет 42. Следите за тем, чтобы конструкция less<T> означала operator< Допустим, объект класса Widget обладает атрибутами weight и maxSpeed:class Widget { public:size_t weight() const;size_t maxSpeed() const;}Будем считать, что естественная сортировка объектов Widget осуществляется по атрибуту weight, что отражено в
Множественный выбор: конструкция else-if
Множественный выбор: конструкция else-if Часто нам приходится осуществлять выбор более, чем из двух вариантов. Чтобы учесть это, мы можем расширить структуру if-else конструкцией else-if. Рассмотрим конкретный пример. Расценки, назначаемые за коммунальные услуги некоторыми
Витая конструкция
Витая конструкция Методы создания резных изделий из дерева разнообразны. Сейчас мы рассмотрим еще один метод, который позволяет создавать витые конструкции, наподобие той, что вы видели в комнате для курения кальянов в главе 5.На этот раз витая конструкция будет
Конструкция FOR SELECT ... DO
Конструкция FOR SELECT ... DO Для поиска множества строк в процедуре мы используем конструкцию FOR SELECT ... DO. Ее синтаксис:FOR<выражение-выбора>INTO <:переменная [, :переменная [, ...]] DO<составной-оператор>;<выражение-выбора> может быть любым запросом выбора, использующим
Базисная конструкция
Базисная конструкция Простота типизации в ОО-подходе есть следствие простоты объектной вычислительной модели. Опуская детали, можно сказать, что при выполнении ОО-системы происходят события только одного рода - вызов компонента (feature call):x.f (arg)означающий выполнение
Конструкция flash-диска USB
Конструкция flash-диска USB Несмотря на разнообразие корпусов, все flash-диски USB устроены одинаково. Половинки корпуса часто соединены защелками и обычно легко разбираются. Исключение составляют водонепроницаемые или ультрамодные корпуса – для их вскрытия иногда приходится
Виды и конструкция карт памяти
Виды и конструкция карт памяти Многие компании время от времени предлагали пользователям разные конструкции карт памяти. За редкими исключениями все они несовместимы между собой по числу и расположению контактов и электрическим характеристикам. Flash-карты бывают двух
FANатичная конструкция: Как из корпуса сделать конфетку
FANатичная конструкция: Как из корпуса сделать конфетку Автор: Филипп КазаковНесколько месяцев назад я созрел-таки для серьезного мероприятия - замены корпуса компьютера. Как часто бывает, немедленной реализации задумки воспрепятствовала масса объективных