2017-04-15 2 views
0

があります。私はoracle apexでアプリケーションを作っていました。容量(cap)が0である場合、このトリガーは、passenger_idが有効でないため、新しく挿入されたタプルを削除する必要があります。私はここで何をやったのですか?ここで容量(cap)が0の場合、このトリガーは新しく挿入されたタプルを削除します。私はここで何をやったのですか?ここにコード

あなたは、挿入する前にこれをやっているコード

create or replace trigger Ticket_katbo 
before insert on passenger 
for each row 
declare 
newcap number; 
cap number; 
flightpk number; 
begin 
flightpk := :new.flight_fid; 
select flight_capacity into cap from flight where fid = flightpk; 
if (cap>0) THEN 
newcap := cap-1; 
update flight set flight_capacity = newcap where fid = flightpk ; 
ELSIF (cap=0 or cap = NULL) THEN 
Delete from passenger where passenger_id = :new.passenger_id; 
END IF; 
end; 
+0

何が問題ですか? –

+0

私はapexのページでバリデーションを作成し、トランザクションを発生させる代わりにエラーを表示して、これをデフォルトのトリガで捕捉することをお勧めします。それがバリデーションの目的です。 – Tom

答えて

0

です。容量がない場合はエラーを発生させてください:

create or replace trigger Ticket_katbo 
before insert on passenger 
for each row 
declare 
    v_capacity number; 
begin 
    select flight_capacity into v_capacity 
    from flight 
    where fid = :new.flight_fid; 

    if (cap <= 0) then 
     raise_application_error(-20001, 
           'No capacity for another passenger'); 
    end if; 

    update flight 
     set flight_capacity = flight_capacity - 1 
     where fid = :new.flight_fid; 
end; 
+0

ありがとうございました! @Gordon Linoff –

関連する問題