En una bdd de restaurante tengo tres tablas: platos, clientes y pide.
Se pide:
Con cursores:
1.- visualizar el menu mas barato compiuesto de plato primero, segundo y postre, y precio final del menu
2.- visualizar la factura de un cliente, comida o cena, fecha de la factura y nombre de los platos tomados. con funcion y procedimiento
3.- definir un tipo tclientes tabla o array. Realiza una fincion que devuelva un tclientes con los clientes que han consumido hoy
Con triggers:
1.- cada vez que se borre un cliente, comprobar que no existe ningun registro en pide. si es asi, borrar primero los rehistros en pide y liego el cliente, pasando los datos a una tabla historica
2.- cuando se realice ina insercion en pide,comprobar que el cliente esta aun en el hotel
tengo hecho esto pero creo que esta mal
que os parece?
/----declaracion---/
DECLARE
CURSOR cursor1 IS
select nombre from platos where precio=(select min(precio) from platos where tipo='postre');
V_postre varchar2(20);
BEGIN
/----apertura---/
OPEN cursor1;
/----recogida de datos---/
LOOP
FETCH cursor1 INTO V_postre;
exit when cursor1%notfound;
dbms_output.put_line(v_postre);
END LOOP;
/----cierre del cursor--/
CLOSE cursor1;
END;
/
DECLARE
CURSOR cursor1
IS
SELECT tipo, MIN (precio) precio
FROM platos
GROUP BY tipo;
V_tipo VARCHAR2 (20);
V_precio NUMBER;
BEGIN
/----apertura---/
OPEN cursor1;
/----recogida de datos---/
LOOP
FETCH cursor1
INTO V_tipo, v_precio;
EXIT WHEN cursor1%NOTFOUND;
DBMS_OUTPUT.put_line ( 'Tipo: '
|| v_tipo
|| ' Precio: '
|| TO_CHAR (v_precio)
);
END LOOP;
/----cierre del cursor--/
CLOSE cursor1;
END;
/
create or replace trigger BorrarCliente
before delete on clientes
begin
select count(nombre) from clientes
end;
CREATE TABLE AuditarClientes (
col1 VARCHAR2(200)
);
CREATE OR REPLACE TRIGGER auditar_clientes
BEFORE INSERT OR DELETE
ON CLIENTES
FOR EACH ROW
BEGIN
IF DELETING THEN
INSERT INTO AUDITARCLIENTES
VALUES(TO_CHAR(sysdate,'DD/MM/YYHH24:MI') 😮LD.NOMBRE '' ' BORRADO ');
ELSIF INSERTING THEN
INSERT INTO AUDITARCLIENTES
VALUES(TO_CHAR(sysdate,'DD/MM/YYHH24:MI') || :NEW.NOMBRE '' ' INSERCION ');
END IF;
END;
CREATE OR REPLACE TRIGGER auditar_clientes_hotel
BEFORE INSERT
ON PIDE
FOR EACH ROW
BEGIN
IF (:new.fecha>:old.fecha) THEN
RAISE_APPLICATION_ERROR(-20201, 'El cliente está aun en el hotel');
END IF;
END;