Пятница, 10.01.2025, 13:56
Приветствую Вас Гость | RSS

Lab#4 (Объекты)

Задание:

 

• Создать объектные типы, включающие следующую информацию :

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;

_______________________________________________________________________________________