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

Архив / Хранимые процедуры

.pdf
Скачиваний:
41
Добавлен:
14.05.2015
Размер:
962.44 Кб
Скачать

tblEmployee

intEmpId

txtEmpName

fltSalary

 

 

 

 

1023

Бобров А.А.

10500

 

 

 

 

1025

Мухина В.Н.

12000

 

 

 

 

1026

Лобов А.Г.

14000

 

 

 

 

Update tblEmployee Set fltSalary=12500

Emp_Update

old

1025

Мухина В.Н.

12000

 

 

 

 

 

 

 

 

 

 

new

1025

Мухина В.Н.

12500

tblEmployee

intEmpId

txtEmpName

fltSalary

 

 

 

 

1023

Бобров А.А.

10500

 

 

 

 

1025

Мухина В.Н.

12500

 

 

 

 

1026

Лобов А.Г.

14000

 

 

 

 

Update tblEmployee Set fltSalary=12500

Emp_Update

old

1025

Мухина В.Н.

12000

 

 

 

 

 

 

 

 

 

 

new

1025

Мухина В.Н.

12500

tblEmployee

intEmpId

txtEmpName

fltSalary

 

 

 

 

1023

Бобров А.А.

10500

 

 

 

 

1025

Мухина В.Н.

12500

 

 

 

 

1026

Лобов А.Г.

14000

 

 

 

 

Update tblEmployee Set fltSalary=12500

Emp_Update

old

1025

Лобов А.Г.

14000

 

 

 

 

 

 

 

 

 

 

new

1025

Лобов А.Г.

12500

tblEmployee

intEmpId

txtEmpName

fltSalary

 

 

 

 

1023

Бобров А.А.

10500

 

 

 

 

1025

Мухина В.Н.

12500

 

 

 

 

1026

Лобов А.Г.

12500

 

 

 

 

Update tblEmployee Set fltSalary=12500

Emp_Update

old

1025

Лобов А.Г.

14000

 

 

 

 

 

 

 

 

 

 

new

1025

Лобов А.Г.

12500

tblEmployee

intEmpId

txtEmpName

fltSalary

 

 

 

 

1023

Бобров А.А.

10500

 

 

 

 

1025

Мухина В.Н.

12500

 

 

 

 

1026

Лобов А.Г.

12500

 

 

 

 

Update tblEmployee Set fltSalary=12500

если зарплата оказалась увеличенной более чем на 5%, то это исправляется, и зарплата увеличивается ровно на 5% от предыдущей зарплаты

create trigger emp_update after update on tblemployee for each row

begin

if (new.fltSalary-old.fltSalary) > (0.05 * old.fltSalary) then Update tblemployee set fltSalary = 1.05 * old.fltSalary Where intEmpId=old. intEmpId;

end if; end;

tblEmployee

intEmpId

txtEmpName

fltSalary

 

 

 

 

1023

Бобров А.А.

10000

 

 

 

 

1025

Мухина В.Н.

12000

 

 

 

 

1026

Лобов А.Г.

14000

 

 

 

 

Update tblEmployee Set fltSalary=12000 Where intEmpId=1023

Emp_Update

old

1023

Бобров А.А.

10000

new

 

 

 

 

1023

Бобров А.А.

12000

UPDATE tblEmployee SET fltSalary = 1.05 * O.fltSalary

WHERE intEmpId = O.intEmpId

tblEmployee

intEmpId

txtEmpName

fltSalary

 

 

 

 

1023

Бобров А.А.

10000

 

 

 

 

1025

Мухина В.Н.

12000

 

 

 

 

1026

Лобов А.Г.

14000

 

 

 

 

Update tblEmployee Set fltSalary=12000 Where intEmpId=1023

Emp_Update

old

1023

Бобров А.А.

10000

new

 

 

 

 

1023

Бобров А.А.

12000

UPDATE tblEmployee SET fltSalary = 1.05 * old.fltSalary

WHERE intEmpId = old.intEmpId

Emp_Update

old

1023

Бобров А.А.

12000

 

 

 

 

 

new

1023

Бобров А.А.

10500

tblEmployee

intEmpId

 

txtEmpName

 

fltSalary

 

 

 

 

 

 

1023

 

Бобров А.А.

 

10000

 

 

 

 

 

 

1025

 

Мухина В.Н.

 

12000

 

 

 

 

 

 

1026

 

Лобов А.Г.

 

14000

 

 

 

 

 

 

tblLog

 

 

 

 

 

 

 

 

 

 

datDateLog

fltAvgSalary

 

 

 

 

 

 

 

 

10.09.2011

 

12000.00

 

 

 

 

 

 

 

 

Триггер записывает в другую таблицу текущую дату и текущую среднюю зарплату, которая рассчитывается по данным из измененной таблицы.

Триггер вызывается после выполнения операции изменения для всей таблицы в целом.

CREATE TRIGGER tgrEmployeeNewAverage AFTER UPDATE ON tblEmployee FOR EACH ROW

Begin

INSERT INTO tblLog (datDateLog, fltAvgSalary) VALUES (CURDATE(),

(SELECT Avg(fltSalary) FROM tblEmployee))

End