Задание:
• Создать объектные
типы, включающие следующую информацию :
a)
о
преподавателях: код преподавателя, фамилия, имя стаж работы, оплат за час,
адрес, телефон.
b)
о предметах:
код предмета, название, описание, кол-во часов в неделю.
• Описать следующие методы:
1)
Вывести
фамилии и имена преподавателей, разделенные пробелом;
2)
Вывести
названия предметов и кол-во часов в неделю по соответствующему предмету,
разделенные пробелом;
3)
Предусмотреть
изменения атрибутов: стаж работы, оплата за час и кол-во часов в неделю.
• Создать таблицы по объектным типам.
Решение:
I.
a)
create or
replace type prepod as object (
id number(3),
familia varchar2(40),
imea varchar2(40),
staj number(2),
oplata number(6,2),
adres varchar2(50),
tel varchar2(10),
member function INFO return
varchar2,
member function x_oplata (new_oplata
in number) return number,
member function x_staj (new_staj in number)
return number
);
create or
replace type body prepod as
member
function INFO return varchar2 as -- 1)
begin
return familia || ' ' ||
imea;
end INFO;
member
function x_oplata (new_oplata in number) return number as -- 3)
thisobj prepod := SELF;
begin
thisobj.oplata := new_oplata;
return thisobj.oplata;
end x_oplata;
member
function x_staj (new_staj in number) return number as -- 3)
thisobj prepod := SELF;
begin
thisobj.staj :=
new_staj;
return thisobj.staj;
end x_staj;
end;
b)
create or
replace type urok as object (
id number(4),
name varchar2(40),
opisanie varchar2(150),
time number(2),
member
function urok_time return varchar2,
member
function x_time (new_time in number) return number
);
create or
replace type body urok as
member
function urok_time return varchar2 as -- 2)
begin
return name || ' ' ||
to_char(time);
end urok_time;
member
function x_time (new_time in number) return number as --
3)
thisobj urok := SELF;
begin
thisobj.time := new_time;
return thisobj.time;
end x_time;
end;
II.
create
table PREPODY (
rec prepod
);
create
table UROKI (
rec urok
);
_______________________________________________________________________________________
insert into
PREPODY VALUES (prepod(123,'Ivanov','Ivan',9,69,'str.Puskin 45','76-54-32'));
select P.rec.INFO()
from PREPODY P;
select
P.rec.INFO(), P.rec.x_oplata(999.66) from PREPODY P;
select
P.rec.INFO(), P.rec.x_staj(10) from PREPODY P;
insert into
UROKI (rec) VALUES (urok(987,'LFA','Avtomaty',6));
select U.rec.urok_time()
from UROKI U;
select U.rec.x_time(9)
from UROKI U;
_______________________________________________________________________________________