Está en la página 1de 3

----------------------------------------------------------------------

Crea el Tipo PELICULA


----------------------------------------------------------------------
CREATE OR REPLACE TYPE PELICULA AS OBJECT
( titulo varchar2(20),
duracion number,
todospublicos number,
CONSTRUCTOR FUNCTION PELICULA RETURN self as RESULT
)
----------------------------------------------------------------------
Crea el Body de PELICULA
----------------------------------------------------------------------
CREATE OR REPLACE
TYPE BODY PELICULA AS

CONSTRUCTOR FUNCTION PELICULA RETURN self as RESULT AS


BEGIN
-- TAREA: Se necesita implantación para FUNCTION PELICULA.PELICULA
RETURN;
END PELICULA;

END;
----------------------------------------------------------------------
Crea el Tipo USUARIO
----------------------------------------------------------------------
CREATE OR REPLACE TYPE PUSUARIO AS OBJECT
( nombre varchar2(20),
credito number,
edad numeric,
CONSTRUCTOR FUNCTION PUSUARIO RETURN self as RESULT,
member procedure visualizar(pel in out PELICULA),
member procedure anadirCredito(cant int)
)
----------------------------------------------------------------------
Crea el Body de USUARIO
----------------------------------------------------------------------
CREATE OR REPLACE
TYPE BODY PUSUARIO AS

CONSTRUCTOR FUNCTION PUSUARIO RETURN self as RESULT AS


BEGIN
-- TAREA: Se necesita implantación para FUNCTION PUSUARIO.PUSUARIO
RETURN;
END PUSUARIO;

member procedure visualizar(pel in out PELICULA) AS


preciopel number := pel.duracion * 10;
BEGIN
if(pel.todospublicos = 0 and self.edad < 18) then
DBMS_OUTPUT.put_line('No puedes ver la pelicula');
else
if(self.credito < preciopel)then
DBMS_OUTPUT.put_line('No tienes suficiente dinero');
else
self.credito := self.credito - preciopel;
update tPUSUARIO tu set tu.CREDITO = tu.credito - preciopel
where tu.nombre=self.nombre;
insert into tALQUILER values(sq.NEXTVAL, pel, self, current_date);
end if;
end if;

END visualizar;

member procedure anadirCredito(cant int) AS


BEGIN
self.credito:=self.credito+cant;
update tPUSUARIO tu set tu.CREDITO = self.credito
where tu.nombre=self.nombre;

END anadirCredito;

END;
----------------------------------------------------------------------
Crea las Tablas para meter los datos
----------------------------------------------------------------------
create table tPUSUARIO of PUSUARIO;
create table tPELICULA of tPELICULA;
create table tALQUILER (
id int primary key,
p PELICULA,
u PUSUARIO,
fecha date);
----------------------------------------------------------------------

----------------------------------------------------------------------
set SERVEROUTPUT ON;
declare
u PUSUARIO:=new PUSUARIO();
p PELICULA:= new PELICULA();
begin
select * into p.titulo, p.duracion, p.todospublicos from tPELICULA tp where
tp.titulo='XXXX';
select * into u.nombre, u.credito, u.edad from tPUSUARIO tu where
tu.nombre='XXXX';
DBMS_OUTPUT.PUT_LINE(u.nombre||' , '||u.credito);
DBMS_OUTPUT.PUT_LINE(p.titulo||' , '||p.duracion);
u.visualizar(p);
----------------------------------------------------------------------
----------------------------------------------------------------------
-----Crear un procedimiento que pasada el título de la película-------
--------me devuelva los usuarios que la han visualizado.--------------
----------------------------------------------------------------------
----------------------------------------------------------------------
CREATE OR REPLACE PROCEDURE USUARIOSVERPELICULAS
nombre IN VARCHAR2
) AS
BEGIN
select ta.u.nombre from tALQUILER ta where ta.p.titulo = nombre;
DBMS_OUTPUT.PUT_LINE(ta.u.nombre);
END USUARIOSVERPELICULAS;

DBMS_OUTPUT.PUT_LINE(c.dni||' '||c.nombre||' '||c.acumuladoMulta);


----------------------------------------------------------------------
----------------------------------------------------------------------
------Crear un procedimiento que pasado el nombre de un usuario,------
-------me indique cuanto ha gastado en la plataforma NetFluck.--------
----------------------------------------------------------------------
----------------------------------------------------------------------
CREATE OR REPLACE PROCEDURE GASTOTOTALUSUARIO
(
nombre IN VARCHAR2
) AS
gastototal number;
BEGIN
SELECT SUM(tu.u.credito) INTO gastototal FROM tPUSUARIO tu where tu.u.nombre =
nombre ;
DBMS_OUTPUT.PUT_LINE(gastototal);
END GASTOTOTALUSUARIO;

----------------------------------------------------------------------
----------------------------------------------------------------------
----------------------------------------------------------------------
----------------------------------------------------------------------
----------------------------------------------------------------------
----------------------------------------------------------------------
----------------------------------------------------------------------
----------------------------------------------------------------------
CREATE OR REPLACE PROCEDURE obtener_usuarios_visualizacion(p_titulo IN VARCHAR2) IS
BEGIN
FOR usuarios_rec IN (
SELECT u.nombre
FROM tPUSUARIO u
JOIN tALQUILER a ON u.nombre = a.u.nombre
JOIN tPELICULA p ON a.p.titulo = p.titulo
WHERE p.titulo = p_titulo
) LOOP
DBMS_OUTPUT.put_line(usuarios_rec.nombre);
END LOOP;
END;
----------------------------------------------------------------------
CREATE OR REPLACE PROCEDURE obtener_usuarios_visualizacion(p_titulo IN VARCHAR2) IS
CURSOR usuarios_cur IS
SELECT u.nombre
FROM tPUSUARIO u
JOIN tALQUILER a ON u.nombre = a.u.nombre
JOIN tPELICULA p ON a.p.titulo = p.titulo
WHERE p.titulo = p_titulo;

v_usuario tPUSUARIO.nombre%TYPE;
BEGIN
OPEN usuarios_cur;
LOOP
FETCH usuarios_cur INTO v_usuario;
EXIT WHEN usuarios_cur%NOTFOUND;
DBMS_OUTPUT.put_line(v_usuario);
END LOOP;
CLOSE usuarios_cur;
END;

También podría gustarte