Oracle SQL ORA-24344 Успех с ошибкой компиляции при использовании триггера - PullRequest
0 голосов
/ 18 октября 2018

, пожалуйста, помогите в любой ошибке с помощью следующего кода?

Код ошибки обнаружения ORA-24344

CREATE OR REPLACE TRIGGER Table_TRG
AFTER INSERT OR UPDATE
ON Table_A
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW 
BEGIN 
    IF (:NEW.EQP_ID <> :OLD.EQP_ID AND :NEW.OP_ID <> :OLD.OP_ID)THEN
        INSERT INTO Table_B
                (EQP_ID, OP_ID, SV_RECORD, UPDATE_TIME)
                VALUES
                (:NEW.EQP_ID, :NEW.OP_ID, :NEW.SV_RECORD, :NEW.UPDATE_TIME);
        ELSE
                UPDATE INTO Table_B
                SET :OLD.SV_RECORD = :NEW.SV_RECORD,
                :OLD.EQP_ID = :NEW.EQP_ID,
                :OLD.OP_ID = :NEW.OP_ID,
                :OLD.UPDATE_TIME = :NEW.SYSTIMESTAMP;
    END IF;
END;

Заранее спасибо.

1 Ответ

0 голосов
/ 18 октября 2018

В вашем операторе обновления были синтаксические ошибки. Кроме того, REFERENCING NEW AS NEW OLD AS OLD не требуется.

В вашем заявлении на обновление не должно быть op_id и eqp_id в where clause вместо SET?

CREATE OR REPLACE TRIGGER table_trg AFTER
     INSERT OR UPDATE ON table_a
     FOR EACH ROW
        BEGIN 
IF (:new.eqp_id <>:old.eqp_id AND :new.op_id <>:old.op_id ) THEN
     INSERT INTO table_b (
          eqp_id,
          op_id,
          sv_record,
          update_time
     ) VALUES (
          :new.eqp_id,
          :new.op_id,
          :new.sv_record,
          :new.update_time
     );
ELSE 
 UPDATE table_b
   SET sv_record = :new.sv_record,
    update_time  = systimestamp
 WHERE eqp_id    = :new.eqp_id   --change the columns in set and where appropriately.
   AND op_id     = :new.op_id,
     END IF;
end;
/
...