我創建的用于存盤門票資訊的 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;
uj5u.com熱心網友回復:
如果您嘗試將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;
但是,我的猜測是,您實際上希望觸發器available_seats根據:new.booked_class未顯示的列更新不同的列。
uj5u.com熱心網友回復:
檢查您的 tkt_capitalize_tgr 觸發器,那里可能存在一些問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/361372.html
上一篇:檢索用戶明智的累計達到記錄
