Я бы отправил электронное письмо самому себе. Например:
create or replace trigger my_tab_upd
after update of status on my_tab
for each row
begin
utl_mail.send (sender => 'me@company.com',
recipients => 'me@company.com',
subject => 'MY_TAB status changed',
message => 'old = ' || :old.status ||', new = ' || :new.status
);
end;
DBMS_ALERT
пример: в схеме Скотта я хочу уведомить мою хранимую процедуру о том, что что-то изменилось в таблице EMP
, а затем сделать что-то (Я просто выведу сообщение).
Сначала создайте триггер; имя оповещения alert_emp
и будет использоваться позже в хранимой процедуре:
SQL> create or replace trigger trg_au_emp
2 after update on emp
3 for each row
4 begin
5 dbms_alert.signal
6 ('alert_emp', 'Salary changed for ' || :new.ename ||
7 ' from ' || :old.sal ||
8 ' to ' || :new.sal);
9 end;
10 /
Trigger created.
Процедура:
SQL> create or replace procedure p_test is
2 l_msg varchar2(200);
3 l_status number;
4 begin
5 dbms_alert.register ('alert_emp');
6 dbms_alert.waitone ('alert_emp', l_msg, l_status);
7 dbms_output.put_line(l_msg ||': '|| l_status);
8 end;
9 /
Procedure created.
Теперь выполните процедуру:
SQL> exec p_test;
Здесь он просто ожидает, что что-то произойдет в таблице EMP. В другой сессии Я обновляю таблицу. Фиксация обязательна ; в противном случае ничего не происходит. p_test
все еще будет ожидать.
update emp set sal = 1000 where empno = 7369;
commit;
В первом сеансе после выполнения commit
на экране отображается следующее: PL / SQL процедура успешно завершена.
Salary changed for SMITH from 800 to 1000: 0
PL/SQL procedure successfully completed.
SQL>