как взять одно значение атрибута из таблицы A в таблицу B после обновления таблицы B? - PullRequest
0 голосов
/ 27 апреля 2019

У меня две таблицы: paper и paperselection.

В моем коде я хочу поместить любую бумагу с атрибутом rank выше 4 из таблицы paper в таблицу paperselection

После этого я хочусделать, это взять первичный ключ (papNo) из этого paper в paperselection после вставки значения в таблицу 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

1 Ответ

0 голосов
/ 27 апреля 2019

Второй триггер ничего не знает о таблице 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...