es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo escribir una función/disparador que obtenga valores individuales de consultas para una expresión booleana.

Estoy trabajando en una aplicación de reserva de billetes ficticia usando JavaScript y una base de datos de PostgreSQL.

–EDITADO–

Necesito crear una función/trigger que solo permita insertar una nueva fila en mi TICKET si el número de billetes para un vuelo no supera el número máximo de asientos para la aeronave.

¿Cómo se escribe una función que aísle valores individuales de consultas:
1) SELECT count(*) FROM ticket WHERE flightid = x
2) SELECT maxSeats FROM airplane where aircraft
code = (código correspondiente a la aeronave que se correlaciona con el vuelo)?

¿Cómo obtengo valores individuales de estas dos consultas para verificar (número de asientos <= max_seats)?

Gracias.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para obtener los valores individuales de las dos consultas, se puede utilizar la función “INTO” de PostgreSQL. Aquí tiene un ejemplo:

    DECLARE
      num_tickets INT;
      max_seats INT;
    BEGIN
      SELECT count(*) INTO num_tickets FROM ticket WHERE flight_id = x;
      SELECT maxSeats INTO max_seats FROM airplane WHERE aircraft_code = (código del avión que se relaciona con el vuelo);
      IF num_tickets >= max_seats THEN
        RAISE EXCEPTION 'El número de boletos para este vuelo excede el número máximo de asientos.';
      END IF;
    END;
    

    Esta función declara variables para el número de boletos y el número máximo de asientos, luego utiliza la función “INTO” para asignar los resultados de las consultas a esas variables. Finalmente, utiliza una declaración “IF” para comprobar si el número de boletos es mayor o igual que el número máximo de asientos, y genera una excepción si lo es. Luego podría utilizar esta función como un desencadenador para evitar la inserción de nuevas filas en la tabla TICKET que excedan el número máximo de asientos.

Comments are closed.