Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Выполнение функции, возвращающей переменную типа Table




Создайте Функцию PostDet.KLAV, которая возвращает все значения поставок поставщика S1 из таблицы PostDet.tblSP.

В окне создания запросов введите код:

USE Postavki;

GO

CREATE FUNCTION PostDet.KLAV

(

@NewPost CHAR(10)

)

RETURNS TABLE

AS

RETURN

(

SELECT DISTINCT QTY As NewQTY FROM PostDet.tblSP

WHERE PostDet.tblSP.S = @NewPost

);

Выполните функцию. Сохраните код выполненной функции.

 

Разрешение для функции можно предоставить тем же способом, каким предоставляется разрешение SELECT для таблиц.

--Разрешение на выполнение функции PostDet.Klav.

USE Postavki;

GO

GRANT SELECT ON PostDet.Klav TO Fred;

 

Протестируйте функцию. В окне запроса введите код:

SELECT * FROM PostDet.Klav(‘S1’);

 

В результате получите все значения поставок поставщика ‘ S1’.

Следующая процедура PostDet.QTYSUM из этих значений будет определять максимальное значение поставок.

USE Postavki;

GO

CREATE PROCEDURE PostDet.QTYSUM

AS

DECLARE @NumPost char(10), @a char(7)

SET @NumPost = 'S1'

SET @a = (SELECT MAX(NewQTY) FROM PostDet.KLAV (@NumPost))

SELECT @a

Выполните и сохраните созданную процедуру.

Предоставьте пользователюFred разрешение на выполнение процедуры PostDet.QTYSUM.

USE Postavki;

GO

GRANT EXECUTE ON. PostDet.QTYSUM

TO[FS-64C67299CCAR\Fred];

Переключитесь на учетную запись Fred и войдите на сервер.

Выполните процедуру. Для этого в окне редактора введите код: PostDet.QTYSUM;

Вы получите максимальное значение поставок поставщика ‘S1’.

Использование триггеров.

Триггер — это особая разновидность хранимой процедуры, которая может выполняться автоматически или для модификации данных, это триггер DML, или для действий с моделью данных, это триггер DDL.

Триггеры DML прикреплены к определенной таблице или представлению и выполняются в ответ на инструкции INSERT, UPDATE или DELETE. Они используются для поддержания целостности данных, для каскадных обновлений или для осуществления бизнес-правил. Триггеры DDL прикреплены к действию, которое происходит в базе данных или на сервере, и применяются к инструкциям таким, как например, CREATE, ALTER, DROP. Они, как правило, создаются для обеспечения безопасности системы.

Переключитесь на учетную запись администратора и войдите в SQL Server. Создайте триггер, запрещающий вставку записи в таблицу tblS.

 

В окне создания запросов введите код:

USE Postavki

GO

CREATE TRIGGER PostDet. no_insert ON PostDet.tblS

For INSERT

AS

ROLLBACK;

Сохраните триггер. Откройте таблицу PostDet.tblS и вставьте запись. Запись не добавиться. Получите сообщение об ошибке. Нажмите клавишу Esc. Создайте триггер DDL, который будет срабатывать каждый раз, когда будет выполняться инструкция DROP_TABLE.

USE Postavki;

GO

CREATE TRIGGER trgDrp

ON DATABASE

FOR DROP_TABLE

AS

ROLLBACK;

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

С помощью инструкции DISABLE TRIGGER отключите созданный выше триггер PostDet.no_insert.

USE Postavki;

GO

DISABLE TRIGGER PostDet.no_insert ON PostDet.tblS;

Повторно включить триггер можно с помощью инструкции ENABLE TRIGGER.

USE Postavki;

GO

ENABLE TRIGGER PostDet.no_insert ON PostDet.tblS;

Для удаление триггера используется команда DROP TRIGGER.

DROP TRIGGER trigger_name ON [Database]

Защита данных с помощью транзакций .

Транзакция – это логическая единица работы, чаще всего состоящая из нескольких операций, последовательное выполнение которых переводит базу данных из одного непротиворечивого состояния в другое. СУБД рассматривает транзакцию, как неделимую группу команд и исполняет либо все команды, либо ни одной.

Пример 1. Удалить в базе данных Postavki все сведения о поставщике ‘ S3’.

В редакторе создания запроса введите код:

1 BEGIN TRANSACTION;

2 DELETE FROM PostDet.tblSP

3 WHERE S = ‘S3’;

DELETE FROM PostDet.tblS

5 WHERE S = ‘S3’;

6 COMMIT;

 

1 - начало транзакции.

2,3 - удаление записи из таблицы PostDet.tblSP.

4,5 – удаление записи из таблицы PostDet.tblS.

6 – проверка корректности базы данных. Если Да, то оператор COMMI T фиксирует изменения в базе данных (фиксирует транзакцию). Все изменения будут успешно внесены в базу данных.

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

Пример 2. Подсчитать суммарное количество поставляемых деталей и среднее арифметическое. Увеличить количество деталей поставщика ‘S3 ‘ в 3 раза, вычислить те же величины и отменить транзакцию. Показать результат запроса к базе данных.

В редакторе создания запроса представлен код транзакции, а во вкладке Grids - ее результат (Рисунок 1). Введите этот код. Выполните и сохраните транзакцию.

Как видно из Рисунка 1, в результате выполнения кода транзакции база

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

 

 

Рисунок 1. Окно создания запросас кодом транзакции и результатом ее выполнения.





Поделиться с друзьями:


Дата добавления: 2016-07-29; Мы поможем в написании ваших работ!; просмотров: 315 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Лучшая месть – огромный успех. © Фрэнк Синатра
==> читать все изречения...

4272 - | 4157 -


© 2015-2026 lektsii.org - Контакты - Последнее добавление

Ген: 0.009 с.