我正在创建汽车租赁/汽车共享的数据库。我想要create trigger检查是否有活动的租赁,通过检查end of same是否不为空,如果为空,如果不为空,如果它具有相同的汽车id。我没有更多的想法如何创造触发器。谢谢你的建议。
create or replace TRIGGER act_rental_trigger
BEFORE INSERT ON "RENTALS"
FOR EACH ROW
DECLARE
end_of_rental date;
BEGIN
IF inserting THEN
IF end_of_rental IS NOT NULL THEN
IF (EXISTS (
SELECT * FROM rentals
where rentals.car_id = :NEW.car_id ))
THEN
dbms_output.put_line('You can't!');
END IF;
END IF;
END IF;
END;发布于 2021-01-10 04:13:50
为什么触发?如果有人想租车,你为什么不在申请中这样做呢?
触发器应为raise_application_error。不要使用dbms_output.put_line,因为没有前端应用程序(我用过)能够将其内容显示给用户(我假设您不会直接在SQL*Plus或SQL Developer中操作数据,而是例如Apex或Forms应用程序)。
此外,你想要做的方式会导致变化表错误--你要插入到租用表中并从中选择(在触发器中);这是不允许的,因为表正在发生变化。是的,有一些方法可以避免它,但大多数情况下,你会发现这个错误,你必须问问自己,你做得是否正确。在我看来,你这样做是错的。
顺便问一下,你这么说是什么意思:
...通过检查end of then是否不为null,如果为NULL,则检查是否为null
哈?
https://stackoverflow.com/questions/65645229
复制相似问题