查询触发器

时间:2010-05-12 10:58:41

标签: oracle triggers

在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退出,然后再次登录,它没有显示更新的内容,而是显示以前的内容.. < / p>

我注意到,如果我放下触发器并再次创建它,那么它工作正常..为什么会这样发生..这个问题的解决方案是什么..

3 个答案:

答案 0 :(得分:6)

这是因为@与ac / c ++预处理器中的#include非常相似,即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);

但是,后一种“解决方案”不适用于各种会话。

答案 1 :(得分:0)

@ hello.pl只包含CREATE ... TRIGGER命令主体中的hello.pl文本。 Oracle与文件之间没有链接。

请注意,在一般情况下,Oracle服务器位于另一台计算机上,无法访问硬盘驱动器的内容。

答案 2 :(得分:0)

查看EXECUTE IMMEDIATE和DBMS_SQL以进行动态编码。