我想构建一个触发器,它可以获得一本书的最低价格,如果新价格是最小值的5倍,则会触发。我的SELECT语句出错了。我认为这是因为我从同一张桌子中选择了触发器。
CREATE OR REPLACE TRIGGER check
BEFORE INSERT OR UPDATE ON book_type
FOR EACH ROW
DECLARE
newPrice number;
lowestPrice number;
topPrice number;
BEGIN
newPrice := NEW.price;
lowestPrice := (SELECT MIN(price) FROM book_type);
topPrice := (5 * lowestPrice);
IF (topPrice < newPrice) THEN
dbms_output.put_line('Error. Price too high.');
END IF;
END;
/
答案 0 :(得分:1)
首先,您不能以这种方式分配值。你需要这样的东西:
select min(price) into lowestPrice from book_type;
但是,您将看到的下一个问题是变异表错误(ORA-4091),因为您正在尝试从定义触发器的同一个表中进行选择。换句话说,触发器是在table book_type上定义的,并且您尝试从触发器中的table book_type中进行选择。 Oracle不允许使用此语句触发器。
最后,dbms_output在触发器中并不是非常有用,因为没有终端可以显示输出。通常,您会引发异常。