-- Declaració del tipus (Classe) Persona
CREATE OR REPLACE TYPE T_Persona AS OBJECT(
-- Atributs
dni VARCHAR2(9),
nom VARCHAR2(50),
cognom1 VARCHAR2(50),
cognom2 VARCHAR2(50),
dataNaixement DATE,
paisNaixement VARCHAR2(50),
-- Declarem constructor amb certs paràmetres
CONSTRUCTOR FUNCTION T_Persona(dni VARCHAR2) RETURN SELF AS RESULT,
-- Declarem un segon constructor amb certs paràmetres
CONSTRUCTOR FUNCTION T_Persona(dni VARCHAR2, nom VARCHAR2, dataNaixement DATE) RETURN SELF AS RESULT,
-- Declarem funció toString (retorna un varchar)
MEMBER FUNCTION toString RETURN VARCHAR2,
-- Declarem el procediment setNom
MEMBER PROCEDURE setNom(pnom VARCHAR2),
-- Calcular edat i mostrar per pantalla
MEMBER PROCEDURE calcEdat
);
/
-- Definició del tipus Persona
CREATE OR REPLACE TYPE BODY T_Persona AS
/****************************/
-- Definim codi del primer constructor
CONSTRUCTOR FUNCTION T_Persona (dni VARCHAR2) RETURN SELF AS RESULT IS
BEGIN
SELF.dni := dni;
RETURN ;
END;
/****************************/
-- Definim codi del segon constructor
CONSTRUCTOR FUNCTION T_Persona (dni VARCHAR2, nom VARCHAR2, dataNaixement DATE) RETURN SELF AS RESULT IS
BEGIN
SELF.dni := dni;
SELF.nom := nom;
SELF.dataNaixement := dataNaixement;
RETURN ;
END;
/****************************/
MEMBER FUNCTION toString RETURN VARCHAR2 IS
frase VARCHAR2(100);
BEGIN
frase := 'El dni de la persona és: ' || SELF.dni || ' i el seu nom és: ' || SELF.nom;
RETURN frase;
END;
/****************************/
MEMBER PROCEDURE setNom(pnom VARCHAR2) IS
BEGIN
SELF.nom := pnom;
END;
/****************************/
MEMBER PROCEDURE calcEdat IS
anys INT := 0;
BEGIN
anys := EXTRACT(YEAR FROM CURRENT_DATE) - EXTRACT(YEAR FROM SELF.dataNaixement);
DBMS_OUTPUT.PUT_LINE('La persona ' || SELF.nom || ' té ' || anys || ' anys');
END;
/****************************/
END;
/
-- Main de l'aplicació en codi PL/SQL
DECLARE
nom VARCHAR2(50);
dni VARCHAR2(9);
andreu T_Persona;
BEGIN
dni := '12345678J';
DBMS_OUTPUT.PUT_LINE('La variable DNI té el valor:' || dni);
andreu := NEW T_Persona('11111111Q', 'Andreu', TO_DATE('19/12/2003','DD/MM/YYYY'));
DBMS_OUTPUT.PUT_LINE(andreu.toString());
andreu.setNom('Pere');
DBMS_OUTPUT.PUT_LINE(andreu.toString());
andreu.calcEdat;
END;