Странная проблема с выполнением триггера в Oracle - PullRequest
0 голосов
/ 22 мая 2018

Это довольно простой триггер, который выполняется, но не печатает простое сообщение:

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

1 Ответ

0 голосов
/ 22 мая 2018

Печать из триггера - плохая идея.В любом случае вы можете использовать:

SET SERVEROUTPUT ON;
INSERT INTO employee(s_name) VALUES('Kafka');
COMMIT;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...