Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab_04_Oracle %28PL_SQL%29 / Lab Oracle_04_2014_УправСтруктуры.pdf
Скачиваний:
9
Добавлен:
11.02.2015
Размер:
276.2 Кб
Скачать

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 );