Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Otchet_laba4

.docx
Скачиваний:
8
Добавлен:
18.02.2017
Размер:
20 Кб
Скачать

Хранимая процедура pDel_D

CREATE PROCEDURE pDel_D(

@Nom INT,

@Id INT

)

AS

-- Удаляет строку из таблицы Have_D и корректирует общий доход

-- Входной параметр @Nom задает номер жителя

-- Входной параметр @Id задает индентификатор источника дохода

-- Процедура возвращает код –100, если источник дохода с

-- идентификатором @Id отсутствует

-- Процедура возвращает код –101, если житель с номером @Nom

-- отсутствует

-- Процедура возвращает код –102, если в таблице Have_D

-- отсутствует строка со значениями @Nom и @Id

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

-- Declare @RetCode int;

-- EXEC @RetCode = pDel_D 1, 9;

-- SELECT @RetCode;

SET NOCOUNT ON

Declare @RetCode int;

DELETE FROM Have_D

WHERE (Nom = @Nom) AND (Id = @Id)

IF @@RowCount=0

RETURN -102;

EXEC @RetCode = pSubMoney @Nom, @Id;

IF @RetCode<>0

RETURN @RetCode;

RETURN;

Хранимая процедура pAdd_D

CREATE PROCEDURE pAdd_D(

@Nom INT,

@Id INT,

@Comment CHAR(30)

)

AS

-- Добавляет строку в таблицу Have_D и корректирует общий доход

-- Входной параметр @Nom задает номер жителя

-- Входной параметр @Id задает индентификатор источника дохода

-- Входной параметр @Comment содержит комментарий

-- Процедура возвращает код –100, если источник дохода с

-- идентификатором @Id отсутствует

-- Процедура возвращает код –101, если житель с номером @Nom

-- отсутствует

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

-- Declare @RetCode int;

-- EXEC @RetCode = pAdd_D 1, 9, NULL;

-- SELECT @RetCode;

SET NOCOUNT ON

Declare @RetCode int;

EXEC @RetCode = pAddMoney @Nom, @Id;

IF @RetCode<>0

RETURN @RetCode;

INSERT INTO Have_D

VALUES (@Nom, @Id, @Comment);

RETURN;

Оператор DML не может повлиять на срабатывание триггера, однако триггер можно временно отключить оператором ALTER TABLE с па­раметром DISABLE TRIGGER:

ALTER TABLE имя_таблицы DISABLE TRIGGER имя_триггера

Для включения триггера применяется тот же оператор, но с пара­метром ENABLE TRIGGER:

ALTER TABLE имя_таблицы ENABLE TRIGGER имя_триггера

Триггер AFTER

Триггер AFTER создается оператором следующего вида:

CREATE TRIGGER имя_триггера ON имя_таблицы

AFTER операция, ...

AS

программный_код­_триггера

Созданный триггер выполняется в ответ на событие, возникающее после завершения указанной за ключевым словом AFTER операции добавления (Insert), удаления (Delete) или обновления (Update), но до подтверждения фиксации результатов модификации. Например, триггер, созданный оператором

CREATE TRIGGER ai_PROFIT_trig ON PROFIT

AFTER Insert

AS

PRINT('Добавлена строка');

выводит сообщение 'Добавлена строка' при добавлении каждой строки в таблицу PROFIT, в чем можно убедиться, если воспользоваться оператором

INSERT INTO PROFIT (Id, Source, Moneys)

VALUES (9, 'Менеджер', 20000.00)

Предложение AFTER

Предложение AFTER позволяет указать операцию (или операции), приводящие к запуску триггера. Может быть предусмотрен запуск триггера при выполнении оператора INSERT, UPDATE или DELETE либо любого сочетания этих трех операторов, например:

AFTER INSERT, DELETE

или

AFTER UPDATE, INSERT

или

AFTER DELETE

Триггеры, объявляемые с предложением AFTER, могут быть закреплены только за таблицами; закрепление этих триггеров за представлениями не допускает­ся.

MS SQL

CREATE TABLE t1 (ID int, pokupatel nchar(30), Mark nchar(30),dat date, NORR int);

CREATE TABLE t2(ID int, FIOid int, kontakts nchar(30),kupilza money, residence nchar(30));

CREATE TABLE t3(ID int, NameID int, kupilza money, ChemZanimautsay nchar(30));

SELECT * FROM t1

SELECT * FROM t2

SELECT * FROM t3

CREATE TRIGGER Insumm

On t1

AFTER UPDATE

AS

BEGIN

INSERT INTO t2 VALUES (1,1,11111,111111,'Âàñÿ');

END

UPDATE t1 SET pokupatel = 'Вася' WHERE pokupatel = 'Алексей Алексеич';

INSERT INTO t1 VALUES (1,'Алексей Васивич','Мустанг','01-07-2011',3);

INSERT INTO t3 VALUES (1,2,10000,'Перевозки');

INSERT INTO t2 VALUES (2,2,89684599988,1000,'г.Чебоксары');

CREATE TRIGGER iod_PERSON_trig ON t1

INSTEAD OF Delete

AS

DECLARE @x int;

SELECT @x=Deleted.NORR from Deleted;

IF EXISTS (SELECT * from t2 WHERE FIOid = @x)

DELETE FROM t2 WHERE FIOid = @x;

DELETE FROM t2 WHERE FIOid = 2;

INSERT INTO t2 VALUES (FIOid=3);

DROP TRIGGER InSumm

DROP TRIGGER iod_PERSON_trig

CREATE PROCEDURE pAdd(

@Number INT,

@ID INT,

@residence NCHAR(30)

)

AS

Declare @RetCode int;

EXEC @RetCode = pAdd 1, 9, NULL;

SELECT @RetCode;

SET NOCOUNT ON

--Declare @RetCode int;

EXEC @RetCode = pAddMoney @Number, @ID;

IF @RetCode<>0

RETURN @RetCode;

INSERT INTO t1

VALUES (@Number, @ID, @residence);

RETURN;

VISUAL STUDIO

--CREATE TRIGGER InSumm on Dealers

AFTER UPDATE

AS

BEGIN

Insert INTO Citizens values (5,2,2,1);

--END

SELECT * FROM Dealers

SELECT * FROM Citizens

SELECT * FROM Organizations

CREATE TABLE Citizens ()

INSERT INTO Dealers VALUES (9,'Алексей Алексееч','Cool',20,05-05-2011,45);

INSERT INTO Dealers VALUES ('');

CREATE TRIGGER iod_PERSON_trig ON Dealers

INSTEAD OF Delete

AS

DECLARE @x int;

SELECT @x=Deleted.NORR from Deleted;

IF EXISTS (SELECT * from Citizens WHERE NORR = @x)

DELETE FROM Citizens WHERE NORR = @x;

DELETE FROM Dealers WHERE NORR = @x;

INSERT INTO Dealers

VALUES(8,'Алексей Алексеевич','FORD',9,'05.05.2011');

INSERT INTO Citizens VALUES (1,'Алексей Алексеич','Ford','01-05-2011',5);

Соседние файлы в предмете Базы данных