sql >> Databáze >  >> RDS >> Oracle

PLS-00049 ŠPATNÁ VAZBA PROMĚNNÁ

Máte na mysli vazbu varibales s 'A' na začátku a bez podtržítka, například :OLD.AWitnessID , ale sloupec tabulky je pouze WITNESS_ID . Takže se neshodují a generují tuto chybu. Nemáte ani WITNESS_TYPE sloupec.

Poté do insert máte také špatné názvy sloupců v auditní tabulce. Proměnnou také nastavíte na Update ale zkontrolujte UPDATE - Pamatujte, že u hodnot řetězců se při porovnání rozlišují velká a malá písmena.

Toto se zkompiluje s vaším schématem:

CREATE OR REPLACE TRIGGER TRG_PLAUDWIT
AFTER INSERT OR DELETE OR UPDATE ON PL_WITNESS
FOR EACH ROW
DECLARE
  v_trigger_task varchar2(10);
BEGIN
  IF UPDATING THEN
    v_trigger_task := 'UPDATE';
  ELSIF DELETING THEN
    v_trigger_task := 'DELETE';
  ELSIF INSERTING THEN
    v_trigger_task := 'INSERT';
  ELSE
    v_trigger_task := NULL;
  END IF;

  IF v_trigger_task IN ('DELETE','UPDATE') THEN
    INSERT INTO PLAUDWIT (AUD_AWitnessID, AUD_AWitnessType, AUDIT_USER,
      AUDIT_DATE, AUDIT_ACTION)
    VALUES (:OLD.Witness_ID, :OLD.FK1_WITNESS_TYPE_ID, UPPER(v('APP USER')),
      SYSDATE, v_trigger_task);
  ELSE    
    INSERT INTO PLAUDWIT (AUD_AWitnessID, AUD_AWitnessType, AUDIT_USER,
      AUDIT_DATE, AUDIT_ACTION)
    VALUES (:NEW.Witness_ID, :NEW.FK1_WITNESS_TYPE_ID, UPPER(v('APP USER')),
      SYSDATE, v_trigger_task);
  END IF;
END TRG_PLAUDWIT;
/

SQL Fiddle nevykazuje žádné chyby kompilace .




  1. Postgres jednoduchá „kontingenční“ tabulka

  2. Aktualizujte dávku pomocí CodeIgniter

  3. Nesprávné výsledky s Merge Join

  4. Problém převodu Oracle SQL DATE pomocí iBATIS přes Java JDBC