触发器中找不到数据

0 sql oracle

我的触发器有问题.它返回"没有找到数据",我不知道如何解决它.你能帮助我吗 ?

create or replace
TRIGGER nb_action
    AFTER INSERT ON Message
  FOR EACH ROW
DECLARE
    vAuteur integer;
  PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
    SELECT id_auteur INTO vAuteur FROM Message where id_message = :new.id_message;
  UPDATE Utilisateur SET nb_action=nb_action+1 where id_utilisateur=vAuteur;
END ;
Run Code Online (Sandbox Code Playgroud)

Jus*_*ave 5

不要在普通代码中使用自治事务.自动事务非常合适的唯一时间是您希望将数据写入日志表而不管底层操作是否提交的情况.例如,如果要记录错误,回滚事务并引发异常,则可能不希望回滚日志消息.你绝对不应该使用自治事务来解决变异表异常,我认为这是你在这里使用自治事务的原因,因为对Message表的查询会引发变异表异常,如果它不在自治事务中.

幸运的是,在这种情况下,不需要查询定义了触发器的表,也不需要使用自治事务.只是

create or replace trigger nb_action
  AFTER INSERT ON Message
  FOR EACH ROW
BEGIN
  UPDATE Utilisateur 
     SET nb_action=nb_action+1 
   where id_utilisateur=:new.id_auteur;
END ;
Run Code Online (Sandbox Code Playgroud)

  • 同意.但是,请更正更新语句的"where"部分:`:new.id_auteur`而不是`:new.id_message`. (2认同)