DAW Desenvolupament d'aplicacions web ( Informàtica )
Exercici de DAW-MP02-UF4 - Bases de dades objectes-relacionals

#FpInfor #Daw #DawMp02 #DawMp02Uf04

(etiquetes - hashtags)
Oracle Objecte-Relacional - Cache

La cache d'artistes

Imgur

Twin Peaks necessita una base de dades per triar els artistes de la propera temporada. Cal prepar-la.

1) Crea usuari i connexio a base de dades, otorga els permisos mínims ( connect i resource ). Connectat amb l'usuari que has creat.

2) (1 punt) Crea el tipus persona no final i no instanciable amb:

nom VARCHAR2(500 )
cache NUMERIC( 8,2)
FUNCTION descripcio RETURN varchar2 --no cal fer body

3) (1 punt) Crea el tipus músic que hereti de persona. Sobreescriu la descripció per tal que retorni el nom i l'instrument que toca.

4.1) (0.5 punt) Crea el tipus pel·lícula:

titol varchar2( 200 ),
any_estrena int

Crea una collecio_pelicules tipus col·lecció taula.

4.2) (2 punt) Crea el tipus actor que hereti de persona. Afegeix-li el camp pelicules de tipus collecio_pelicules. Sobreescriu la descripció per tal que retorni el nom i les pel·lícules on ha aparescut. Recorda que l'operador concatenació és ||

5) (0.5 punt) Crea taula d'objectes persona. ( No li cal NESTED TABLE )

6) (1 punt) Inserta un actor i dos músics:

  'Trent Reznor', 1000, 'Cantant' 
  'Eddie Vedder', 2000, 'Guitarra'
  'Monica Anna Maria Bellucci', 3000, 
    ha aparescut a: 'The Matrix Reloaded', 2003
                    'The Passion of the Christ', 2004

recorda fer commit.

7) (1 punt ) Selecciona el nom i la descripció de totes les persones amb cache superior a 1500.

Imgur

Entregables

  • Captura de pantalla de totes les instruccions que has realitzat.

Solucio

create user ex2016 identified by i 
default tablespace users
temporary tablespace temp;

GRANT connect, resource TO ex2016;

--- persona ---

CREATE TYPE persona AS OBJECT (
  nom VARCHAR2(500 ),
  cachete NUMERIC( 8,2),
  MEMBER FUNCTION descripcio RETURN varchar2
) NOT FINAL NOT INSTANTIABLE;

--- music ---

CREATE TYPE music UNDER persona  (
  instrument varchar2(500 ),
  OVERRIDING MEMBER FUNCTION descripcio RETURN varchar2
);

CREATE OR REPLACE TYPE BODY music AS 
OVERRIDING MEMBER FUNCTION descripcio RETURN VARCHAR2 IS
    aux_desc varchar(1000);
  BEGIN
    aux_desc := nom || ' toca el ' || instrument;
    return aux_desc;
  END;
END;

--- pelicules i actor ---

CREATE TYPE pelicula AS OBJECT (
  titol varchar2( 200 ),
  any_estrena int
);

CREATE TYPE collecio_pelicules AS TABLE OF pelicula;


CREATE TYPE actor UNDER persona  (
  pelicules collecio_pelicules,
  OVERRIDING MEMBER FUNCTION descripcio RETURN varchar2
);

CREATE OR REPLACE TYPE BODY actor AS 
OVERRIDING MEMBER FUNCTION descripcio RETURN VARCHAR2 IS
    aux_pelis varchar(1000);
  BEGIN
    aux_pelis := '';
    FOR i IN 1..pelicules.COUNT LOOP
       aux_pelis := aux_pelis || pelicules(i).titol || ', ';
    END LOOP;
    return aux_pelis;
  END;
END;

--- taula persones ---

CREATE TABLE persones OF persona; -- sense nested table IDK why.

--- insertar un actor i dos músics

INSERT INTO persones VALUES (
   music( 'Trent Reznor', 1000, 'Cantant' )
);

INSERT INTO persones VALUES (
   music( 'Eddie Vedder', 2000, 'Guitarra' )
);

INSERT INTO persones VALUES (
   actor( 'Monica Anna Maria Bellucci',
          3000, 
          collecio_pelicules( 
              pelicula( 'The Matrix Reloaded', 2003 ),
              pelicula( 'The Passion of the Christ', 2004 )
          )
         )
);


COMMIT;

--- selecciona el nom i la descripció de totes les persones amb cachete superior a 1500.

select p.nom, p.descripcio() from persones p where p.cachete > 1500;














--- capitols i persones

CREATE TYPE aparicio AS OBJECT (
  ref_persona REF persona,
  sou NUMERIC(8,2)
);


CREATE TYPE colleccio_aparicions AS TABLE OF aparicio;

CREATE TABLE capitols (
   seasson int,
   episode int,
   title varchar2( 100 ),
   aparicions colleccio_aparicions
) NESTED TABLE aparicions STORE AS capitols_aparicions_nt;

--- insertar les persones del primer capítol.


DECLARE
   T ref persona;
   E ref persona;
   M ref persona;
begin
   select ref( p ) into T from persones p where p.nom like 'T%';
   select ref( p ) into E from persones p where p.nom like 'E%';
   select ref( p ) into M from persones p where p.nom like 'M%';
   INSERT INTO capitols VALUES (
       1,
       2,
      'IMPOSSIBLE',
      colleccio_aparicions( aparicio( T, 1000.2 ) , aparicio( M, 2000.1 ) )
    );  
end;



--- selecciona les perones del primer capítol que cobrin més de 1000
Resultats d'aprenentatge:
Continguts:

Editat 29 de abril de 2016 a les 18:22
per daniel herrera

Pujat el 27 de abril de 2016 a les 16:34
per daniel herrera

Consulteu nota legal i condicions