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.

Incapaz de almacenar el valor de la columna en variable, TRIGGERS de SQL.

La tabla booked_tickets que he creado para almacenar la información de los boletos:

CREATE TABLE BOOKEDTICKETS( 
PNRNO  NUMBER PRIMARY KEY, 
USERID  NUMBER,
TRAINNO  NUMBER,
SOURCE   VARCHAR2(50),
DESTINATION  VARCHAR2(50),
DATEOFARRIV  DATE,
DATEOFBOOKING  DATE,
STATUS   VARCHAR2(50),
NOOFSEATS NUMBER,
BOOKEDCLASS  VARCHAR2(50),
SEATNO   NUMBER);

La tabla Available_seats para almacenar la información de los asientos disponibles para cada una de las clases disponibles.

AVAILABLESEATS:
CREATE TABLE AVAILABLESEATS(
TRAINNO  NUMBER PRIMARY KEY,
SLEEPERSEATS   NUMBER,
ONETIERSEATS  NUMBER,
TWOTIERSEATS  NUMBER,
THREETIERSEATS NUMBER,
GENERAL_SEATS  NUMBER);

Esta es la consulta donde tengo problemas para almacenar el valor de los asientos disponibles en una variable.

create or replace trigger status_tgr
before insert on booked_tickets
for each row
follows tkt_capitalize_tgr
declare
availSeats int;
begin
select availSeats = sleeper_seats from AVAILABLE_SEATS where train_no = :new.train_no;
update AVAILABLE_SEATS set sleeper_seats = availSeats – (:new.no_of_seats) where train_no = (:new.train_no);
end;
/

Error

Error en la línea 4: Declaración SQL ignorada

before insert on booked_tickets
for each row
follows tktcapitalizetgr
declare
availSeats int;
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El error probablemente se deba al hecho de que la palabra clave follows no es válida en este contexto. La palabra clave follows se utiliza para especificar el orden de los desencadenadores y no debe utilizarse en un desencadenador before. La sintaxis correcta debería ser:

    create or replace trigger status_tgr
    before insert on booked_tickets
    for each row
    declare
    availSeats int;
    begin
    select availSeats = sleeper_seats from AVAILABLE_SEATS where train_no = :new.train_no;
    update AVAILABLE_SEATS set sleeper_seats = availSeats - (:new.no_of_seats) where train_no = (:new.train_no);
    end;
    /
    

Comments are closed.