Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Example for zao.doc
Скачиваний:
7
Добавлен:
17.02.2016
Размер:
477 Кб
Скачать
☆

Результати виконання завдання

Завдання 3

Виготовити запит про розподіл кількості родовищ областей по категоріях. Навпроти назв регіонів і областей, розділених пробілом, установити значення кількості родовищ для кожної категорії.

SELECT

zone.name, region.name, depository.category, count(depository.id)

FROM

depository INNER JOIN zone INNER JOIN region

ON region.id = zone.region_id

ON zone.id = depository.zone_id,

reserves WHERE reserves.depository_id = depository.id

GROUP BY depository.category, region.name, zone.name;

Задача 3.2

Побудувати запит про динаміку зміни видобувних запасів нафти протягом останніх 15 років заданого родовища. Додати назву цього родовища

SELECT

depository.name,

reserves.recoverable_reserves,

reserves.date

FROM reserves INNER JOIN depository

ON depository.id = reserves.depository_id

WHERE

extract(YEAR FROM current_date) < extract(YEAR FROM reserves.date) + 15

GROUP BY name, recoverable_reserves,date ;

Задача 3.3

Виготовити запити для перегляду вмісту таблиць зі всіма даними.

SELECT

region.name , zone.name, depository.name, depository.reserves, depository.category, reserves.recoverable_reserves, reserves.date

FROM

reserves INNER JOIN depository INNER JOIN zone INNER JOIN region

ON region.id = zone.region_id

ON zone.id = depository.zone_id

ON depository.id = reserves.depository_id;

Створення транзакцій

SELECT * FROM oblik;

3 5 "2011-09-10" 3

1 9 "2011-10-20" 5

BEGIN;

INSERT INTO oblik VALUES(2, 2, '2002-02-22', 2);

SELECT * FROM oblik;

3 5 "2011-09-10" 3

1 9 "2011-10-20" 5

2 2 "2002-02-22" 2

ROLLBACK;

SELECT * FROM oblik;

3 5 "2011-09-10" 3

1 9 "2011-10-20" 5

BEGIN;

I

З використання точок збереження

NSERT INTO oblik VALUES(2, 2, '2002-02-22', 2);

SELECT * FROM oblik;

1 9 "2011-10-20" 5

2 2 "2002-02-22" 2

SAVEPOINT a;

INSERT INTO oblik VALUES(3, 3, '2003-03-23', 3);

SELECT * FROM oblik;

1 9 "2011-10-20" 5

2 2 "2002-02-22" 2

3 3 "2003-03-23" 3

SAVEPOINT b;

INSERT INTO oblik VALUES(4, 4, '2004-04-24',4);

SELECT * FROM oblik;

1 9 "2011-10-20" 5

2 2 "2002-02-22" 2

3 3 "2003-03-23" 3

4 4 "2004-04-24" 4

ROLLBACK TO a;

SELECT * FROM oblik;

1 9 "2011-10-20" 5

2 2 "2002-02-22" 2

Створення тригера на INSERT

Нехай маємо таблицю books з декількома полями. Необхідно створити тригер, який б запобігав вставлянню рядків в якому поле rozmir є від’ємним, тобто <0.

Створення тригерної функції (варіант 1):

CREATE FUNCTION trig () RETURNS trigger AS '

begin

if(new.rozmir<0)then

raise notice ‘Значення поля не може бути відємним’;

return null;

else return new;

end if;

end;

' LANGUAGE  plpgsql;

Створення тригерної функції (варіант 2):

CREATE FUNCTION trig () RETURNS trigger AS '

begin

if (new.rozmir<0) then

raise notice ‘Значення поля не може бути відємним’;

new = null;

end if;

return new;

end;

' LANGUAGE  plpgsql;

Створення тригера

CREATE TRIGGER tr BEFORE INSERT ON books FOR EACH ROW EXECUTE PROCEDURE trig()

Перевірка роботи тригера

INSERTINTObooksvalues(‘Автор’, ‘книга’, -15, 12, 14)

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]