在oracle中使用serveroutput后,消息无法在终端中打印

时间:2014-11-06 19:16:21

标签: sql oracle triggers sqlplus

我已经实现了以下触发器。触发器被触发,但不显示输出。在创建触发器后,我已经检查了启用serveroutput(SET SERVEROUTPUT ON)的时间。我在SQLPLUS中这样做我还没有下载oracle。

该线" bye bye"使用exit命令后将不会打印。

CREATE OR REPLACE TRIGGER log_off
BEFORE LOGOFF ON SCHEMA when (user=USER)
BEGIN
--DBMS_OUTPUT.ENABLE (buffer_size => NULL);

dbms_output.put_line('Bye bye');
END;
/     

请你帮我谢谢。

1 个答案:

答案 0 :(得分:0)

首先,你需要阅读:

  

有关DBMS_OUTPUT的Oracle文档

     

此程序包中的PUT过程和PUT_LINE过程使您可以   将信息放在缓冲区中,可以被另一个触发器读取,   程序或包。在单独的PL / SQL过程中或匿名   阻止,您可以通过调用显示缓冲的信息   GET_LINE过程和GET_LINES过程。

     

http://docs.oracle.com/cd/B28359_01/appdev.111/b28419/d_output.htm

SQL * Plus和所有其他开发人员工具在执行任何代码后隐式调用dbms_output.get_line,这就是您可以在屏幕上看到输出的原因。此外,您可以仅在代码完成执行后调用dbms_output.get_line,在您的情况下 - 触发器执行后,以及因此在注销后调用。但是在注销后你无法做任何事情 - 会话关闭。所以,你永远不会看到这个“最后的再见”。而不是那样,你可以创建日志表并在那里插入“再见”。