创建触发器以更新值

时间:2019-05-05 12:40:58

标签: oracle plsql database-trigger

我有这两个表

  • 项目(projID,TotArticles)
  • 商品(prodID,ArticleID)

我如何创建触发器,以使每次有人发表文章时文章总数增加1?

CREATE TRIGGER Art_Up
AFTER INSERT ON Article
FOR EACH ROW
    UPDATE Project
    SET TotArticle = TotArticle + 1
    WHERE paperID = NEW.PaperID;

但是,它给了我这个错误PLS-00103:遇到符号“;”

1 个答案:

答案 0 :(得分:0)

一旦您写了projID,一次是prodID,并且您的触发器是paperID,您就弄乱了一些名字。触发器也没有begin ... end;。并且您没有处理添加表projID中不存在project的文章。您可以先检查它,也可以在更新后使用rowcount,如果它是0,则使用insert。更简单的是使用合并。

create or replace trigger art_up after insert on article for each row
begin
  merge into project
  using (select :new.projid projid from dual) src
  on (project.projid = src.projid)
  when matched then update set totarticles = totarticles + 1
  when not matched then insert (projID, TotArticles) values (:new.projid, 1);
end;

它可以工作,我测试了一些基本的插入物,但是完全不建议这样做,因为:

  • 在触发器中保留逻辑是一个坏主意,
  • 可以丢弃,禁用触发器,然后此信息可能会误导,虚假
  • 我们正在减慢插入操作的速度,
  • 此触发器无法处理delete,您应在其中减少文章总数。

使用简单的视图代替触发器:

create or replace view vw_project as select projID, count(1) total from article group by projid;