我有这两个表
我如何创建触发器,以使每次有人发表文章时文章总数增加1?
CREATE TRIGGER Art_Up
AFTER INSERT ON Article
FOR EACH ROW
UPDATE Project
SET TotArticle = TotArticle + 1
WHERE paperID = NEW.PaperID;
但是,它给了我这个错误PLS-00103:遇到符号“;”
答案 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;