CLASE SEGUNDA PARTE 24 06 2015 - GiselleE/basedatos2 GitHub Wiki

--En la tabla de AVION en el ejercicio inicial indicamos que todos los aviones deben tener 200 asientos.modificar el procedimiento para guardar_avion, de tal manera que --impida guardar un avión que tenga más de 200 asientos.

CREATE TABLE FACIL ( NOMBRE VARCHAR2(120), EDAD INTEGER);

/* agregaremos un procedimiento para guardar en la tabla fácil y pondremos una regla que impida que se registre un menor de edad. */

CREATE OR REPLACE PROCEDURE guardar_facil(my_nombre IN VARCHAR2, my_edad IN INTEGER)
AS BEGIN IF my_edad<18 THEN RAISE_APPLICATION_ERROR(-20001,'LO SIENTO CHAMACO PERVERSO, IMPOSIBLE REGISTRARTE'); END IF; DBMS_OUTPUT.PUT_LINE('Usuario mayor de edad guardado'); INSERT INTO facil VALUES(my_nombre, my_edad); END; /

SET SERVEROUTPUT ON;

--INVOCAMOS EL PROCEDIMIENTO

BEGIN GUARDAR_FACIL('JUAN',12); END; /

CREATE OR REPLACE PROCEDURE GUARDAR_AVION( MY_ID_AVION OUT INTEGER, MY_ID_AEROLINEA IN INTEGER, MY_ASIENTOS IN INTEGER) AS BEGIN IF MY_ASIENTOS>200 THEN RAISE_APPLICATION_ERROR(-20001,'NINGUN AVION PUEDE LLEVAR MAS DE 200 PASAJEROS'); END IF; SELECT SEC_AVION.NEXTVAL INTO MY_ID_AVION FROM DUAL; INSERT INTO AVION VALUES(MY_ID_AVION, MY_ID_AEROLINEA,MY_ASIENTOS); END; /

--GENERAR UN PROCEDIMIENTO QUE SE LLAME comprar_boleto, que recibe como argumento el numero de boletos a comprar. --En la lógica del procedimiento, debería descontar de los asientos, el numero de boletos pasados como argumento (sobre la tabla avion). --Si la diferencia es menor que cero debera lanzarse una excepción que diga 'Los siento, ya no hay ñugares'.

set serveroutput on; declare ASIENTOS_ACTUALES INTEGER; begin SELECT ASIENTO INTO ASIENTOS_ACTUALES FROM AVION WHERE id=MY_ID_AVION; dbms_output.put_line('El numero de boletos es: ' ||ASIENTOS_ACTUALES); ASIENTOS_ACTUALES:=ASIENTOS_ACTUALES - 14; UPDATE AVION SET ASIENTO = ASIENTOS_ACTUALES WHERE id=MY_ID_AVION; dbms_output.put_line('El nuevo numero de boletos es: ' ||ASIENTOS_ACTUALES); end; /