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; /