如何从oracle触发器登录数据库输出消息

时间:2018-03-04 15:01:17

标签: oracle triggers output

触发

CREATE OR REPLACE TRIGGER USER_LOGON_TRIGG
AFTER LOGON ON DATABASE 
BEGIN
     dbms_output.put_line('Hello, ' || USER || '. Now is ' || SYSDATE );
END;

编译成功。 但登录后没有任何显示。我做错了什么?

1 个答案:

答案 0 :(得分:0)

DBMS_OUTPUT有三个部分。首先,需要启用它以便记录“put”数据。您可以在触发器中执行此操作。

CREATE OR REPLACE TRIGGER USER_LOGON_TRIGG
AFTER LOGON ON schema
BEGIN
     dbms_output.enable;
     dbms_output.put_line('Hello, ' || USER || '. Now is ' || SYSDATE );
END;
/

第二部分是'put'。第三部分是'获得'。客户端(例如SQL * Plus)在后台执行GET / GET_LINES以将数据提取到客户端。然后它可以将这些值推送到它正在使用的任何输出。

如果启用并输入触发器,则数据将位于dbms_output缓冲区中。在SQL * Plus中的SET SERVEROUTPUT ON之后,下一个数据库操作之后应该是获取dbms_output缓冲区。应该看到它,但它可能不会发生在您期望的地方。尝试使用EXEC NULL作为虚拟数据库操作执行SET SERVEROUTPUT ON。

=============================================== ================ 编辑以添加演示:

>CREATE OR REPLACE TRIGGER USER_LOGON_TRIGG
  2  AFTER LOGON ON schema
  3  BEGIN
  4       dbms_output.enable;
  5       dbms_output.put_line('Hello, ' || USER || '. Now is ' || SYSDATE );
  6  END;
  7  /

Trigger created.

>conn ####
Enter password:
Connected.
>exec null
Hello, ####. Now is 05-MAR-18

PL/SQL procedure successfully completed.

Elapsed: 00:00:00.00