【问题标题】:how to take one attribute value from A to B table after updating B table?更新B表后如何从A表中取一个属性值到B表?
【发布时间】:2019-04-27 10:37:09
【问题描述】:

我有两张桌子:paperpaperselection

在我的代码中,我想将 rank 属性高于 4 的任何纸张从 paper 表放入 paperselection 表中

之后,我要做的是在将值插入paperselection 表后,将主键(papNo)从paper 带到paperselection

我这里有两个触发器

---first trigger---
CREATE OR REPLACE TRIGGER paperselection_tr
  BEFORE INSERT OR UPDATE OF Rank ON paper
  FOR EACH ROW
BEGIN
 IF :NEW.rank > 4
   THEN insert into paperselection (Papno, journalno, title, pdate)
values (:old.papno, :new.journalno, :new.title, :new.pdate);
END IF;
END;

---second trigger----
CREATE OR REPLACE TRIGGER paperselection_tr2
  After insert or update ON paperselection
  FOR EACH ROW
BEGIN
update paperselection
set paperselection.papno = paper.papno
where paper.title = paperselection.title;
end;

由于我的表格设计,我无法将:old.papno 设置为:new.papno

但它不断给出我的错误:

LINE/COL  ERROR
--------- -------------------------------------------------------------
2/1       PL/SQL: SQL Statement ignored
4/7       PL/SQL: ORA-00904: "PAPER"."TITLE": invalid identifier
Errors: check compiler log

【问题讨论】:

  • 您的触发器paperselection_trpapno 插入到paperselection 表中,那么您的第二个触发器paperselection_tr2 的意义何在?
  • 嗯,好吧,当您将记录插入paper 时,您试图解决的问题是:old.papno 为空?如果是这样,您需要对此进行解释:“由于我的表格设计,我无法将 :old.papno 设置为 :new.papno。你的桌子设计怎么样???

标签: sql oracle plsql triggers


【解决方案1】:

第二个触发器对paper 表一无所知,因为它触发了After insert or update ON paperselection,并且因为您没有进一步引用其中的paper 表。

因此它不喜欢这样:

set paperselection.papno = paper.papno
where paper.title = paperselection.title;

我认为你想要这个

---second trigger----
CREATE OR REPLACE TRIGGER paperselection_tr2
  After insert or update ON paperselection
  FOR EACH ROW
BEGIN
update paperselection
set paperselection.papno = 
   (SELECT paper.papno
    FROM paper    
    WHERE paper.title = :new.title
   );
end;

但只有在paperselection 中有重复行时,这才是逻辑操作。

【讨论】:

    猜你喜欢
    • 2011-09-28
    • 2017-08-08
    • 1970-01-01
    • 1970-01-01
    • 2014-05-10
    • 1970-01-01
    • 2013-10-01
    • 1970-01-01
    • 2021-03-16
    相关资源
    最近更新 更多