こんにちは私は次のスクリプトを持っています
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
予約日を同じ部屋の古い予約日と一致させて、エラーメッセージを表示しようとしています。
アップデート
新しいエラー、返される行が多すぎるようです。一度に1つずつ実行するにはどうすればよいですか。
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'