我有触发器在信用卡到期日期到期时提出异常。无论我插入什么日期,都会引发异常。有谁知道为什么会发生这种情况?
触发器:
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;
插入声明(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);
答案 0 :(得分:2)
您的检查错误,而不是>=
它应该是<=
!
:new.exp_date >= sysdate
答案 1 :(得分:0)
假设:exp_date
是insert语句中的第6个参数。
鉴于to_date
中的格式实际上与给定日期不匹配。
请检查:
select to_char(to_date('12-31-19','mm/dd/yyyy'), 'mm-dd-yyyy') from dual;
它给出了:
12-31-0019
因此它始终小于SYSDATE。
这可以解决您的问题:
to_date('12-31-19','mm-dd-yy')
甚至更好(不要混淆世纪):
to_date('12-31-2019','mm-dd-yyyy')