Aerolíneas 20 07 15 - AGMadera/BasedeDatos2 GitHub Wiki

Ejercicio #1: Crear una vista donde se muestra el nombre de la aerolínea, los aviones que tiene y los asientos de los aviones.

CREATE TABLE AEROLINEA (ID_AEROLINEA INTEGER,
 NOMBRE VARCHAR2(120),
CONSTRAINT ID_AEROLINEA_PK PRIMARY KEY(ID_AEROLINEA));

CREATE TABLE AVION (ID_AVION INTEGER,
  ID_AEROLINEA INTEGER, ASIENTO INTEGER,
CONSTRAINT ID_AVION_PK PRIMARY KEY(ID_AVION),
CONSTRAINT ID_AEROLINEA_FK FOREIGN KEY(ID_AEROLINEA)
REFERENCES AEROLINEA(ID_AEROLINEA));

create sequence SEC_AEROLINEA
start with 1
increment by 1
nomaxvalue;

create sequence SEC_AVION
start with 1
increment by 1
nomaxvalue;

create or replace PROCEDURE GUARDAR_AEROLINEA(
MY_ID_AEROLINEA OUT INTEGER, MY_NOMBRE IN VARCHAR2)
AS
BEGIN 
SELECT SEC_AEROLINEA.NEXTVAL INTO MY_ID_AEROLINEA FROM DUAL;
INSERT INTO AEROLINEA VALUES(MY_ID_AEROLINEA, MY_NOMBRE);
END;
/

create or replace PROCEDURE GUARDAR_AVION(
MY_ID_AVION OUT INTEGER,MY_ID_AEROLINEA IN INTEGER,
  MY_ASIENTOS IN INTEGER)
AS
BEGIN 
SELECT SEC_AVION.NEXTVAL INTO MY_ID_AVION FROM DUAL;
INSERT INTO AVION VALUES(MY_ID_AVION, MY_ID_AEROLINEA,
MY_ASIENTOS);
END;
/

DECLARE
ALGO INTEGER;
BEGIN 
GUARDAR_AEROLINEA (ALGO, 'Aeromexico');
END;
/

DECLARE
ALGO INTEGER;
BEGIN 
GUARDAR_AEROLINEA (ALGO, 'Continental Airlineas');
END;
/

DECLARE
ALGO INTEGER;
BEGIN 
GUARDAR_AEROLINEA (ALGO, 'Airbus');
END;
/

DECLARE
ALGO INTEGER;
BEGIN 
GUARDAR_AEROLINEA (ALGO, 'American Airlines');
END;
/

select * from aerolinea

DECLARE
ALGO INTEGER;
BEGIN 
GUARDAR_AVION (ALGO, 1, 200);
END;
/

DECLARE
ALGO INTEGER;
BEGIN 
GUARDAR_AVION (ALGO, 2, 120);
END;
/

DECLARE
ALGO INTEGER;
BEGIN 
GUARDAR_AVION (ALGO, 3, 140);
END;
/

DECLARE
ALGO INTEGER;
BEGIN 
GUARDAR_AVION (ALGO, 4, 160);
END;
/

select * from avion

SET SERVEROUTPUT ON;

DECLARE
CURSOR CURSOR_AEROPUERTO IS SELECT AERO.NOMBRE, AVI.ASIENTO FROM AEROLINEA AERO, AVION AVI WHERE AERO.ID_AEROLINEA=AVI.ID_AEROLINEA;
BEGIN
FOR REC_REGISTRO IN CURSOR_AEROPUERTO LOOP
DBMS_OUTPUT.PUT_LINE('AEROLINEA: '|| REC_REGISTRO.NOMBRE ||'  EL NUMERO DE ASIENTO ES: ' || REC_REGISTRO.ASIENTO);
END LOOP;
END;
/

Ejercicio #2: En la tabla AVION en el ejercicio inicial indicamos que todos los aviones deben tener 200 asientos. Modificar el procediemiento para guardar_avion, de tal manera que impida guardar un avion que tenga mas de 200 asientos.


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, 'LO SIENTO NO HAY MAS DE 200 LUGARES');
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;
/

Ejercicio #3: Generar un procedimiento que se llame comprar_boleto, que reciba como argumentos el numero de boletos a comprar. En la logica del procedimiento, deberá descontar de los asientos, el numero de boletos pasados como argumento (sobre la tabla avion). Si la diferencia es menor que cero debe lanzarse una excepcion que diga "Lo siento no hay lugares".


create or replace PROCEDURE COMPRAR_BOLETO(
MY_ID_AVION IN INTEGER,MY_ID_AEROLINEA IN INTEGER,
MY_ASIENTOS OUT INTEGER)
AS
DECLARE
ASIENTO_ACTUALES INTEGER;
BEGIN 
SELECT ASIENTO INTO ASIENTO_ACTUALES FROM AVION WHERE ID_AVION=MY_ID_AVION;
UPDATE AVION set ASIENTO=ASIENTO_ACTUALES;
IF MY_ASIENTO > 200 THEN
RAISE_APPLICATION_ERROR(-20001, 'LO SIENTO NO HAY MAS DE 200 LUGARES');
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;
/

⚠️ **GitHub.com Fallback** ⚠️