【问题标题】:PL/SQL Trigger not displaying?PL/SQL 触发器不显示?
【发布时间】:2018-05-02 12:01:56
【问题描述】:

所以我试图测试的简单代码是这样的:

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,如果这有什么不同的话。

【问题讨论】:

    标签: oracle plsql plsqldeveloper database-trigger


    【解决方案1】:

    我认为您在错误的位置检查输出。

    转到查看-> Dbms 输出

    【讨论】:

      【解决方案2】:

      您的代码没有问题,除了表名的拼写错误应为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;
      

      【讨论】:

        【解决方案3】:

        如果您从当前使用的 GUI 切换到良好的旧 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>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-08-06
          • 1970-01-01
          • 2016-03-17
          • 1970-01-01
          • 1970-01-01
          • 2018-04-01
          • 2017-09-14
          • 2021-02-25
          相关资源
          最近更新 更多