【发布时间】:2017-05-07 07:01:00
【问题描述】:
我的数据库是酒店预订系统的数据库。在进行任何新预订之前,我的触发器将根据当前日期是否介于房间的 check_in 和 check_out 值之间来更改房间的可用性状态。
我在尝试使用插入语句触发触发器时收到错误未找到数据。如有任何帮助,我将不胜感激。
错误:
SQL 错误:ORA-01403:未找到数据 ORA-06512: 在 "USER.ROOM_STATUS" 第 5 行 ORA-04088 执行触发器 'USER.ROOM_STATUS' 期间出错 - 未找到数据 *原因:没有从对象中找到数据
触发器:
create or replace trigger room_status
before insert on reservation
for each row
declare
status_in room.status%type;
error1 exception;
begin
select status into status_in
from room
where room.room_id = :old.room_id;
if sysdate between :old.check_in and :old.check_out then
update room
set status = 'F'
where room_id = :old.room_id;
else
update room
set status = 'T'
where room_id = :old.room_id;
end if;
exception
when error1 then
raise_application_error(-20100,'Insert Cancelled');
end;
插入语句:
insert into reservation
values(reservation_sequence.nextval,to_date('05-03-2017','mm/dd/yyyy'),
to_date('05-07-2017','mm/dd/yyyy'), 116, 170);
表格:
create table roomType
(room_type varchar2(20) constraint roomType_pk primary key,
room_rate number(4));
create table room
(room_id number(3) constraint room_pk primary key,
room_type varchar2(15) constraint room_fk references roomType,
status char(1));
create table guest
(guest_id varchar2(5) constraint guest_pk primary key,
first_name varchar2(20),
last_name varchar2(20),
email varchar2(30),
phone varchar2(10));
create table reservation
(reservation_id number(6) constraint reservation_pk primary key,
check_in date,
check_out date,
room_id number(3),
guest_id varchar2(5),
foreign key (room_id) references room(room_id),
foreign key (guest_id) references guest(guest_id));
【问题讨论】:
标签: oracle plsql oracle11g triggers