Смекни!
smekni.com

Особенности разработки триггеров и хранимых процедур в СУБД (стр. 2 из 4)

//Вывод общее количество кодов оклада // Interbase

SELECT COUNT(*)

FROM OCLAD;

COUNT

=====

9

// Вывод максимального оклада //MS Access

ELECT DISTINCTROW Max([оклады].[оклад]) AS [Max - оклад]

FROM оклады;

оклады max
Max - оклад
5 999,55р.

Таблицы DAN, PROF, OCLAD образуют простую реляционную БД, она мала, с ней легко работать, но содержит все необходимые компоненты для иллюстрации основных принципов и приемов применения SQL. Первый столбец каждой таблицы содержит №№, разные для каждой строки (первичные ключи). Некоторые из номеров встречаются в других столбцах таблиц. Это внешние ключи, которые ссылаются на первичные ключи (для удобства имеют одинаковые имена). Выполнение условия «прикрепления» таблиц, говорит, что система находится в состоянии «ссылочной целостности»


3. Хранимые процедуры

база файл триггер информация

Это тоже элемент базы данных, наряду с таблицами. Это специальная программа, написанная на так называемом языке процедур и триггеров и хранимая в качестве части базы данных. Поскольку мы создали хранимую процедуру, мы можем напрямую вызвать на выполнение из своего приложения. Хранимая процедура может получать входные параметры и возвращать определенные значения приложению. Язык процедур и триггеров включает в себя операторы SQL и некоторые расширения, такие как IF THEN ELSE, MHILE DO, FOR SELECT DO, исключения и обработку ошибок.

Преимущества использования хранимых процедур:

· Модульное оформление;

· Приложения, обращающиеся к одной и той же базе данных, могут делит между собой хранимые процедуры (использовать одну и ту же хранимую процедуру), избегая дублирования кода (т.е. нет необходимости в повторном коде хранимой процедуры) и снижая таким образом размер самих приложений;

· Рациональная поддержка. Когда процедура обновляется, ее изменения автоматически отражаются во всех приложениях, которые ее используют, и новая компиляция этих приложений не требуется. Приложения только однажды компилируются для каждого клиента.

· Улучшение работы. И это – основное достоинство этого инструмента. Хранимые процедуры выполняются сервером, а не клиентом, что снижает загрузку сети и улучшает её работу, особенно в условиях клиентского доступа. Например, в системе управления кадрами, когда общая база данных хранится на сервере и работники отдела кадров и руководство предприятия пользуются ее услугами, у некоторого клиента возникает потребность получить аналитические данные в некотором разрезе. При наличии в БД хранимой процедуры, получающей требуемую аналитику, нет нужды клиенту вытаскивать к себе все необходимые данные для расчета, а достаточно вызвать на сервере соответствующую хранимую процедуру, передав ей необходимые параметры, и эта процедура, на месте исполнив всю работу и не перегоняя большое количества данных по сети клиенту, выдаст ему только результат в виде небольшой таблицы. Этой же процедурой может воспользоваться и другой клиент и получить для себя такую же аналитику.

· Работа с хранимыми процедурами

С помощью интерактивного SQL можно создавать, модифицировать и удалять процедуры и исключения. Существуют два способа создавать, видоизменять и удалять хранимые процедуры с помощью интерактивного SQL:

· Интерактивно;

· С помощью входного файла, содержащего операторы определения данных.

Обычно предпочтение отдают файлам, им легче модифицировать и обеспечивать для них соответствующую документацию. Для простых модификаций существующих процедур более подходит интерактивный режим. Пользователь, который создает процедуру, является собственником и может передавать привилегии исполнения процедуры другим пользователем, триггерам и хранимым процедурам.

Хранимые процедуры в базах данных, преимущества использования, CREATE PROC, мастер Create Stored Procedure Wizard, макросы и модули VBA в Microsoft Access

Хранимые процедуры - это сохраненные как объекты баз данных блоки кода на языке SQL. В важных базах хранимые процедуры используются очень активно. Часто на них реализуют всю бизнес-логику приложений и практически любое внесение изменений в базы данных должно производиться только при помощи хранимых процедур. Что дают нам хранимые процедуры:

модульность разработки приложений;

так же, как и представления, позволяют защитить клиентские приложения от изменений в структуре таблиц в базах данных;

позволяют реализовывать дополнительную логику проверок, протоколирования действий пользователей и т.п.;

позволяют производить каскадные обновления;

в отличие от представлений, хранимые процедуры могут принимать и возвращать параметры;

обеспечивают очень мощные механизмы обеспечения безопасности;

позволяют повысить производительность - за счет использования откомпилированных планов хранимых процедур из кэша и за счет сокращения сетевого трафика при отправке больших наборов команд;

при помощи хранимых процедур можно реализовывать изощренные схемы обработки ошибок на сервере.

Создание хранимых процедур производится на SQL Server командой CREATE PROC или - на графическом интерфейсе - в Enterprise Manager из контейнера Stored Procedures или при помощи мастера Create Stored Procedure Wizard.

В MS Access как таковых хранимых процедур нет, но их роль могут выполнять:

макросы (типа "Запуск запроса SQL")

модули VBA.

· Использование файла определения данных

Для создания и изменения процедуры с использованием файла определения данных используют текстовой редактор, что бы записать такой файл, затем сохраняют файл и исполняют с помощью интерактивного SQL утилиты IBConsole, в которой вставляют данные из файла, либо используют команду isgl в командной строке (режим DOS), задавая команду в виде:

C:\ISGL-INPUT FILENAME DATABASE_NAME.

Здесь FILENAME – это имя файла определения данных, а DATABASE_NAME – имя используемой БД. Файл определения данных должен включать:

· Операторы создания, модификации и удаления процедур и исключений;

· Любые другие ISGL – операторы. Исключения должны созданы до ссылки на них в процедурах.

Хранимая процедура меняет код профессии в таблице DAN соответствующий переменной MEN на код соответствующий переменной NOW.

SET TERM ^;

CREATE PROCEDURE IZM_PROF(MEN INTEGER,NOW INTEGER)

RETURNS(TAB_NO CHAR(5),FAM VARCHAR(30),K_P INTEGER,NOW_P INTEGER)AS

BEGIN

FOR

SELECT TAB_NO,FAM,K_P

FROM DAN

INTO:TAB_NO,FAM,K_P

DO

BEGIN

IF(K_P=MEN)THEN

BEGIN

NOW_P=NOW;

UPDATE DAN

SET K_P=:NOW_P

WHERE TAB_NO=:TAB_NO;

SUSPEND;

END

END

END^

SET TERM;^

Вызов процедуры

SELECT*

FROM IZM_PROF(12,5);

Удаление процедуры:

DROP PROCEDURE <имя процедуры>;

· Вызов хранимых процедур.

Приложения могут вызывать хранимые процедуры из SGL, DSGL, ISGL.

Существуют два типа хранимых процедур: процедуры-выборки (selectable procedures) и исполняемые процедуры (executable procedures). Отличие в работе этих двух видов ХП заключается в том, что процедуры-выборки обычно возвращают множество наборов выходных параметров, сгруппированных построчно, которые имеют вид набора данных, а исполняемые процедуры могут либо вообще не возвращать параметры, либо возвращать только один набор выходных параметров, перечисленных в Returns. Процедуры-выборки вызываются в запросах SELECT, а исполняемые процедуры - с помощью команды EXECUTE PROCEDURE.

· SELECT - процедуры, которые приложения может использовать вместо таблицы или вьюера в операторе SELECT; результатом исполнения оператора SELECT над такой процедурой будет обычная таблица данных, какая получается, например, когда в SELECT стоит символ*. Например, если имеется SELECT - процедура с именем SP, то ее вызов на исполнение выглядеть так:

SELECT*

FROM IZM_PROF(12,5);

Если воспользоваться запросом

EXECUTE PROCEDURE UV_D (1.1);

то произойдет изменение и вывод только первой строки:

KOD_D SUMA_D N_SUMA_D

======== ======== ========

300 2500 2750

Вызов процедуры UV_MZ_D

SELECT*

FROM UV_MZ_D (2600);

произведет изменения только двух строк таблицы DOLJN, в которых поле SUMA_D меньше 2600, и выведет таблицу из этих строк.

KOD_D SUMA_D N_SUMA_D

======== ======== ========

300 2500 2600

307 2000 2600

//Поиск повторений //MS Access

SELECT данные.фамилия, данные.имя, данные.отчество

FROM данные

WHERE (((данные.фамилия) In (SELECT [фамилия] FROM [данные] As Tmp GROUP BY [фамилия] HAVING Count(*)>1 )))

ORDER BY данные.фамилия;

Поиск повторений для данные
фамилия имя отчество
ИВАНОВ Иван Иванович
ИВАНОВ Иван Иванович
ФРОЛОВА Анастасия Дмитриевна
ФРОЛОВА Мария Александровна

· Удаление хранимой процедуры.

Удаление хранимой процедуры выполняется с помощью оператора DROP PROCEDURE. Синтаксис оператора удаления таков:

DROP PROCEDURE name;

Здесь name – имя хранимой процедуры.

Хранимые процедуры — основное средство программирования серверной логики. Они представляют собой откомпилированный модуль, написанный на языке Transact-SQL. В коде хранимой процедуры можно использовать не только операции выборки и модификации данных, но и логику ветвления, переменные, вызовы других процедур и некоторые другие средства, характерные для языков программирования высокого уровня. Код процедуры синтаксически анализируется при компиляции, а оптимизированный план выполнения создается при первом вызове процедуры. В отличие от запросов, хранимые процедуры имеют возможность возвращать несколько наборов записей, а также значения.

Для вызова процедуры клиентская программа или другая процедура должны указать имя выполняемой процедуры и передать ей набор входных параметров.