LP3 PLSQL
--LP3
--Ex1
CREATE TYPE OBJ_ADRESA AS OBJECT(
STRADA VARCHAR2(50),
NUMAR VARCHAR2(3),
COD_POSTAL VARCHAR2(6),
ORAS VARCHAR2(10),
ID_TARA CHAR(2),
MEMBER FUNCTION ADRESA_COMPLETA RETURN VARCHAR2 );
--Ex 2
SET SERVEROUTPUT ON
DECLARE
variabila OBJ_ADRESA;
BEGIN
variabila := OBJ_ADRESA('Eremia Grigorescu', '19','100', 'Ploiesti','01');
DBMS_OUTPUT.PUT_LINE([Link] || ' ' || [Link]);
END;
-- Ex 3
ALTER TYPE OBJ_ADRESA ADD CONSTRUCTOR FUNCTION OBJ_ADRESA(
P_STRADA VARCHAR2,
P_ORAS VARCHAR2,
P_NUMAR VARCHAR2,
P_COD_POSTAL VARCHAR2)
RETURN SELF AS RESULT;
create or replace type body obj_adresa
is
member function adresa_completa return varchar2 is
begin
return strada || ' ' || numar || ' ' || oras || ' ' || cod_postal || ' ' || id_tara;
end;
constructor function obj_adresa(
p_strada varchar2,
p_oras varchar2,
p_numar varchar2,
p_cod_postal varchar2)
return self as
result is
begin
[Link] := p_strada;
[Link] := p_oras;
[Link] := p_numar;
[Link] := p_cod_postal;
self.COD_POSTAL := p_cod_postal;
self.ID_TARA := 'RO';
return;
end;
end ;
--ex urmator
declare
v_adresa obj_adresa;
v_adresa_2 obj_adresa;
begin
v_adresa := obj_adresa(
'Str. Lunga',
'Brasov',
'10',
'012531'
);
v_adresa_2 := obj_adresa(
'Bd. Unirii',
'Bucuresti',
'10',
'012531'
);
dbms_output.put_line(v_adresa.adresa_completa());
dbms_output.put_line(v_adresa_2.adresa_completa());
end;
/
ultimul exercitiu
CREATE OR REPLACE TYPE obj_utilizator AS OBJECT (
id_user VARCHAR2(2),
cnp VARCHAR2(13),
nume varchar2(10),
email varchar2(10),
date_login obj_autentificare,
adresa obj_adresa,
MEMBER FUNCTION get_sex RETURN VARCHAR2,
STATIC FUNCTION nr_utilizat RETURN NUMBER
)
NOT FINAL;
—urmatorul
CREATE TABLE UTILIZATOR OF obj_utilizator;
INSERT INTO UTILIZATOR VALUES
('1','2990','Georgerscu','
[email protected]',obj_autentificare('georgescu','asd'),
obj_adresa( 'Str. Lunga',
'Brasov',
'10',
'012531'))
-- sa se afiseze numele utilizatorilor, username si orasul in care
locuiesc
select nume, u.date_login.username,[Link] from utilizator u;
——
implementarea metodelor
create or replace type body obj_utilizator is
member function get_sex return varchar2 is
pr_caracter varchar2(1);
begin
pr_caracter:=substr(cnp,1,1);
if pr_caracter in('1','5') then
return 'masculin';
else
return 'feminin';
end if;
end;
STATIC FUNCTION nr_utilizat RETURN NUMBER is
nr_inregistrari number(1);
begin
select count(*) into nr_inregistrari from utilizator;
return nr_inregistrari;
end;
end;
——
Apel metode
Sa se afiseze numele utilizatorilor, cnp ul si genul.
Sa se afiseze numarul de utilizatori.
-- sa se afiseze numele utilizatorilor, cnp-ul si genul
select nume, cnp, u.get_sex()
from utilizator u;
-- sa se afiseze nr de utilizatori
select obj_utilizator.nr_utilizat()
from dual;
declare
begin
dbms_output.put_line(obj_utilizator.nr_utilizat());
end;
/
cream obiectul instructor
CREATE OR REPLACE TYPE obj_utilizator AS OBJECT (
CREATE OR REPLACE TYPE obj_instructor UNDER obj_utilizator (
grad_didactic varchar2(20),
static function nr_utilizat return number
);
create table instructor of obj_instructor
insert into instructor
values('2','102567','Mircea','mircea@[Link]',obj_autentificare('mircea','grad'),obj_adresa(
'Bd. Unirii',
'Bucuresti',
'10',
'012531'
),'profesor');
insert into instructor
values('3','602467','Ioana','ioana@[Link]',obj_autentificare('ioana','0000'),obj_adresa(
'Bd. Unirii',
'Brasov',
'10',
'012531'
),'profesor');
insert into instructor
values('4','502467','Andrei','andrei@[Link]',obj_autentificare('ioan
a','0000'),obj_adresa(
'Bd. Unirii',
'Brasov',
'10',
'012531'
),'asistent');
——
create or replace type body obj_instructor as
STATIC FUNCTION NR_UTILIZAT RETURN NUMBER is
nr_inregistrari number(1);
begin
select count(*) into nr_inregistrari from instructor;
return nr_inregistrari;
end;
end;
--sa se afiseze numele cnpul genul orasul gradul didactic al instr
SELECT nume, cnp, I.get_sex(), [Link], I.GRAD_DIDACTIC
FROM INSTRUCTOR I
--sa se afiseze nr de instructori
SELECT obj_instructor.nr_utilizat() from dual
--PENTRU CURSANT
CREATE OR REPLACE TYPE obj_cursant UNDER obj_utilizator(
an varchar2(20),
grupa varchar2(20),
member procedure afis_an_gr
);
——
CREATE TABLE cursant OF obj_cursant;
INSERT INTO cursant VALUES('7','66666','Alex','[email protected]',
obj_autentificare('alex','stud'),
obj_adresa('Str. mihai','44','2314','Sibiu'), 'Anul I','Grupa 1');
INSERT INTO cursant VALUES('8','12314','Mihai','
[email protected]',
obj_autentificare('mihai','prof'),
obj_adresa('Str. mihai','44','2314','Sibiu'), 'Anul II','Grupa 2');
INSERT INTO cursant VALUES('9','12314','Mihai','
[email protected]',
obj_autentificare('mihai','prof'),
obj_adresa('Str. mihai','44','2314','Sibiu'), 'Anul III','Grupa 3');
——
create or replace type body obj_cursant is
member procedure afis_an_gr is
begin
dbms_output.put_line(an||' '||grupa);
end;
end;
——
declare
cursor c is select * from cursant;
cursant obj_cursant;
begin
for variabila in c loop
cursant := obj_cursant(variabila.id_user, [Link],
[Link], [Link], variabila.date_login,
[Link], [Link], [Link]);
cursant.afis_an_gr;
end loop;
end;
——