
- •Регіон: код регіону, назва регіону;
- •Область: код регіону, код області, назва області;
- •Родовище: код області, код родовища, назва родовища, геологічні запаси, категорія родовища;
- •Запаси: код родовища, видобувні запаси, дата представлення даних.
- •Завдання 1
- •Розв’язок
- •Завдання 2
- •Результати виконання завдання
- •Завдання 3
- •Задача 3.2
- •Створення тригера на delete
- •Створення представлень (view) та правил до них
Створення тригера на delete
Нехай маємо таблицю books з декількома полями. Необхідно створити тригер, який б запобігав видаленню рядків поле rozmir є більшим ніж 350.
Створення тригерної функції
CREATE FUNCTION no_delete () RETURNS trigger AS '
Begin
if old.rozmir>=300 then
RAISE EXCEPTION 'cannot delete ';
END IF;
return OLD;
end;
' LANGUAGE plpgsql;
CREATE TRIGGER trigger_no_delete AFTER DELETE ON books FOR EACH ROW EXECUTE PROCEDURE no_delete()
Перевірка роботи тригера
DELETE FROM books where rozmir=350
Результат
Помилка SQL:
ERROR: cannot delete
Створення представлень (view) та правил до них
Нехай маємо таблицю oblik. Створимо представлення test_1:
CREATE VIEW test_1 AS
SELECT oblik.gazprovid_id, oblik.kilgaz, oblik.data_
FROM oblik
WHERE oblik.gazprovid_id = 1 OR oblik.gazprovid_id = 2
GROUP BY oblik.gazprovid_id, oblik.kilgaz, oblik.data_;
Оновлення даних в представленні (UPDATE)
Update test_1
Set kilgaz = 2000
where gazprovid_id = 2
Правило:
create rule test_1_update as
on update to test_1 do instead update oblik set kilgaz = new.kilgaz
where gazprovid_id = new.gazprovid_id
Вставка нових значень в представлення (INSERT)
insert into test_1 values (3, 300, '2013-03-13')
Правило:
create rule test_1_insert as
on insert to test_1 do instead insert into oblik values (new.gazprovid_id, new.kilgaz, new.data_)
Видалення даних з представлення (DELETE)
Delete from test_1 where gazprovid_id = 2
Правило:
create rule test_1_delete as
on delete to test_1 do instead delete from oblik where gazprovid_id = old.gazprovid_id