Oracle
 sql >> база данни >  >> RDS >> Oracle

PLS-00049 ЛОША ПРОМЕНЛИВА ЗА СВЪРЗВАНЕ

Имате предвид свързване на променливи с 'A' в началото и без долна черта, като :OLD.AWitnessID , но колоната на вашата таблица е просто WITNESS_ID . Така че те не съвпадат и генерират тази грешка. Дори нямате WITNESS_TYPE колона.

След това във вашия insert твърдения, че имената на колоните в таблицата за проверка също са грешни. Можете също да зададете променливата на Update но проверете за UPDATE - не забравяйте, че сравнението е чувствително към малки и главни букви за низови стойности.

Това се компилира с вашата схема:

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 не показва грешки при компилиране .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. JDBC връща празен набор от резултати

  2. Създайте изходен файл с плосък формат с фиксирана ширина от SQL заявка

  3. Групирайте редове въз основа на сумата на колоната

  4. Oracle XMLTYPE екстракт въз основа на стойност и състояние

  5. Функцията add_months на oracle се различава от Java