0% found this document useful (0 votes)
10 views4 pages

Cod sem3PLOO

Uploaded by

xerces
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
10 views4 pages

Cod sem3PLOO

Uploaded by

xerces
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 4

--crearea tipului obj_Adresa

create or replace type obj_adresa as object


(strada VARCHAR2(20), numar VARCHAR2(3), cod_postal VARCHAR2(5),
oras VARCHAR2(15), id_tara CHAR(2),
member function adresa_completa return varchar2);
--folosirea unui obiect de tip obj_adresa
set serveroutput on
declare
var_adresa obj_Adresa;
begin
var_adresa:=obj_adresa('cal. mosilor','12','3132','Bucuresti','RO');
dbms_output.put_line(var_adresa.oras||' '||var_adresa.strada);
end;
--adaugarea unui constructor explicit
alter type obj_adresa add constructor function obj_adresa(p_strada VARCHAR2,
p_numar VARCHAR2, p_oras VARCHAR2,p_codp VARCHAR2) return self as result
--crearea corpului tipului de obiect obj_adresa
create or replace type body obj_adresa is
member function adresa_completa return varchar2
is
var_adr varchar2(50);
begin
var_adr:=strada||' '||numar||' '||cod_postal||' '||oras||' '||id_tara;
return var_adr;
end;

constructor function obj_adresa(p_strada VARCHAR2,


p_numar VARCHAR2, p_oras VARCHAR2,p_codp VARCHAR2) return self as result
is
begin
self.strada:=p_strada;
self.numar:=p_numar;
self.oras:=p_oras;
self.id_tara:='RO';
self.cod_postal:=p_codp;
return;
end;
end;
--apelul constructorului explicit si al metodei adresa_Completa
declare
var_adresa obj_Adresa;
begin
var_adresa:=obj_adresa('cal. mosilor','12','Bucuresti','3132');
dbms_output.put_line(var_adresa.adresa_completa());
end;

--crearea obiectului obj_autentificare


CREATE OR REPLACE TYPE obj_autentificare AS OBJECT(
username VARCHAR2(20),
parola VARCHAR2(20));
--crearea tabelei autentificare pe baza tipului de obiect
CREATE TABLE autentificare OF obj_autentificare
(
CONSTRAINT nn_user CHECK (username IS NOT NULL),
CONSTRAINT nn_parola CHECK (parola IS NOT NULL)
);

--crearea tipului obj_utilizator si a tabelei asociate


CREATE OR REPLACE TYPE obj_utilizator as object (
Id_user number(4),
cnp char(13),
Nume varchar2(15),
Email varchar2(20),
Date_login obj_autentificare,
Adresa obj_adresa,
MEMBER FUNCTION get_sex RETURN VARCHAR2,
STATIC FUNCTION nr_utilizat RETURN number
) NOT FINAL;

CREATE TABLE tabela_utilizatori of obj_utilizator;

INSERT INTO tabela_utilizatori VALUES (123, '29705120356', 'Mihai Andreea',


NULL, obj_autentificare('Andreea' ,'pass'),obj_adresa('cal.
mosilor','12','Bucuresti','3132'));

SELECT * FROM tabela_utilizatori;

SELECT nume, u.date_login.username, u.adresa.id_tara FROM tabela_utilizatori


u;
--crearea corpului tipului obj_utilizator si apelul metodelor sale
create or replace type body obj_utilizator

is
MEMBER FUNCTION get_sex RETURN VARCHAR2
is
v_cnp char(1);
begin
v_cnp := substr(cnp, 1, 1);
if v_cnp = '1' then
return 'Masculin';
else
return 'Feminin';
end if;
end;

STATIC FUNCTION nr_utilizat RETURN number


is
v_nr number(2);
begin
select count(*) into v_nr from tabela_utilizatori;
return v_nr;
end;
end;

SELECT nume, u.date_login.username, u.adresa.id_tara, cnp, u.get_sex(),


obj_utilizator.nr_utilizat() FROM tabela_utilizatori u;

select obj_utilizator.nr_utilizat() nr_utiliz from dual;

--crearea tipului obj_instructor si a tabelei asociate


CREATE OR REPLACE TYPE obj_instructor UNDER obj_utilizator
(grad_didactic VARCHAR2(10), STATIC FUNCTION nr_utilizat RETURN NUMBER);

CREATE TABLE tabela_instructori OF obj_instructor;

INSERT INTO tabela_instructori VALUES (123, '29705120356', 'Mihai Andreea',


NULL, obj_autentificare('Andreea' ,'pass'),obj_adresa('cal.
mosilor','12','Bucuresti','3132'),'Prof');
INSERT INTO tabela_instructori VALUES (200, '19705120356', 'Mihai Ion', NULL,
obj_autentificare('Andreea' ,'pass'),obj_adresa('cal.
mosilor','12','Bucuresti','3132'),'Prof');
SELECT i.nume, i.adresa.id_tara, i.grad_didactic FROM tabela_instructori i;
--crearea corpului tipului obj_instructor si apelul metodei sale
CREATE OR REPLACE TYPE BODY obj_instructor IS
STATIC FUNCTION nr_utilizat RETURN NUMBER
IS
v_nr number(2);
begin
select count(*) into v_nr from tabela_instructori;
return v_nr;
END;
end;

SELECT obj_instructor.nr_utilizat() FROM dual;

--crearea tipului obj_cursant si a tabelei asociate


CREATE OR REPLACE TYPE obj_cursant UNDER obj_utilizator
(an number(1), grupa number(4),MEMBER PROCEDURE afis_an_gr);

CREATE TABLE tabela_cursant OF obj_cursant;

INSERT INTO tabela_cursant VALUES (123, '29705120356', 'Mihai Andreea', NULL,


obj_autentificare('Andreea' ,'pass'),obj_adresa('cal.
mosilor','12','Bucuresti','3132'),1,1005);
INSERT INTO tabela_cursant VALUES (200, '19705120356', 'Mihai Ion', NULL,
obj_autentificare('Andreea' ,'pass'),obj_adresa('cal.
mosilor','12','Bucuresti','3132'),2, 2005);
INSERT INTO tabela_cursant VALUES (200, '19705120356', 'Mihai Ion', NULL,
obj_autentificare('Andreea' ,'pass'),obj_adresa('cal.
mosilor','12','Bucuresti','3132'),3, 3005);

SELECT c.nume, c.date_login.username, c.cnp, c.get_sex(), c.adresa.id_tara,


c.an, c.grupa FROM tabela_cursant c;
--crearea corpului tipului obj_cursant si apelul metodei sale
CREATE OR REPLACE TYPE BODY obj_cursant IS
MEMBER PROCEDURE afis_an_gr
is
begin
dbms_output.put_line(an || ' '||grupa);
end;
end;

declare
var_cursant obj_cursant;
cursor c is select* from tabela_cursant;
begin
for var1 in c loop
var_cursant:=obj_cursant(var1.id_user, var1.cnp, var1.nume,
var1.email,var1.date_login, var1.adresa, var1.an,var1.grupa);
var_cursant.afis_an_gr;
end loop;
end;

--adaugarea metodei ADAUGA pentru adaugarea unui cursant si unui utilizator


alter type obj_cursant ADD MEMBER PROCEDURE Adauga CASCADE;

create or replace TYPE BODY obj_cursant


IS
MEMBER PROCEDURE afis_an_gr
IS
begin
DBMS_OUTPUT.PUT_LINE(an || ' ' || grupa);
end;
MEMBER PROCEDURE Adauga
IS
var_id_max number(3);
begin
select nvl(max(id_user),0)+1 into var_id_max from tabela_cursant;
insert into tabela_cursant values(var_id_max,cnp, nume, email,date_login,
adresa, an,grupa);
select nvl(max(id_user),0)+1 into var_id_max from tabela_utilizatori;
insert into tabela_utilizatori values(var_id_max,cnp, nume, email,date_login,
adresa);
end;

end;
--verificare apel metoda ADAUGA
declare
var_cursant obj_cursant;

begin
var_cursant:=obj_cursant(1000,'24872637', 'Bobescu', null,null,null, 3,3006);
var_cursant.adauga;
end;

select * from tabela_cursant;


select * from tabela_utilizatori;

You might also like