【问题标题】:unable to store the value of column in variable, SQL TRIGGERS无法将列的值存储在变量 SQL TRIGGERS 中
【发布时间】:2021-12-29 23:25:05
【问题描述】:

我创建的用于存储门票信息的booked_tickets 表

CREATE TABLE BOOKED_TICKETS( 
PNR_NO  NUMBER PRIMARY KEY, 
USER_ID  NUMBER,
TRAIN_NO  NUMBER,
SOURCE   VARCHAR2(50),  
DESTINATION  VARCHAR2(50),  
DATE_OF_ARRIV  DATE,
DATE_OF_BOOKING  DATE,
STATUS   VARCHAR2(50),
NO_OF_SEATS NUMBER,
BOOKED_CLASS  VARCHAR2(50),
SEAT_NO   NUMBER);

Available_seats 表用于存储每个可用班级的可用座位信息。

AVAILABLE_SEATS:
CREATE TABLE AVAILABLE_SEATS(
TRAIN_NO  NUMBER PRIMARY KEY,
SLEEPER_SEATS   NUMBER,
ONE_TIER_SEATS  NUMBER,
TWO_TIER_SEATS  NUMBER,
THREE_TIER_SEATS NUMBER,
GENERAL_SEATS  NUMBER);

这是将可用席位的值存储到变量中的问题所在的查询。

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 at line 4: PL/SQL: SQL Statement ignored

2. before insert on booked_tickets
3. for each row
4. follows tkt_capitalize_tgr
5. declare
6. availSeats int;

【问题讨论】:

    标签: sql database plsql oracle11g triggers


    【解决方案1】:

    如果您尝试将select 值转换为局部变量,则语法为

    select sleeper_seats 
      into availSeats
      from AVAILABLE_SEATS 
     where train_no = :new.train_no;
    

    但是,首先使用该局部变量或执行 select into 似乎没有意义,因为根据触发器中的逻辑,后续的 update 可以只使用 sleeper_seats

    update AVAILABLE_SEATS 
       set sleeper_seats = sleeper_seats - :new.no_of_seats
     where train_no = :new.train_no;
    

    不过,我的猜测是,您实际上希望触发器根据您未显示的 :new.booked_class 更新 available_seats 中的不同列。

    【讨论】:

      【解决方案2】:

      检查您的 tkt_capitalize_tgr 触发器,可能存在一些问题。

      【讨论】:

      • 没关系,现在问题已经解决,从 AVAILABLE_SEATS 中选择 class_name 进入availSeats where train_no = :new.train_no;这就是我现在用来存储价值的东西
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多