Skip to content

Instantly share code, notes, and snippets.

@raimonizard
Last active May 2, 2023 10:57
Show Gist options
  • Save raimonizard/d1e70fe5e7b583694c7fc2eb3fc710d4 to your computer and use it in GitHub Desktop.
Save raimonizard/d1e70fe5e7b583694c7fc2eb3fc710d4 to your computer and use it in GitHub Desktop.
TYPE Persona BDOR
-- 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 || '' || 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;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment