Вы находитесь на странице: 1из 10

Государственный Университет Молдовы

Факультет Математики и Информатики

Департамент Информатики

Лабораторная работа №3
Тема: Тип объекта. Методы сравнения. Анонимные блоки. Функции:
REF, DEREF, VALUE.

Выполнил: Циуляну Андрей I2002


Преподаватель: Вишневский Борис.

Кишинев, 2021
Условия:
Цель работы:
Воспроизведение элементов объектно-реляционного
программирования в индивидуальных приложениях, таких как: создание
объектов, доступ к ним, создание методов в интерактивном режиме и с
помощью команд.

Применение неявных и явных методов сравнения. Реализовать


отношения мастер/подробности (master/detail) в объектах.

Применяйте команды DML для доступа к объектам БД.

Требования к оформлению работы:

Составьте отчёт, содержащий титульный лист, задание, код запросов, с


кратким его описанием, результаты его выполнения (например,
скриншот/картинка успешного выполнения кода и созданного типа, таблицы,
объекта и т.д. в Object Browser), а также выводы о проделанной работе. (В
одном файле Word).

Задание 3.1:

1. Изучить/освоить/повторить: создание типа, методы, сортировку.


2. Изменить тип «Треугольник», добавив атрибут «Материал»
(дерево,металл, пряжа и т.д.).
Если есть объекты, на которые ссылается этот тип, то его (объект) нужно
удалить. Сохранить те же методы.
3. Создать объектную таблицу «Треугольник».
4. Заполнить таблицу данными.
5. Вывести на экран количество треугольников из дерева.
6. Создать анонимный блок для сравнения двух объектов
треугольного типа.

Задание 3.2:

1. Изучить/освоить/повторить функции: REF, DEREF, VALUE.


2. Создать таблицы: «STUDENT» (код учащегося, фамилия, имя, e- mail,
факультет, оценки) и «NOTE» (код учащегося, дисциплина, дата,
оценка). Таблица «NOTE» объектная.
3. Используйте REF для создания связи типа один ко многим (1-m) между
«STUDENT» и «NOTE».
4. Заполните таблицы.
5. Сначала таблица «STUDENT» (с оценками NULL).
6. Заполните таблицу «NOTE», используя ссылки на существующих
студентов.
7. Выполните проверку, если студент не существует, создайте
исключение и прекратите выполнение (работу).
8. Выведите на экран информацию из обеих таблиц.
9. Используйте функцию VALUE для отображения объектов из таблицы
«NOTE».
10. Используйте DEREF для отображения данных из таблицы
«STUDENT».

Задание 3.1:
Изменяем тип треуголник. Атрибут материал.
CREATE OR REPLACE EDITIONABLE TYPE "TRIANGLE" AS OBJECT
(
s_a NUMBER,
s_b NUMBER,
s_c NUMBER,
material VARCHAR2(30),
MEMBER FUNCTION exist RETURN BOOLEAN,
MAP MEMBER FUNCTION perimetr RETURN NUMBER,
MEMBER FUNCTION triangle_comparison(t TRIANGLE) RETURN NUMBER
);
CREATE OR REPLACE EDITIONABLE TYPE BODY "TRIANGLE" AS
MEMBER FUNCTION exist RETURN BOOLEAN IS
BEGIN
IF (s_a> 0 AND s_b> 0 AND s_c> 0 ) THEN
RETURN TRUE;
ELSE RETURN FALSE;
END IF;
END exist;
MAP MEMBER FUNCTION perimetr RETURN NUMBER IS
BEGIN
IF (exist()) THEN RETURN (s_a+ s_b +s_c);
ELSE RETURN 0;
END IF;
END perimetr;
MEMBER FUNCTION triangle_comparison(t TRIANGLE) RETURN NUMBER IS
BEGIN
IF perimetr() = t.perimetr() THEN RETURN 0;
ELSE IF perimetr() > t.perimetr() THEN RETURN 1
ELSE IF perimetr() < t.perimetr() THEN RETURN -1
END IF;
END IF;
END IF;
END triangle_comparison;
END;

*
CREATE OR REPLACE EDITIONABLE TYPE BODY "TRIANGLE"
AS
MEMBER FUNCTION exist RETURN BOOLEAN IS
BEGIN
IF (s_a> 0 AND s_b> 0 AND s_c> 0 ) THEN
RETURN TRUE;
ELSE RETURN FALSE;
END IF;
END exist;
MAP MEMBER FUNCTION perimetr RETURN NUMBER IS
BEGIN
IF (exist()) THEN RETURN (s_a+ s_b +s_c);
ELSE RETURN 0;
END IF;
END perimetr;
END;
Создаю объектную таблицу треугольник
create table triangle_tab of triangle;
Заполняю таблицу:
insert into triangle_tab
values(1, 2, 3, 'plastic');

insert into triangle_tab


values(4, 5, 6, 'wood');

insert into triangle_tab


values(9, 8, 7, 'sand');

insert into triangle_tab


values(12, 11, 10, 'glass');

insert into triangle_tab


values(19, 18, 17, 'metall');

insert into triangle_tab


values(2, 2, 8, 'stone');
insert into triangle_tab
values(3, 2, 2, 'obsidian');
insert into triangle_tab
values(99, 88, 77, 'diamond');
insert into triangle_tab
values(10, 10, 10, 'diamond');
insert into triangle_tab
values(13, 13, 13, 'glass');
Вывожу количество треугольников из дерева:

Задание 3.2:
Создаю таблицу note, чтобы потом использовать ref
create or replace type note as object
(
stud_id number(4),
subject varchar2(30),
date_day date,
score number(3,2)
);

create table new_note of note;

create table student


(
stud_id number(4),
surname varchar2(20),
name varchar2(20),
email varchar2(30),
faculty varchar2(20),
grade ref note
);
Заполняю таблицу

Заполняю note, использую референс на студентов.

create or replace procedure add_new_note (


stud_id in number,
subject in varchar2,
date_day in varchar2,
score in number
)

is
id_exist number;
grade ref note;
id_no_exist exception;
begin
select count(stud_id)
into id_exist from student where stud_id = stud_id;
if(id_exist = 0) then raise id_no_exist;
end if;
insert into new_note values (note(stud_id, subject, to_date(date_day,
'dd.mm.yyyy'), score));
select ref(note)
into grade
from new_note note where note.stud_id = stud_id;
update student st
set st.grade = grade where st.stud_id = stud_id;
exception
when id_no_exist then raise_application_error(-20001, 'There is no student
with given id: ' || stud_id);
when others then raise_application_error(-20001, 'Error while adding an
object');
end;

begin
add_new_note(1, 'OOP', '30.11.2021', 8.2);
add_new_note(2, 'Java', '25.04.2021', 9.1);
add_new_note(3, 'Cultura', '20.04.2021', 7.2);
add_new_note(4, 'SQL', '11.11.2021', 9.2);
add_new_note(5, 'ASDC', '12.02.2022', 10.1);
add_new_note(9, 'Network', '20.12.2021', 7);
end;

begin add_new_note(1, 'english', '28.10.2021', 6.8);


end;

Вывод:
Лабораторная работа помогла нам понять принцип работы REF,
DEREF, для преобразований ссылок.

Вам также может понравиться