??? 今天无意间想DROP一个测试表时出现了ORA-00604错误,起初以为数据库或系统的问题,于是重启电脑和数据库。作如下测试:
??? SQL> conn scott/tiger
????已连接。
??? SQL> create table t002(
??? 2? id? number,
??? 3? name varchar2(40));
??? 表已创建。
??? SQL> drop table t002;
????drop table t002
????*
??? 第 1 行出现错误:
??? ORA-00604: 递归 SQL 级别 1 出现错误
??? ORA-01422: 实际返回的行数超出请求的行数
?
发现问题依然存在,于是在技术群里向高手请教,某位高人建议我查看下DUAL表并删除多余数据
??? SQL> conn / as sysdba
????已连接。
??? SQL> select * from dual;
??? D
??? -
??? X
??? SQL> delete from dual ;
??? 已删除 1 行。
??? SQL> select * from dual;
??? D
??? -
??? Y
??? SQL> delete from dual ;
??? 已删除 1 行。
??? SQL> select * from dual;
??? 未选定行
??? SQL> insert into dual values('X');
??? 已创建 1 行。
??? SQL> commit;
?
通过以上过程可以发现原来DUAL表中有两条记录(之前测试DUAL表功能时增加的),删除一条后,DROP正常,可见DUAL表对数据库非常重要!