嗨,我有以下脚本ORACLE:比较两个瓦莱斯PL/SQL
CREATE OR REPLACE TRIGGER DOUBLE_BOOKINGS
BEFORE INSERT OR UPDATE ON BOOKING_SESSION
FOR EACH ROW
DECLARE
session_date TIMESTAMP;
session_room NUMBER;
BEGIN
SELECT start_session
INTO session_date --- EXISTING SESSION
FROM booking_session
WHERE bk_room = :NEW.bk_room;
IF session_date = :NEW.start_session THEN
RAISE_APPLICATION_ERROR
(-1000, 'Room is already booked');
END IF;
END;
/
脚本是假设,以配合在同一个房间,并同日已经存在的预订的任何新订单(停止重复预订)
但是它无法正常工作。
SQL> INSERT INTO BOOKING_SESSION VALUES (45,TO_TIMESTAMP('18/03/2012 10:00', '
INSERT INTO BOOKING_SESSION VALUES (45,TO_TIMESTAMP('18/03/2012 10:00', 'DD/MM
*
ERROR at line 1:
ORA-04098: trigger 'U1146815.ROOM_BOOKED' is invalid and failed re-validation
的start_session
是我保存预约的日期和时间,时间戳的数据库列名。 booking_session
是保存预订的名称,bk_room
是房间的号码。
因此在提交预订前,我试图将new
预订日期与同一房间的旧预订日期相匹配,然后显示错误消息。
更新
新的错误,似乎正在返回太多行我该怎么办一次一个。
ERROR at line 1:
ORA-01422: exact fetch returns more than requested number of rows
ORA-06512: at "U1146815.DOUBLE_BOOKINGS", line 5
ORA-04088: error during execution of trigger 'U1146815.DOUBLE_BOOKINGS'
是b是一个好主意,但是我仍然需要创建一个触发器,因为我被要求。看来我需要创建一个游标来一次处理一行。 –