author:skate
time:2007/12/28
今天开发同事说,在调用触发器的时候,提示触发器错误,我过去看看确实提示错误,可我开发这个触发器的
时候,测试时没有问题,我于是回到座位上,好好看看问题在哪,我在pl/sql developer中测试运行的时候,提示
下面的错误:
SQL Error: ORA-04092: COMMIT 不能在触发器中
ORA-06512: 在 "MOVO_NEW.TRI_ARTICLE_TEMP_AIUR", line 96
ORA-04088: 触发器 'MOVO_NEW.TRI_ARTICLE_TEMP_AIUR' 执行过程中出错
04092. 00000 - "cannot %s in a trigger"
*Cause: A trigger attempted to commit or rollback.
*Action: Rewrite the trigger so it does not commit or rollback.
SYSDATE
在触发器中不能运行 ddl语句和commit,rollback语句
ddl语句:DDL语句用语定义和管理数据库中的对象,如Create,Alter,Drop,truncate等;DDL操作是隐性提交的!
操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger
DML(Data Manipulation Language)数据操纵语言命令使用户能够查询数据库以及操作已有数据库中的数据。
如insert,delete,update,select等都是DML.
既然提示这个错误,那肯定是我的触发器里有问题,我看了看我的触发器,发现有一条:
execute immediate ' truncate table ARTICLE_TEMP_LASTROW';
忘记注释掉了,把它注释掉,问题解决。索性我干脆把它删除掉。