クレジットカードの有効期限が切れたときに例外を発生させるトリガーがあります。どんな日付を挿入しても、例外が発生します。誰がなぜこれが起こっているのか知っていますか?条件に関係なく常にトリガーが発砲しています
トリガー:
create or replace trigger card_expired
before insert or update on invoice
for each row
begin
if :new.exp_date >= sysdate
then
raise_application_error(-20000,'Card is expired');
end if;
end;
INSERT文(exp_dateは12-31-19です):
insert into invoice(invoice_id, invoice_date, invoice_due, cc_type, cc_no,
exp_date, guest_id, reservation_id, admins_id)
values(invoice_sequence.nextval, sysdate, bill_due(100101), 'Visa',
'4838892900203328', to_date('12-31-2019','mm/dd/yyyy'), 110, 100101, 110);
挿入物には列リストがありません。だから、どこにあなたのコードがバグを招いているのかわからない。常に挿入リストを使用してください。あなたが1つを追加すると、予期しない動作がなくなることがあります。 –
また、あなたの年のリテラルには1世紀がありません。 19 = 1919か2019ですか?コードにあいまいさがない場合は、現在または将来、バグや予期しない動作が発生する可能性は非常に低くなります。 –
2019-12-31は確かにSYSDATEよりも大きいので、あなたのトリガーは働いています。 –