触发
CREATE OR REPLACE TRIGGER USER_LOGON_TRIGG
AFTER LOGON ON DATABASE
BEGIN
dbms_output.put_line('Hello, ' || USER || '. Now is ' || SYSDATE );
END;
编译成功。 但登录后没有任何显示。我做错了什么?
答案 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