PL SQL Trigger, когда обновление acolumn обновляет другой столбец в другой таблице - PullRequest
0 голосов
/ 12 января 2019
CREATE OR REPLACE TRIGGER UPDATE_FAC_CUS_MST_MREC_TRG   BEFORE UPDATE
   OF CUST_CODE ON fac_cus_mst   FOR EACH ROW 
     DECLARE
       v_cust_code VARCHAR2(25); 
    BEGIN
       SELECT cust_code
         INTO v_cust_code 
         FROM fac_cus_mst
        WHERE cust_code = :new.cust_code;
          UPDATE money_rec
          SET cust_code = v_cust_code
         WHERE REF = :new.REF; 
   END; 
  /

Я пробовал об этом коде, но, не сработал, верните мне ошибку Как

10/18 PLS-00049: переменная неверного связывания 'NEW.REF' SQL> CREATE OR
ЗАМЕНИТЕ TRIGGER UPDATE_FAC_CUS_MST_MREC_TRG 2 ДО ОБНОВЛЕНИЯ
CUST_CODE ON fac_cus_mst 3 ДЛЯ КАЖДОЙ СТРОКИ 4 ОБЪЯВЛЯЕТ 5
v_cust_code VARCHAR2 (25); 6 НАЧАТЬ 7 ВЫБРАТЬ cust_code 8
INTO v_cust_code 9 ОТ fac_cus_mst 10 ГДЕ
cust_code =: new.cust_code 11 ОБНОВЛЕНИЕ money_rec 12
SET cust_code = v_cust_code 13 WHERE REF =: new.REF; 14 КОНЕЦ; 15 /

Предупреждение: триггер создан с ошибками компиляции.

SQL> show error Errors for TRIGGER UPDATE_FAC_CUS_MST_MREC_TRG:


  LINE/COL ERROR
   -------- ----------------------------------------------------------------- 4/5      PL/SQL: SQL Statement ignored 8/8      PL/SQL: ORA-00933: SQL command
   not properly ended 10/18    PLS-00049: bad bind variable 'NEW.REF'
   SQL>
   CREATE OR REPLACE TRIGGER UPDATE_FAC_CUS_MST_MREC_TRG   BEFORE UPDATE
   OF CUST_CODE ON fac_cus_mst   FOR EACH ROW 
    DECLARE
       v_cust_code VARCHAR2(25); BEGIN
       SELECT cust_code
         INTO v_cust_code 
         FROM fac_cus_mst
        WHERE cust_code = :new.cust_code;
          UPDATE money_rec
          SET cust_code = v_cust_code
        WHERE REF = :new.REF; 
END; 
/

1 Ответ

0 голосов
/ 12 января 2019

Независимо от ошибки, с которой вы столкнулись, проблема с вашим триггером. Вы не можете писать запросы к одной и той же таблице внутри триггера, это приведет к «Ошибка таблицы» ошибка.

CREATE OR REPLACE TRIGGER UPDATE_FAC_CUS_MST_MREC_TRG   
BEFORE UPDATE
   OF CUST_CODE ON fac_cus_mst  FOR EACH ROW 
    BEGIN
          UPDATE money_rec
            SET cust_code  = :new.cust_code
         WHERE REF = :new.REF; 
   END; 
  /

Вам нужен только простой оператор обновления и ссылка на :new.cust_code прямо в нем.

Что касается вашей ошибки PLS-00049: bad bind variable 'NEW.REF', похоже, что в вашей money_rec таблице нет , по-видимому, столбец REF. Используйте правильное имя столбца вместо него, ваш триггер должен работать нормально.

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