这是一个非常简单的触发器,正在执行但不打印简单消息:
CREATE OR REPLACE TRIGGER t_emp
AFTER INSERT OR DELETE OR UPDATE ON employee
FOR EACH ROW
ENABLE
DECLARE
v_user VARCHAR2(20);
BEGIN
SELECT user INTO v_user FROM DUAL;
IF INSERTING THEN
DBMS_OUTPUT.PUT_LINE('One row inserted by ' || v_user);
ELSIF DELETING THEN
DBMS_OUTPUT.PUT_LINE('One row deleted by ' || v_user);
ELSIF UPDATING THEN
DBMS_OUTPUT.PUT_LINE('One row updated by ' || v_user);
END IF;
END;
/
Table:
CREATE TABLE employee
(
s_name varchar2(30)
);
简单的测试用例:
INSERT INTO employee
VALUES('Kafka');
然而,虽然它被执行但不会产生任何消息。现在这里有趣的地方。如果我运行一个像
这样的测试匿名块BEGIN
DBMS_OUTPUT.PUT_LINE('One row inserted by ' );
end;
/
我得到了触发器的第一个打印输出(当我执行DML语句时应该打印),然后是当前消息(“一行插入”)。我测试了其他pl / sql块,它们执行得很好。这似乎只是触发器的问题(我也试过了其他几个)。可能是什么问题?
谢谢
答案 0 :(得分:1)
从触发器打印是个糟糕的主意。无论如何你可以使用:
SET SERVEROUTPUT ON;
INSERT INTO employee(s_name) VALUES('Kafka');
COMMIT;