Это довольно простой триггер, который выполняется, но не печатает простое сообщение:
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, и они выполняются нормально.Кажется, это проблема только с триггерами (я также попробовал пару других).В чем может быть проблема?
Спасибо