Как создать триггер для вызова процедуры с оператором обновления - PullRequest
0 голосов
/ 28 августа 2018

Мне нужно написать процедуру и обновить триггер. Когда какое-либо обновление выполняется на столе, триггер должен выполнить вызов процедуры. Процедура должна обновить изменения в другой таблице. В этой другой таблице старое значение, там должно быть обновленное значение.

1 Ответ

0 голосов
/ 28 августа 2018

То, что вы описали, звучит как обычная регистрация; вам не нужна процедура, триггер делает все это. Вот пример:

SQL> create table emp_log (empno number, sal_old number, sal_new number);

Table created.

SQL> create or replace trigger trg_bu_emp
  2    before update of sal on emp
  3    for each row
  4  begin
  5    insert into emp_log (empno, sal_old, sal_new)
  6    values
  7    (:new.empno, :old.sal, :new.sal);
  8  end;
  9  /

Trigger created.

SQL> select empno, ename, sal from emp where ename = 'KING';

     EMPNO ENAME             SAL
---------- ---------- ----------
      7839 KING             5000

SQL> update emp set sal = 7000 where ename = 'KING';

1 row updated.

SQL> select * from emp_log;

     EMPNO    SAL_OLD    SAL_NEW
---------- ---------- ----------
      7839       5000       7000

SQL>

[РЕДАКТИРОВАТЬ, после прочтения комментария]

Домашнее задание, а? Итак - создайте процедуру:

SQL> rollback;

Rollback complete.

SQL> create or replace procedure p_emp_sal_log
  2    (par_empno in emp.empno%type, par_sal_old in emp.sal%type,
  3                                  par_sal_new in emp.sal%type)
  4  is
  5  begin
  6    insert into emp_log (empno, sal_old, sal_new)
  7    values
  8    (par_empno, par_sal_old, par_sal_new);
  9  end;
 10  /

Procedure created.

SQL> create or replace trigger trg_bu_emp
  2    before update of sal on emp
  3    for each row
  4  begin
  5    p_emp_sal_log(:new.empno, :old.sal, :new.sal);
  6  end;
  7  /

Trigger created.

SQL> update emp set sal = 2000 where ename = 'KING';

1 row updated.

SQL> select * from emp_log;

     EMPNO    SAL_OLD    SAL_NEW
---------- ---------- ----------
      7839       5000       2000

SQL>
...