我已经实现了以下触发器。触发器被触发,但不显示输出。在创建触发器后,我已经检查了启用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;
/
请你帮我谢谢。
答案 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
,在您的情况下 - 触发器执行后,以及因此在注销后调用。但是在注销后你无法做任何事情 - 会话关闭。所以,你永远不会看到这个“最后的再见”。而不是那样,你可以创建日志表并在那里插入“再见”。