Запрос на триггеры - PullRequest
       10

Запрос на триггеры

1 голос
/ 12 мая 2010

Создан один триггер в Oracle ..

SQL> CREATE OR REPLACE TRIGGER student_after_insert
  2  AFTER INSERT
  3  ON student
  4  FOR EACH ROW
  5  BEGIN
  6     @hello.pl
  9  END student_after_insert;
 10  /

Содержимое hello.pl : -

BEGIN
   DBMS_OUTPUT.PUT_LINE('hello world');
END;

И .. результат довольно хороший, так как содержимое hello.pl отображается на экране при вставке записи ..

Теперь запрос: - Когда я изменяю содержимое файла hello.pl, после выхода из oracle и повторной регистрации, он не показывает обновленное содержимое, вместо этого он показывает предыдущее содержимое ..

Я заметил, что, если я отпущу триггер и создам его снова, то он работает нормально .. Почему это происходит так ... И каково решение этой проблемы ..

Ответы [ 3 ]

6 голосов
/ 12 мая 2010

Это происходит потому, что @ работает так же, как #include в препроцессоре ac / c ++, то есть SQL*Plus вставляет содержимое файла hellp.pl в время компиляции .

Если вы хотите выводить содержимое файла при срабатывании триггера, вы можете посмотреть utl_file.

Но вам, вероятно, проще создать пакет, подобный

create or replace package trigger_content as 
  text varchar2(100); 
end;
/

Затем вы можете динамически изменять значение текста:

 exec trigger_content.text := 'hello world';

и напечатайте значение текста с помощью

dbms_output.put_line(trigger_content.text);

Однако последнее «решение» не работает между сеансами.

0 голосов
/ 13 мая 2010

Посмотрите EXECUTE IMMEDIATE и DBMS_SQL для динамического кодирования.

0 голосов
/ 12 мая 2010

@hello.pl просто включает текст hello.pl в тело команды CREATE ... TRIGGER. Нет ссылки из Oracle на файл.

Обратите внимание, что в общем случае сервер Oracle находится на другом компьютере и не имеет доступа к содержимому вашего жесткого диска.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...