在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 /
Run Code Online (Sandbox Code Playgroud)
hello.pl的内容是: -
BEGIN
DBMS_OUTPUT.PUT_LINE('hello world');
END;
Run Code Online (Sandbox Code Playgroud)
并且......结果非常好,因为插入记录时屏幕上会显示hello.pl的内容.
现在,查询是 - 当我更改hello.pl文件的内容后,从oracle退出,然后再次登录,它不显示更新的内容,而是显示以前的内容..
我注意到,如果我放下触发器并再次创建它,那么它工作正常..它为什么会这样发生..这个问题的解决方案是什么..
这是因为它的@工作方式与#includeac/c ++预处理器非常相似,即在编译时SQL*Plus插入文件的内容.hellp.pl
如果要在触发器触发时输出文件的内容,您可能需要查看utl_file.
但是你可能更容易创建类似的包
create or replace package trigger_content as
text varchar2(100);
end;
/
Run Code Online (Sandbox Code Playgroud)
然后,您可以动态更改文本的值:
exec trigger_content.text := 'hello world';
Run Code Online (Sandbox Code Playgroud)
并打印文本的值
dbms_output.put_line(trigger_content.text);
Run Code Online (Sandbox Code Playgroud)
但是,后一种"解决方案"在会话中不起作用.
| 归档时间: |
|
| 查看次数: |
282 次 |
| 最近记录: |