Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
БД Подготовка к ГАЭ.docx
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
1.79 Mб
Скачать

Хранимые процедуры и триггеры

Хранимые процедуры и триггеры В архитектуре современных систем обработки данных неуклонно возрастает роль серверных СУБД. Дореляционные СУБД отвечали главным образом за доступ к данным и их хранение, предоставляя приложениям возможность перемещаться по базе данных как им угодно, а также сортировать, отбирать и обрабатывать информа­цию. Однако с появлением реляционных СУБД и SQL ситуация коренным образом изменилась Операции поиска и сортировки стали командами языка SQL, выполняе­мыми исключительно самой СУБД, и ею же производится вычисление итоговых данных. Теперь явная навигация по базе данных больше не нужна. Последующие расширения SQL, такие как первичные и внешние ключи, ограничения на значения, продолжают эту тенденцию, вытесняя функции проверки данных и обеспечения целостности базы данных, которые раньше были неотъемлемой частью клиентских приложений. А конечная цель этой тенденции проста: чем больше ответственности берет на себя серверная СУБД, тем более эффективной и надежной становится система в целом благодаря централизованному управлению базой данных и снижению вероятности разрушения данных из-за ошибок в клиентских приложениях

Во многих распространенных диалектах SPL для создания хранимой процедуры применяется инструкция create procedure. Эта инструкция назначает новой процедуре имя, по которому в дальнейшем процедуру можно будет вызывать. Имя процедуры должно соответствовать общим правилам для идентификаторов SQL (процедура на рис. 20.1 названа add_cust). Хранимая процедура может принимать ноль или более параметров (в нашем примере их шесть: c_name, с_шм, cred__lim, tgt_sls, C_rep и c_Offc). Обычно значения параметров указываются в виде разде­ленного запятыми списка, заключенного в скобки и следующего за именем вызывае­мой процедуры. Заголовок хранимой процедуры содержит имена параметров и типы их данных. Для параметров хранимых процедур могут использоваться те же типы данных, которые поддерживаются в СУБД для столбцов таблиц. Все параметры процедуры являются входными, о чем говорят ключе­вые слова in, следующие за их именами в заголовке процедуры (сказанное относится к диалекту PL/SQL в Oracle). Когда процедура вызывается, переданные ей аргументы присваиваются ее параметрам и начинается выполнение тела процедуры. Имена параметров могут использоваться в теле процедуры (и, в частности, в составляющих ее стандартных инструкциях SQL) везде, где допускается наличие констант. Встретив имя параметра, СУБД подставляет на его место текущее значение этого параметра. Параметры используются в инструкциях insert и update для вычисле­ния значений столбцов и в условиях отбора В дополнение к входным параметрам некоторые диалекты SPL поддерживают выходные параметры, с помощью которых хранимые процедуры могут возвращать значения, вычисленные в ходе выполнения процедуры. При интерактивном вызове хранимых процедур от выходных параметров мало пользы, а вот если одна хранимая процедура вызывает другую, выходные параметры позволяют им эффективно обме­ниваться информацией. Некоторые диалекты SPL поддерживают параметры, которые одновременно являются и входными, и выходными, т.е. их значения передаются хранимой процедуре, та их меняет, и результирующие значения возвращаются вызывающей процедуре. На рис 20 2 приведен еще один вариант процедуры add_cust, написанн диалекте Transact-SQL СУБД Sybase (Диалект Transact-SQL используется и Ы^ На crosoft SQL Server, он мало отличается от исходной версии этого диалекта из S SQL Server, которая послужила основой для обеих линий продуктов — Mic     ase Sybase ) Обратите внимания на отличия Transact-SQL от диалекта Oracle      °S°^ й ключевое слово procedure может быть сокращено до proc, список параметров процедуры не заключен в скобки, а просто следует за и процедуры,    именем все имена параметров начинаются с символа @ как в объявлении процедуру и в ее теле,    Так  отсутствует формальный маркер окончания инструкции — тело процедуры представляет собой единую инструкцию Transact-SQL

/* Процедура для добавления данных о новом клиенте */ create proc add_cust @c_name    varchar (20),    /* имя клиента */ @c_num    integer,    /* идентификатор клиента */ @cred_lim     money,    /* лимит кредига */