Архив / Хранимые процедуры
.pdftblEmployee
intEmpId |
txtEmpName |
|
fltSalary |
… |
|
|
|
|
|
1023 |
Бобров А.А. |
|
10000 |
… |
|
|
|
|
|
1025 |
Мухина В.Н. |
|
12000 |
… |
|
|
|
|
|
1026 |
Лобов А.Г. |
|
14000 |
… |
|
|
|
|
|
tblLog |
|
|
|
|
datDateLog |
fltAvgSalary |
|
|
10.09.2011 12000.00
Update tblEmployee Set fltSalary=10500 Where intEmpId=1023
tblEmployee
intEmpId |
txtEmpName |
|
fltSalary |
… |
|
|
|
|
|
1023 |
Бобров А.А. |
|
10500 |
… |
|
|
|
|
|
1025 |
Мухина В.Н. |
|
12000 |
… |
|
|
|
|
|
1026 |
Лобов А.Г. |
|
14000 |
… |
|
|
|
|
|
tblLog |
|
|
|
|
datDateLog |
fltAvgSalary |
|
|
10.09.2011 12000.00
17.03.2012 12166,66
Update tblEmployee Set fltSalary=10500 Where intEmpId=1023
tblDetail
id_d |
dname |
|
color |
weight |
city |
total |
||||
|
|
|
|
|
|
|
|
|
|
|
1 |
|
винт |
|
красный |
12 |
Москва |
300 |
|||
|
|
|
|
|
|
|
|
|
|
|
2 |
|
болт |
|
зеленый |
17 |
СПб |
200 |
|||
|
|
|
|
|
|
|
|
|
|
|
3 |
|
гайка |
|
синий |
17 |
Тула |
300 |
|||
|
|
|
|
|
|
|
|
|
|
|
5 |
|
шайба |
|
синий |
12 |
СПб |
600 |
|||
|
|
|
|
|
|
|
|
|
|
|
6 |
|
гвоздь |
|
красный |
19 |
Москва |
0 |
|||
tblDelivery |
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
||
id_p |
|
id_d |
|
n |
|
|
|
|
|
|
1 |
|
1 |
|
100 |
|
|
|
|
|
|
3 |
|
2 |
|
200 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4 |
|
1 |
|
200 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
5 |
|
400 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4 |
|
5 |
|
200 |
|
|
|
|
|
|
3 |
|
3 |
|
300 |
|
|
|
|
|
Триггер записывает в таблицу tblDetail суммарное количество деталей после внесения изменений в таблицу tblDelivery
CREATE TRIGGER delivery_update AFTER UPDATE ON tblDelivery FOR EACH ROW
BEGIN
Declare total_sum int; Declare id int;
SET id=new.id_d;
CALL prc_count_d (id, total_sum);
UPDATE tblDetail SET total= total_sum WHERE id_d=id; END
tblDetail
id_d |
dname |
|
color |
weight |
city |
total |
||||
|
|
|
|
|
|
|
|
|
|
|
1 |
|
винт |
|
красный |
12 |
Москва |
300 |
|||
|
|
|
|
|
|
|
|
|
|
|
2 |
|
болт |
|
зеленый |
17 |
СПб |
200 |
|||
|
|
|
|
|
|
|
|
|
|
|
3 |
|
гайка |
|
синий |
17 |
Тула |
300 |
|||
|
|
|
|
|
|
|
|
|
|
|
5 |
|
шайба |
|
синий |
12 |
СПб |
600 |
|||
|
|
|
|
|
|
|
|
|
|
|
6 |
|
гвоздь |
|
красный |
19 |
Москва |
0 |
|||
tblDelivery |
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
||
id_p |
|
id_d |
|
n |
|
|
|
|
|
|
1 |
|
1 |
|
100 |
|
|
|
|
|
|
3 |
|
2 |
|
200 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4 |
|
1 |
|
200 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
5 |
|
400 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4 |
|
5 |
|
200 |
|
|
|
|
|
|
3 |
|
3 |
|
300 |
|
|
|
|
|
UPDATE tblDelivery SET n=30 WHERE (id_d=1) AND (id_p=4)
tblDetail
id_d |
dname |
|
color |
weight |
city |
total |
||||
|
|
|
|
|
|
|
|
|
|
|
1 |
|
винт |
|
|
красный |
12 |
Москва |
300 |
||
|
|
|
|
|
|
|
|
|
|
|
2 |
|
болт |
|
|
зеленый |
17 |
СПб |
200 |
||
|
|
|
|
|
|
|
|
|
|
|
3 |
|
гайка |
|
|
синий |
17 |
Тула |
300 |
||
|
|
|
|
|
|
|
|
|
|
|
5 |
|
шайба |
|
|
синий |
12 |
СПб |
600 |
||
|
|
|
|
|
|
|
|
|
|
|
6 |
|
гвоздь |
|
|
красный |
19 |
Москва |
0 |
||
tblDelivery |
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
||
id_p |
|
id_d |
|
|
n |
|
|
|
|
|
1 |
|
1 |
|
100 |
|
|
|
|
||
3 |
|
2 |
|
200 |
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
4 |
|
1 |
|
|
30 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
2 |
|
5 |
|
400 |
|
|
|
|
||
|
|
|
|
|
|
|
|
|
||
4 |
|
5 |
|
200 |
|
|
|
|
||
3 |
|
3 |
|
300 |
|
|
|
|
UPDATE tblDelivery SET n=30 WHERE (id_d=1) AND (id_p=4)
tblDetail
id_d |
dname |
|
color |
weight |
city |
total |
||||
|
|
|
|
|
|
|
|
|
|
|
1 |
|
винт |
|
|
красный |
12 |
Москва |
130 |
||
|
|
|
|
|
|
|
|
|
|
|
2 |
|
болт |
|
|
зеленый |
17 |
СПб |
200 |
||
|
|
|
|
|
|
|
|
|
|
|
3 |
|
гайка |
|
|
синий |
17 |
Тула |
300 |
||
|
|
|
|
|
|
|
|
|
|
|
5 |
|
шайба |
|
|
синий |
12 |
СПб |
600 |
||
|
|
|
|
|
|
|
|
|
|
|
6 |
|
гвоздь |
|
|
красный |
19 |
Москва |
0 |
||
tblDelivery |
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
||
id_p |
|
id_d |
|
|
n |
|
|
|
|
|
1 |
|
1 |
|
100 |
|
|
|
|
||
3 |
|
2 |
|
200 |
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
4 |
|
1 |
|
|
30 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
2 |
|
5 |
|
400 |
|
|
|
|
||
|
|
|
|
|
|
|
|
|
||
4 |
|
5 |
|
200 |
|
|
|
|
||
3 |
|
3 |
|
300 |
|
|
|
|
UPDATE tblDelivery SET n=30 WHERE (id_d=1) AND (id_p=4)
Имитация работы автоинкрементного поля
CREATE TRIGGER detail_insert BEFORE INSERT ON tblDetail
BEGIN
DACLARE id int;
SELECT max(id_d) into id FROM tblDetail; SET new.id_d=id+1;
END;
Имитация работы автоинкрементного поля
tblDetail
id_d |
dname |
color |
weight |
city |
total |
1 |
винт |
красный |
12 |
Москва |
300 |
|
|
|
|
|
|
2 |
болт |
зеленый |
17 |
СПб |
200 |
|
|
|
|
|
|
3 |
гайка |
синий |
17 |
Тула |
300 |
|
|
|
|
|
|
5 |
шайба |
синий |
12 |
СПб |
600 |
|
|
|
|
|
|
6 |
гвоздь |
красный |
19 |
Москва |
0 |
|
|
|
|
|
|
7 |
винт |
зеленый |
Null |
Null |
0 |
|
|
|
|
|
|
INSERT INTO tblDetail (dname, color) VALUES(‘винт’,‘зеленый’)
Триггер проверяет вводимые данные: поставки деталей из Москвы для поставщиков со статусом менее 30 запрещены
CREATE TRIGGER delivery_insert BEFORE INSERT ON tblDelivery BEGIN
DECLARE s int; DECLARE c char(20);
SELECT city INTO c FROM tblDetail WHERE id_d=new.id_d; SELECT status INTO s FROM tblProvider WHERE id_p=new.id_p IF (c = “Москва”) AND (s < 30) THEN
/* Откат транзакции */ END IF;
END;