Oracle express редакция 10g проблема триггера во время выполнения - PullRequest
0 голосов
/ 03 апреля 2020

На рисунке ниже показана ошибка.

скриншот ошибки

Я создал этот простой триггер в pl sql.

 CREATE OR REPLACE TRIGGER TR6
 BEFORE UPDATE ON EMPLOYEE
 FOR EACH ROW
 BEGIN
 INSERT INTO PRAC14 (EMP_NO,EMP_NAME,EMP_SAL,DEPT_NO)
 VALUES(:OLD.EMP_NO,:OLD.EMP_NAME,:OLD.EMP_SAL,:OLD.DEPT_NO); 
 END;
 /

после запуска вышеуказанного кода он показывает TRIGGER CREATED. Затем, когда я обновляю свою таблицу сотрудников, как

UPDATE EMPLOYEE
SET EMP_SAL=3000
WHERE DEPT_NO=10

, я получаю это сообщение об ошибке

ORA-04098: триггер 'Username.TR' недействителен и не прошел повторную проверку .Я использую Oracle база данных 10g express редакция.

Ответы [ 2 ]

0 голосов
/ 03 апреля 2020

Я создал несколько триггеров для операции DML на одной таблице. Вот почему я получаю ошибку. Я сбросил все другие триггеры в таблице EMPLOYEE, кроме TR6, и это сработало.

Слава тебе @ Littlefoot.

0 голосов
/ 03 апреля 2020

Обратите внимание на разницу:

CREATE OR REPLACE TRIGGER TR6
                          ---

против.

ORA-04098: trigger 'Username.TR' is invalid 
                             --

Кажется, что в этой таблице есть еще один триггер, который является недействительным. Либо исправьте, либо отбросьте.


Проверьте триггеры, запустив

select table_name, trigger_name, trigger_type from user_triggers order by 1, 2;

[Пример]

Это основанный на таблице EMP Скотта. Триггер намеренно использует :old.empnox, столбец, который не существует. Это приводит к ошибке, которую вы получили:

SQL> create table prac14  as select empno, ename, sal, deptno
  2  from emp where 1 = 2;

Table created.

SQL>
SQL> create or replace trigger tr6
  2    before update on emp
  3    for each row
  4  begin
  5    insert into prac14 (empno,ename,sal,deptno)
  6    values(:old.empnox,:old.ename,:old.sal,:old.deptno);
  7  end;
  8  /

Warning: Trigger created with compilation errors.

SQL>
SQL> update emp set sal = 3000 where deptno = 10;
update emp set sal = 3000 where deptno = 10
       *
ERROR at line 1:
ORA-04098: trigger 'SCOTT.TR6' is invalid and failed re-validation

Но, если код триггера исправлен, все работает нормально:

SQL> create or replace trigger tr6
  2    before update on emp
  3    for each row
  4  begin
  5    insert into prac14 (empno,ename,sal,deptno)
  6    values(:old.empno,:old.ename,:old.sal,:old.deptno);
  7  end;
  8  /

Trigger created.

SQL>
SQL> update emp set sal = 3000 where deptno = 10;

3 rows updated.

SQL>

Я предлагаю вам опубликовать то же самое, выполненное в вашей базе данных.

...