PL/SQL 触发器不显示?
Posted
技术标签:
【中文标题】PL/SQL 触发器不显示?【英文标题】:PL/SQL Trigger not displaying? 【发布时间】: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,如果这有什么不同的话。
【问题讨论】:
【参考方案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>
【讨论】:
以上是关于PL/SQL 触发器不显示?的主要内容,如果未能解决你的问题,请参考以下文章
为啥不允许在 PL/SQL 触发器中使用 ROLLBACK 语句,但 RAISE_APPLICATION_ERROR 是?
Oracle笔记4-pl/sql-分支/循环/游标/异常/存储/调用/触发器
条件 old 不等于 new 的 Oracle 触发器以错误 PLS-00049、PL/SQL: ORA-00933 结束