Esempi sulla OOP in PL/SQL

This commit is contained in:
Fabio Scotto di Santolo
2019-09-27 20:09:54 +02:00
parent a92904f06e
commit 9b53c59ed6
3 changed files with 129 additions and 0 deletions

7
oop/OOP_1.sql Normal file
View File

@@ -0,0 +1,7 @@
--Esempio di tipo Oggetto di base
CREATE OR REPLACE TYPE cliente_obj_type AS OBJECT
(Codice VARCHAR2(20),
Nominativo VARCHAR2(100),
Residenza VARCHAR(20),
Bollini int,
UltimaSpesa Date)

53
oop/OOP_2.sql Normal file
View File

@@ -0,0 +1,53 @@
--Esempio di tipo Oggetto con costruttore e metodo
CREATE OR REPLACE TYPE cliente_obj_type_V2 AS OBJECT
(
Codice VARCHAR2(20),
Nominativo VARCHAR2(100),
Residenza VARCHAR(20),
Bollini int,
UltimaSpesa Date,
CONSTRUCTOR FUNCTION cliente_obj_type_V2(CodFid VARCHAR2)
RETURN SELF AS RESULT,
MEMBER PROCEDURE getInfo(SELF IN OUT NOCOPY cliente_obj_type_V2)
)
INSTANTIABLE NOT FINAL;
--Corpo del tipo oggetto
CREATE OR REPLACE TYPE BODY cliente_obj_type_V2 IS
-- costruttore
CONSTRUCTOR FUNCTION cliente_obj_type_V2 (CodFid VARCHAR2)
RETURN SELF AS RESULT IS
BEGIN
self.Codice := CodFid;
RETURN;
END cliente_obj_type_V2;
-- primo metodo
MEMBER PROCEDURE getInfo(SELF IN OUT NOCOPY cliente_obj_type_V2) IS
BEGIN
SELECT A.NOME || ' ' || A.COGNOME, A.COMUNE, B.Bollini, B.UltimaSpesa
INTO SELF.Nominativo, SELF.Residenza, SELF.Bollini, SELF.UltimaSpesa
FROM CLIENTI A
JOIN CARDS B
ON A.CODFIDELITY = b.codfidelity
WHERE A.CODFIDELITY = SELF.Codice;
DBMS_OUTPUT.PUT_LINE ('Codice:' || SELF.Codice);
DBMS_OUTPUT.PUT_LINE ('Nominativo:' || SELF.Nominativo);
DBMS_OUTPUT.PUT_LINE ('Bollini:'|| SELF.Bollini);
DBMS_OUTPUT.PUT_LINE ('Ultima Spesa:'|| SELF.UltimaSpesa);
RETURN;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RETURN;
END getInfo;
END;

69
oop/OOP_3.sql Normal file
View File

@@ -0,0 +1,69 @@
--Esempio di tipo Oggetto con accessori e mutatori (getter e setter)
CREATE OR REPLACE TYPE cliente_obj_type_V3 AS OBJECT
(
Codice VARCHAR2(20),
Nominativo VARCHAR2(100),
Residenza VARCHAR(20),
Bollini int,
UltimaSpesa Date,
CONSTRUCTOR FUNCTION cliente_obj_type_V3(CodFid VARCHAR2)
RETURN SELF AS RESULT,
--CREAZIONE GETTER E SETTER
MEMBER FUNCTION getCodice RETURN VARCHAR2,
MEMBER PROCEDURE setCodice(CodFid VARCHAR2),
--Creazione Metodo
MEMBER PROCEDURE getInfo(SELF IN OUT NOCOPY cliente_obj_type_V3)
)
INSTANTIABLE NOT FINAL;
--Corpo del tipo oggetto
CREATE OR REPLACE TYPE BODY cliente_obj_type_V3 IS
-- costruttore
CONSTRUCTOR FUNCTION cliente_obj_type_V3 (CodFid VARCHAR2)
RETURN SELF AS RESULT IS
BEGIN
self.Codice := CodFid;
RETURN;
END cliente_obj_type_V3;
--Implementazione Getter
MEMBER FUNCTION getCodice RETURN VARCHAR2 IS
BEGIN
RETURN SELF.Codice;
END getCodice;
--Implementazione Setter
MEMBER PROCEDURE setCodice (CodFid VARCHAR2) IS
BEGIN
SELF.CODICE := CodFid;
END setCodice;
-- primo metodo
MEMBER PROCEDURE getInfo(SELF IN OUT NOCOPY cliente_obj_type_V3) IS
BEGIN
SELECT A.NOME || ' ' || A.COGNOME, A.COMUNE, B.Bollini, B.UltimaSpesa
INTO SELF.Nominativo, SELF.Residenza, SELF.Bollini, SELF.UltimaSpesa
FROM CLIENTI A
JOIN CARDS B
ON A.CODFIDELITY = b.codfidelity
WHERE A.CODFIDELITY = SELF.Codice;
DBMS_OUTPUT.PUT_LINE ('Codice:' || SELF.Codice);
DBMS_OUTPUT.PUT_LINE ('Nominativo:' || SELF.Nominativo);
DBMS_OUTPUT.PUT_LINE ('Bollini:'|| SELF.Bollini);
DBMS_OUTPUT.PUT_LINE ('Ultima Spesa:'|| SELF.UltimaSpesa);
RETURN;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RETURN;
END getInfo;
END;