
- •4.1 Цель работы
- •4.2 Методические указания к выполнению работы
- •4.3 Теоретические сведения
- •Общие сведения об управляющих конструкциях
- •4.4 Примеры создания и использования функций
- •Создание и работа с пользовательскими функциями
- •4.5 Порядок выполнения лабораторной работы ( 3 задания)
- •4.6 Контрольные вопросы
- •4.7 Указания к оформлению отчета
- •Заполнение таблиц
4.6 Контрольные вопросы
1.Приведите синтаксис задания функции.
2.Приведите синтаксис задания процедуры.
3.С какими параметрами могут быть использованы функции?
4.Приведите пример использования функций преобразования типов данных.
4.7 Указания к оформлению отчета
Отчеты по лабораторной работе можно оформлять и представлять преподавателю в электронном виде или в твердой копии.
Отчет должен содержать:
-титульный лист с названием работы;
-цель работы;
-результаты выполнения общих заданий в виде экранных форм, снятых с утилиты SQL*Plus (Oracle SQL Developer) с комментарием в виде фамилии студента;
-формулировку заданий для самостоятельного выполнения;
-результаты выполненных заданий, включающие тексты самостоятельно разработанных процедур и функций, а также экранные формы утилиты SQL*Plus, демонстрирующие вызов процедур и функций и результаты их выполнения;
-выводы по работе.

ПРИЛОЖЕНИЕ А Схема базы данных тестового примера и скрипты для их создания.
WAREHOUSES (Склады) |
|
1 1 |
|
GOODS (Товары) |
||||
Ware_id (Номер склада) |
|
|
Goods_id (Номер товара) |
|||||
|
|
|
|
|
||||
Address (Адрес склада) |
|
|
|
|
|
Name (Название товара) |
||
Volume (Общий объем склада) |
|
|
|
|
|
Volume (Объем единицы товара) |
||
Volume_rest (свободный объем склада) |
|
|
|
|
|
Storage_need (Условие хранения товара) |
||
Storage_have (тип склада) |
|
|
|
|
|
Price (Цена единицы товара) |
||
|
|
|
|
|
|
|
|
|
|
|
STORAGES (Хранение) |
|
|
|
|
Storage_id (Номер партии товара) |
|
|
|
|
Ware_id (Номер склада) |
|
|
М |
|
|||
Goods_id (Номер товара) |
|
|
||
|
|
|
М |
|
|
|
Quantity (Количество товара в партии) |
||
|
|
Begin_time (Время начала хранения |
|
|
|
|
партии товара) |
|
|
|
|
End_time (Время окончания хранения |
|
|
|
|
партии товара) |
|
Таблица А1 - Таблица «Склады» (Warehouses):
Имя поля таблицы |
Тип данных |
Описание поля |
|
Ware_id |
NUMBER(3) NOT NULL PRIMARY KEY |
Номер склада |
|
Address |
VARCHAR2(30) |
Адрес склада |
|
Volume |
NUMBER(6,2) |
Общий объем склада |
|
Volume_rest |
NUMBER(6,2) |
свободный объем склада |
|
Storage_have |
VARCHAR2(40) |
тип склада |
|
Таблица А2 - Таблица «Товары» (Goods): |
|
|
|
Имя поля таблицы |
Тип данных |
Описание поля |
|
Goods_id |
NUMBER(3) NOT NULL PRIMARY KEY |
Номер товара |
|
Name |
VARCHAR2(20) |
Название товара |
|
Volume |
NUMBER(6,2) |
Объем единицы товара |
|
Storage_need |
VARCHAR2(20), |
Условие хранения товара |
|
Price |
NUMBER(6,2) |
Цена единицы товара |
|
Таблица А3 - Таблица «Хранение» (Storages) |
|
|
|
Название поля |
Тип данных |
Описание полей |
|
Storage_id |
NUMBER(5) NOT NULL PRIMARY KEY |
Номер партии товара |
|
Ware_id |
NUMBER(3) |
Номер склада |
|
Goods_id |
NUMBER(5) |
Номер товара |
|
Quantity |
INTEGER |
Количество |
товара в |
|
|
партии |
|
Begin_time |
DATA |
Время начала |
хранения |
|
|
партии товара |
|
End_time |
DATA |
Время окончания хранения |
|
|
|
партии товара |
|
Создать выше описанные таблицы можно следующими командами:
1) Таблица «Склады»:
CREATE TABLE WAREHOUSES (
WARE_ID NUMBER(3) NOT NULL PRIMARY KEY,
ADDRESS VARCHAR2(30),
VOLUME NUMBER (6,2),
VOLUME_REST NUMBER(6,2),
STORAGE_HAVE VARCHAR2(40))
2) Таблица «Товары»:
CREATE TABLE GOODS (
GOODS_ID NUMBER(4) NOT NULL PRIMARY KEY,
NAME VARCHAR2(20),
VOLUME NUMBER(6,2),
STORAGE_NEED VARCHAR2(20),
PRICE NUMBER(6,2))
3) Таблица «Хранение»:
CREATE TABLE STORAGES (
STORAGE_ID NUMBER(5) NOT NULL PRIMARY KEY,
WARE_ID NUMBER(3) REFERENCES WAREHOUSES (WARE_ID),
GOODS_ID NUMBER(5) REFERENCES GOODS (GOODS_ID),
QUANTITY INTEGER,
BEGIN_TIME DATE,
END_TIME DATE)
Заполнение таблиц
Добавление записей в созданные таблицы производится с использованием команды
INSERT:
INSERT INTO warehouses VALUES (1, 'KHARKOV', 120, 120, 'REFREGIRATOR'); INSERT INTO warehouses VALUES (2, 'KHARKOV', 300, 300, 'REFREGIRATOR'); INSERT INTO warehouses VALUES (3, 'KIEV', 180, 180, 'STOREHOUSE');
INSERT INTO goods VALUES (1, 'MONITOR LG', 1.25, 'STOREHOUSE', 1450); INSERT INTO goods VALUES (2, 'TV LG', 0.98, 'STOREHOUSE', 790);
INSERT INTO goods VALUES (3, 'MUSIC CENTRE', 1.70, 'STOREHOUSE', 2150);
Аналогично занести данные в таблицу STORAGES не менее 25 записей, используя командный файл.
ПРИЛОЖЕНИЕ Б Примеры скриптов, которые могут понадобится при выполнении индивидуального
задания.
Для некоторых примеров в индивидуальных заданиях необходимо создать объекты (в первую очередь таблицы) и заполнить их данными. Для подготовки скриптов можно воспользоваться следующими примерами. При возникновении ошибок – исправить их!
PROMPT student_sequence...
DROP SEQUENCE student_sequence;
CREATE SEQUENCE student_sequence
START WITH 10000
INCREMENT BY 1;
PROMPT students table...
DROP TABLE students CASCADE CONSTRAINTS;
CREATE TABLE students (
id NUMBER(5) PRIMARY KEY, first_name VARCHAR2(20), last_name VARCHAR2(20),
major VARCHAR2(30), current_credits NUMBER(3) );
INSERT INTO students (id, first_name, last_name, major, current_credits) VALUES (student_sequence.NEXTVAL, 'Scott', 'Smith', 'Computer Science', 0);
INSERT INTO students (id, first_name, last_name, major, current_credits)
VALUES (student_sequence.NEXTVAL, 'Margaret', 'Mason', 'History', 0);
INSERT INTO students (id, first_name, last_name, major, current_credits)
VALUES (student_sequence.NEXTVAL, 'Joanne', 'Junebug', 'Computer Science', 0);
INSERT INTO students (id, first_name, last_name, major, current_credits) VALUES (student_sequence.NEXTVAL, 'Manish', 'Murgratroid', 'Economics', 0);
INSERT INTO students(id, first_name, last_name, major, current_credits)
VALUES(student_sequence.NEXTVAL, 'Patrick', 'Poll', 'History', 0);
INSERT INTO students(id, first_name, last_name, major, current_credits)
VALUES (student_sequence.NEXTVAL, 'Timothy', 'Taller', 'History', 0);
INSERT INTO students(id, first_name, last_name, major, current_credits)
VALUES (student_sequence.NEXTVAL, 'Barbara', 'Blues', 'Economics', 0);
INSERT INTO students(id, first_name, last_name, major, current_credits)
VALUES (student_sequence.NEXTVAL, 'David', 'Dinsmore', 'Music', 0);
INSERT INTO students(id, first_name, last_name, major, current_credits) VALUES (student_sequence.NEXTVAL, 'Ester', 'Elegant', 'Nutrition', 0);
INSERT INTO students(id, first_name, last_name, major, current_credits) VALUES (student_sequence.NEXTVAL, 'Rose', 'Riznit', 'Music', 0);
INSERT INTO STUDENTS(id, first_name, last_name, major, current_credits) VALUES (student_sequence.NEXTVAL, 'Rita', 'Razmataz', 'Nutrition', 0);
PROMPT major_stats...
DROP TABLE major_stats;
CREATE TABLE major_stats ( major VARCHAR2(30), total_credits NUMBER, total_students NUMBER);
PROMPT rooms table...
DROP TABLE rooms CASCADE CONSTRAINTS;
CREATE TABLE rooms (
room_id NUMBER(5) PRIMARY KEY, building VARCHAR2(15), room_number NUMBER(4), number_seats NUMBER(4),
description VARCHAR2(50) );
INSERT INTO rooms (room_id, building, room_number, number_seats, description) VALUES (99999, 'Building 7', 310, 1000, 'Large Lecture Hall');
INSERT INTO rooms (room_id, building, room_number, number_seats, description) VALUES (99998, 'Building 6', 101, 500, 'Small Lecture Hall');
INSERT INTO rooms (room_id, building, room_number, number_seats, description) VALUES (99997, 'Building 6', 150, 50, 'Discussion Room A');
INSERT INTO rooms (room_id, building, room_number, number_seats, description) VALUES (99996, 'Building 6', 160, 50, 'Discussion Room B');
INSERT INTO rooms (room_id, building, room_number, number_seats, description) VALUES (99995, 'Building 6', 170, 50, 'Discussion Room C');
INSERT INTO rooms (room_id, building, room_number, number_seats, description) VALUES (99994, 'Music Building', 100, 10, 'Music Practice Room');
INSERT INTO rooms (room_id, building, room_number, number_seats, description) VALUES (99993, 'Music Building', 200, 1000, 'Concert Room');
INSERT INTO rooms (room_id, building, room_number, number_seats, description)
VALUES (99992, 'Building 7', 300, 75, 'Discussion Room D');
INSERT INTO rooms (room_id, building, room_number, number_seats, description) VALUES (99991, 'Building 7', 310, 50, 'Discussion Room E');
PROMPT classes table...
DROP TABLE classes CASCADE CONSTRAINTS;
CREATE TABLE classes ( department CHAR(3), course NUMBER(3),
description VARCHAR2(2000), max_students NUMBER(3), current_students NUMBER(3), num_credits NUMBER(1), room_id NUMBER(5),
CONSTRAINT classes_department_course PRIMARY KEY (department, course), CONSTRAINT classes_room_id
FOREIGN KEY (room_id) REFERENCES rooms (room_id) );
INSERT INTO classes(department, course, description, max_students, current_students, num_credits, room_id)
VALUES ('HIS', 101, 'History 101', 30, 0, 4, 99999);
INSERT INTO classes(department, course, description, max_students, current_students, num_credits, room_id)
VALUES ('HIS', 301, 'History 301', 30, 0, 4, 99995);
INSERT INTO classes(department, course, description, max_students, current_students, num_credits, room_id)
VALUES ('CS', 101, 'Computer Science 101', 50, 0, 4, 99998);
INSERT INTO classes(department, course, description, max_students, current_students, num_credits, room_id)
VALUES ('ECN', 203, 'Economics 203', 15, 0, 3, 99997);
INSERT INTO classes(department, course, description, max_students, current_students, num_credits, room_id)
VALUES ('CS', 102, 'Computer Science 102', 35, 0, 4, 99996);
INSERT INTO classes(department, course, description, max_students, current_students, num_credits, room_id)
VALUES ('MUS', 410, 'Music 410', 5, 0, 3, 99994);
INSERT INTO classes(department, course, description, max_students, current_students, num_credits, room_id)
VALUES ('ECN', 101, 'Economics 101', 50, 0, 4, 99992);
INSERT INTO classes(department, course, description, max_students, current_students, num_credits, room_id)
VALUES ('NUT', 307, 'Nutrition 307', 20, 0, 4, 99991);
PROMPT registered_students table...
DROP TABLE registered_students CASCADE CONSTRAINTS;
CREATE TABLE registered_students ( student_id NUMBER(5) NOT NULL, department CHAR(3) NOT NULL, course NUMBER(3) NOT NULL, grade CHAR(1),
CONSTRAINT rs_grade
CHECK (grade IN ('A', 'B', 'C', 'D', 'E')), CONSTRAINT rs_student_id
FOREIGN KEY (student_id) REFERENCES students (id), CONSTRAINT rs_department_course
FOREIGN KEY (department, course) REFERENCES classes (department, course) );
INSERT INTO registered_students (student_id, department, course, grade) VALUES (10000, 'CS', 102, 'A');
INSERT INTO registered_students (student_id, department, course, grade) VALUES (10002, 'CS', 102, 'B');
INSERT INTO registered_students (student_id, department, course, grade) VALUES (10003, 'CS', 102, 'C');
INSERT INTO registered_students (student_id, department, course, grade) VALUES (10000, 'HIS', 101, 'A');
INSERT INTO registered_students (student_id, department, course, grade) VALUES (10001, 'HIS', 101, 'B');
INSERT INTO registered_students (student_id, department, course, grade) VALUES (10002, 'HIS', 101, 'B');
INSERT INTO registered_students (student_id, department, course, grade) VALUES (10003, 'HIS', 101, 'A');
INSERT INTO registered_students (student_id, department, course, grade) VALUES (10004, 'HIS', 101, 'C');
INSERT INTO registered_students (student_id, department, course, grade) VALUES (10005, 'HIS', 101, 'C');
INSERT INTO registered_students (student_id, department, course, grade)
VALUES (10006, 'HIS', 101, 'E');
INSERT INTO registered_students (student_id, department, course, grade) VALUES (10007, 'HIS', 101, 'B');
INSERT INTO registered_students (student_id, department, course, grade) VALUES (10008, 'HIS', 101, 'A');
INSERT INTO registered_students (student_id, department, course, grade) VALUES (10009, 'HIS', 101, 'D');
INSERT INTO registered_students (student_id, department, course, grade) VALUES (10010, 'HIS', 101, 'A');
INSERT INTO registered_students (student_id, department, course, grade) VALUES (10008, 'NUT', 307, 'A');
INSERT INTO registered_students (student_id, department, course, grade) VALUES (10010, 'NUT', 307, 'A');
INSERT INTO registered_students (student_id, department, course, grade) VALUES (10009, 'MUS', 410, 'B');
INSERT INTO registered_students (student_id, department, course, grade) VALUES (10006, 'MUS', 410, 'E');
PROMPT RS_audit...
DROP TABLE RS_audit;
CREATE TABLE RS_audit (
change_type |
CHAR(1) |
NOT NULL, |
changed_by |
VARCHAR2(8) NOT NULL, |
|
timestamp |
DATE |
NOT NULL, |
old_student_id NUMBER(5), old_department CHAR(3), old_course NUMBER(3), old_grade CHAR(1), new_student_id NUMBER(5), new_department CHAR(3),
new_course |
NUMBER(3), |
new_grade |
CHAR(1) |
); |
|
PROMPT log_table...
DROP TABLE log_table;
CREATE TABLE log_table ( code NUMBER, message VARCHAR2(200),
info |
VARCHAR2(100) |
); |
|
PROMPT temp_table...
DROP TABLE temp_table;
CREATE TABLE temp_table ( num_col NUMBER, char_col VARCHAR2(60)
);
PROMPT debug_table...
DROP TABLE debug_table;
CREATE TABLE debug_table ( linecount NUMBER, debug_str VARCHAR2(100) );
PROMPT exception_table...
DROP TABLE exception_table;
CREATE TABLE exception_table ( exception VARCHAR2(20), date_occurred DATE);
PROMPT exception_view...
DROP VIEW exception_view;
CREATE VIEW exception_view AS SELECT exception exception_description,
date_occurred FROM exception_table;
PROMPT source...
DROP TABLE source;
CREATE TABLE source ( key NUMBER(5),
value VARCHAR2(50) );
PROMPT destination...
DROP TABLE destination;
CREATE TABLE destination ( key NUMBER(5),
value NUMBER );