这是我用于演示目的的简单PL / SQL代码。
create table cust(cname varchar(10));
set SERVEROUTPUT ON;
create or replace trigger tgr
before insert on cust
for each row
enable
begin
dbms_output.put_line('Trigger hit on insert');
end;
/
insert into cust values('John');
OUTPUT:/
Table CUST created
Trigger TGR compiled
1 row inserted // *EXPECTING* Trigger hit on insert
答案 0 :(得分:0)
请勿在{{1}}内使用DBMS_OUTPUT.PUT_LINE
来检查是否已被解雇。即使您使用trigger
,某些IDE(如SQL developer
)也可能无法输出消息。
但它可以在SET SERVEROUTPUT ON
上运行。当我尝试时,它确实在sqlplus中显示消息。因此,这不是数据库或触发器的问题。
sqlplus
如果您在交易中发出SQL> insert into cust values('John');
Trigger hit on insert
或commit
,则消息可能会显示在rollback
中。
我建议,如果你可以创建一个日志表并尝试在其中插入记录而不是使用sql developer
,那就更好了。
dbms_output
答案 1 :(得分:0)
您无法使用 DBMS_OUTPUT.PUT_LINE ,因为当您向表中插入数据时,没有显示触发器执行的提示或屏幕。这适用于过程,函数,触发器。
不要在表格中使用提交。它会引发异常。如果你想使用commit然后触发 pragma autonomous_transaction (我建议不要使用commit.it会自动提交)。
另外,请确保您不要在触发器中修改同一个表。它也会因为改变数据而抛出异常。
示例代码
create table cust(cname varchar(10));
create table log(log varchar(10));
create or replace trigger tgr
before insert on cust
for each row
enable
begin
insert into log values('test');
end;
/