插入后oracle触发打印

时间:2017-10-13 05:35:43

标签: oracle

我刚开始学习触发器。我想制作一个触发器,在插入测试后给用户一个通知'成功插入'。

这是我的代码。

create table test (id number, name varchar2(30));

create trigger tr_test 
after insert on test
for each row
begin
dbms_output.put_line('insert successfully');
end;
/

insert into test values(1, 'john');

我得到的错误是这样的:

ERROR at line 1:
ORA-04091: table YUFENG.TEST is mutating, trigger/function may not see it
ORA-06512: at "YUFENG.TR_TEST", line 3
ORA-04088: error during execution of trigger 'YUFENG.TR_TEST'

有人能指出错误并告诉我如何修改代码吗?

很抱歉,我没有注意到有很多简单的错误导致查询无法运行。我的原始代码在触发器中声明变量,但我没有发布它。我想这可能就是我错误变异的原因。

CREATE or REPLACE TRIGGER TR_TEST
AFTER INSERT ON TEST
FOR EACH ROW
DECLARE a VARCHAR2(30);
BEGIN
SELECT ID INTO a FROM TEST WHERE ID=:NEW.ID;
DBMS_OUTPUT.PUT_LINE('insert successfully');
END;
/

3 个答案:

答案 0 :(得分:0)

您的代码不完整。 CREATE TABLE上缺少“)”。 推杆拼写错误。它应该是PUT_LINE。

在触发器中使用DBMS_OUTPUT是一个非常糟糕的主意。用户可能正在使用不能或不能处理DBMS_OUTPUT的客户端(与sqlplus不同)

答案 1 :(得分:0)

after替换为before,如下所示,表格也需要')'丢失。

create table test (id number, name varchar2(30));


create or replace trigger tr_test 
before insert on test
for each row
begin
dbms_output.put_line('insert successfully');
end;
/

也很好的想法你在插入

中的特定列
insert into test (id,name) values(1, 'john')
/
commit
/

答案 2 :(得分:0)

只有在打开它时才会显示输出(SQL Plus,SQL Developer):

上设置serveroutput