PL / SQL Trigger не отображается? - PullRequest
0 голосов
/ 02 мая 2018

Итак, простой код, который я пытаюсь проверить, таков:

set serveroutput on;

CREATE OR REPLACE TRIGGER dml_stud
   BEFORE INSERT OR UPDATE OR DELETE ON studenti
BEGIN
  dbms_output.put_line('DML change in table students !');

  CASE
     WHEN INSERTING THEN DBMS_OUTPUT.PUT_LINE('INSERT');
     WHEN DELETING THEN DBMS_OUTPUT.PUT_LINE('DELETE');
     WHEN UPDATING THEN DBMS_OUTPUT.PUT_LINE('UPDATE');
     -- WHEN UPDATING('NAME') THEN .... 
  END CASE;
END;
/

delete from students where id=10000;

Это вывод, который я получаю:

Trigger DML_STUD compiled


0 rows deleted.

Разве текст «УДАЛИТЬ» не должен находиться перед или после текста «0 строк удалено»?

Я использую последнюю версию Oracle SQL Developer, если это имеет какое-либо значение.

Ответы [ 3 ]

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

Нет проблем с вашим кодом, за исключением опечатки для имени таблицы, которая должна быть students вместо studenti. Вы можете использовать это:

CREATE OR REPLACE TRIGGER dml_stud
  BEFORE INSERT OR UPDATE OR DELETE ON students
BEGIN
  DBMS_OUTPUT.PUT_LINE('DML change in table students !');

  CASE
    WHEN INSERTING THEN
      DBMS_OUTPUT.PUT_LINE('INSERT');
    WHEN DELETING THEN
      DBMS_OUTPUT.PUT_LINE('DELETE');
    WHEN UPDATING THEN
      DBMS_OUTPUT.PUT_LINE('UPDATE');
  END CASE;
END;
0 голосов
/ 02 мая 2018

Если вы переключитесь с графического интерфейса пользователя, который вы используете в настоящее время, на старый добрый SQL * Plus, вы заметите, что все работает как положено:

SQL> create table students as select * from emp;

Table created.

SQL> create or replace trigger dml_stud
  2     before insert or update or delete on students
  3  begin
  4    dbms_output.put_line('DML change in table students !');
  5
  6    case
  7       when inserting then dbms_output.put_line('INSERT');
  8       when deleting  then dbms_output.put_line('DELETE');
  9       when updating  then dbms_output.put_line('UPDATE');
 10    end case;
 11  end;
 12  /

Trigger created.

SQL> delete from students where ename = 'KING';
DML change in table students !
DELETE

1 row deleted.

SQL>
0 голосов
/ 02 мая 2018

Я думаю, что вы проверяете вывод в неправильном месте.

Перейти к View-> Dbms Output

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...