我在mysql中编写了一个触发器,用于检查一个人是否能够检出另一个库项目。我设置的结帐限制是3.我需要将其转换为Oracle触发器,但存在很多问题。mysql触发器到oracle触发器
这里是我的MySQL代码:
DELIMITER //
DROP TRIGGER IF EXISTS library.CheckBorrowsTable//
CREATE TRIGGER CheckBorrowsTable
BEFORE INSERT ON library.Borrows
FOR EACH ROW
BEGIN
IF ((SELECT COUNT(*) FROM library.Borrows WHERE libraryID = new.libraryID) >= 3)THEN
SET new = NULL;
END IF;
END//
DELIMITER ;
这里是我的Oracle代码:
IF((SELECT COUNT(libraryID) FROM Borrows WHERE libraryID = :NEW.libraryID) >= 3) THEN
:NEW = NULL;
END IF;
有我的Oracle代码,但Oracle快捷版其他部分增加的部分(开始,结束等...)
您应该注意,在多用户场景中,这将不起作用 - 两个会话可能会为同一个赞助人插入行,并且两个会将赞助人表更新为相同的值,因为他们不会看到其他会话的更新。您需要序列化访问顾客表(例如,'CHECK_OUT'首先锁定行,更新它,插入书,然后提交(释放锁))。 – 2010-11-18 00:59:19