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

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

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

tblEmployee

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;