sql >> Database >  >> RDS >> Oracle

PLS-00049 SLECHTE BINDVARIABELE

U verwijst naar bindvaribalen met een 'A' aan het begin en geen onderstrepingsteken, zoals :OLD.AWitnessID , maar uw tabelkolom is slechts WITNESS_ID . Ze komen dus niet overeen en genereren deze fout. Je hebt niet eens een WITNESS_TYPE kolom.

Dan in je insert verklaringen heb je ook de kolomnamen in de controletabel verkeerd. U stelt de variabele ook in op Update maar controleer op UPDATE - onthoud dat de vergelijking hoofdlettergevoelig is voor tekenreekswaarden.

Dit compileert met je schema:

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 toont geen compilatiefouten .




  1. SIN() Functie in Oracle

  2. Waarom wordt UPDATE gebruikt nadat SELECT 2 rijen heeft gewijzigd in plaats van één?

  3. Waarom werkt postgresql 9.1 niet met rails 3.0?

  4. Aantal weken en gedeeltelijke weken tussen twee dagen verkeerd berekend