Требования к отчету
Отчет должен содержать:
1) название и цель работы;
2) ответы на контрольные вопросы;
4) текст программ на языке PL/ SQL, использованных при выполнении лабораторного задания, и полученные результаты с комментариями.
Контрольные вопросы
Из каких частей состоят хранимые процедуры и функции?
В чем заключается главное различие между процедурой и функцией?
Как специфицируются процедура и функция?
Как объявляются формальные параметры процедуры или функции?
Как вызывается процедура или функция?
Какие формы задания фактических параметров предусмотрены?
Какими операторами создаются процедуры и функции?
Какую структуру имеет блок PL/SQL?
Как объявляются переменные и константы PL/SQL?
Какие способами можно присвоить значения переменным PL/SQL?
Приведите правила записи условного оператора и операторов цикла в языке PL/SQL.
Что представляет собой курсор в языке PL/SQL?
Как объявить курсор в программе на языке PL/SQL?
Какие атрибуты имеет курсор и что они обозначают?
Какие команды предназначены для работы с курсором?
Как записывается и выполняется курсорный цикл FOR?
Как запрограммировать обработку ошибок в программе на языке PL/SQL?
Как объявить, активизировать и обработать исключение, определяемое программистом?
Как объявить и использовать переменную динамического типа?
Как объявить и использовать запись на языке PL/SQL?
Что представляет собой неявный курсор в языке PL/SQL и в чем его особенности?
Какую структуру имеет пакет в языке PL/SQL? Как получить доступ к объектам пакета?
Что представляет собой триггер и в чем его отличие и сходство с процедурой?
В каких ситуациях срабатывает триггер?
Как создать табличный триггер?
Приложение 1
SQL-скрипт для создания учебной базы данных
-- == Удаление существующих одноименных таблиц ==
DROP TABLE old_item;
DROP TABLE purchase;
DROP TABLE product;
DROP TABLE person;
DROP TABLE purchase_archive;
-- ================ PERSON (таблица продавцов)==============
CREATE TABLE person (
person_code VARCHAR2(3) PRIMARY KEY,
first_name VARCHAR2(15),
last_name VARCHAR2(20),
hire_date DATE
)
;
CREATE INDEX person_name_index
ON person(last_name, first_name);
ALTER TABLE person
ADD CONSTRAINT person_unique UNIQUE (
first_name,
last_name,
hire_date
)
;
INSERT INTO person VALUES
('CA', 'Charlene', 'Atlas', '01-ФЕВ-02') ;
INSERT INTO person VALUES
('GA', 'Gary', 'Andersen', '15-ФЕВ-02' ) ;
INSERT INTO person VALUES
('BB', 'Bobby', 'Barkenhagen', '28-ФЕВ-02');
INSERT INTO person VALUES
('LB', 'Laren', 'Baxter', '01-МАР-02 ') ;
INSERT INTO person VALUES
('LN', 'Linda', 'Norton', '01-ИЮН-03');
-- ================= PRODUCT (таблица товаров)====================
CREATE TABLE product (
product_name VARCHAR2(25) PRIMARY KEY,
product_price NUMBER(4,2),
quantity_on_hand NUMBER(5,0),
last_stock_date DATE
)
;
ALTER TABLE product ADD (
CONSTRAINT positive_quantity CHECK(
quantity_on_hand IS NOT NULL
AND
quantity_on_hand >= 0)
)
;
INSERT INTO product VALUES
('Small Widget', 99, 1, '15-ЯНВ-03' ) ;
INSERT INTO product VALUES
( 'Medium Wodget', 75, 1000, '15-ЯНВ-02' ) ;
INSERT INTO product VALUES
('Chrome Phoobar', 50, 100, '15-ЯНВ-03' ) ;
INSERT INTO product VALUES
('Round Chrome Snaphoo', 25, 10000, null);
INSERT INTO product VALUES
('Extra Huge Mega Phoobar +', 9.95, 1234, '15-ЯНВ-04' ) ;
INSERT INTO product VALUES ('Square Zinculator',
45, 1, TO_DATE ('Декабрь 31, 2002, 11:30',
'Month dd, YYYY, HH:MI'));
INSERT INTO product VALUES (
'Anodized Framifier', 49, 5, NULL) ;
INSERT INTO product VALUES (
'Red Snaphoo', 1.95, 10, '31-ДЕК-01' ) ;
INSERT INTO product VALUES (
'Blue Snaphoo', 1.95, 10, '30-ДЕК-01');
-- =================== PURCHASE (таблица покупок)========
CREATE TABLE purchase (
product_name VARCHAR2(25),
salesperson VARCHAR2(3),
purchase_date DATE,
quantity NUMBER(4,2)
)
;
ALTER TABLE purchase
ADD PRIMARY KEY (product_name,
salesperson,
purchase_date
)
;
ALTER TABLE purchase ADD (
CONSTRAINT reasonable_date CHECK(
purchase_date IS NOT NULL
AND
TO_CHAR(purchase_date, 'YYYY-MM-DD') >= '2000-06-30')
)
;
ALTER TABLE purchase
ADD CONSTRAINT purchase_fk_product FOREIGN KEY
(product_name) REFERENCES product;
ALTER TABLE purchase
ADD CONSTRAINT purchase_fk_person FOREIGN KEY
(salesperson) REFERENCES person;
CREATE INDEX purchase_product
ON purchase(product_name);
CREATE INDEX purchase_salesperson
on purchase(salesperson);
INSERT INTO purchase VALUES
('Small Widget', 'CA', '14-ИЮЛ-03', 1);
INSERT INTO purchase VALUES
('Medium Wodget', 'BB', '14-ИЮЛ-03', 75);
INSERT INTO purchase VALUES
('Chrome Phoobar', 'GA', '14-ИЮЛ-03', 2);
INSERT INTO purchase VALUES
('Small Widget', 'GA', '15-ИЮЛ-03', 8);
INSERT INTO purchase VALUES
('Medium Wodget', 'LB', '15-ИЮЛ-03', 20);
INSERT INTO purchase VALUES
('Round Chrome Snaphoo', 'CA', '16-ИЮЛ-03', 5);
INSERT INTO purchase VALUES
('Small Widget', 'CA', '17-ИЮЛ-03', 1);
-- ============ PURCHASE_ARCHIVE (архив покупок)================
CREATE TABLE purchase_archive (
product_name VARCHAR2 (25) ,
salesperson VARCHAR2(3),
purchase_date DATE,
quantity NUMBER (4, 2)
)
;
INSERT INTO purchase_archive VALUES
('Round Snaphoo', 'BB', '21-ИЮН-01', 10);
INSERT INTO purchase_archive VALUES
('Large Harflinger ' , 'GA', '22-ИЮН-01', 50);
INSERT INTO purchase_archive VALUES
('Medium Wodget', 'LB', '23-ИЮН-01', 20);
INSERT INTO purchase_archive VALUES
('Small Widget', 'ZZ', '24-ИЮН-02', 80);
INSERT INTO purchase_archive VALUES
('Chrome Phoobar', 'CA', '25-ИЮН-02', 2);
INSERT INTO purchase_archive VALUES
('Small Widget', 'JT', '26-ИЮН-02', 50);