Práctica 1 - revisa precio con comision.sql
De FdIwiki ABD
Revisión a fecha de 21:42 14 mar 2016; Jcopado (Discusión | contribuciones)
CREATE OR REPLACE PROCEDURE REVISA_PRECIO_CON_COMISION IS
contieneSalida Contiene%rowtype; pre_plato platos.precio%TYPE; com_rest restaurantes.comision%TYPE; pre_con_comision contiene.precio_con_comision%TYPE; rest_contiene contiene.restaurante%TYPE; plato_contiene contiene.plato%TYPE; pedido_contiene contiene.pedido%TYPE; unidades_contiene contiene.unidades%TYPE; precio_debido contiene.precio_con_comision%TYPE; cursor cursorContiene IS SELECT platos.precio, restaurantes.comision, contiene.precio_con_comision, contiene.restaurante, contiene.plato, contiene.pedido, contiene.unidades FROM contiene INNER JOIN restaurantes ON contiene.restaurante = restaurantes.codigo INNER JOIN platos ON contiene.plato = platos.nombrePlato; resultado_funcion INT; num_filas_modificadas INT := 0; fallo_guardaPlato EXCEPTION;
BEGIN
OPEN cursorContiene; LOOP FETCH cursorContiene INTO pre_plato, com_rest, pre_con_comision, rest_contiene, plato_contiene, pedido_contiene, unidades_contiene; EXIT WHEN cursorContiene%NOTFOUND; precio_debido := pre_plato + (pre_plato * (com_rest / 100)); IF pre_con_comision IS NULL OR precio_debido <> pre_con_comision THEN num_filas_modificadas := num_filas_modificadas + 1; resultado_funcion := guardaPlato(rest_contiene, plato_contiene, pedido_contiene, precio_debido, unidades_contiene); IF resultado_funcion = 1 THEN RAISE fallo_guardaPlato; END IF; UPDATE contiene SET contiene.precio_con_comision = precio_debido WHERE contiene.restaurante = rest_contiene AND contiene.plato = plato_contiene AND contiene.pedido = pedido_contiene; END IF; END LOOP; CLOSE cursorContiene;
IF num_filas_modificadas = 0 THEN DBMS_OUTPUT.put_line('Ningún cambio en los datos de Contiene.');
ELSE DBMS_OUTPUT.put_line('Número de filas modificadas en Contiene: ' || num_filas_modificadas);
END IF;
EXCEPTION WHEN fallo_guardaPlato THEN DBMS_OUTPUT.put_line('Fallo en la función guardaPlato');
END REVISA_PRECIO_CON_COMISION;