【问题】dual表导致的问题

dual表是随着数据字典一起创建的。它默认有一行数据,列名为dummy,值是X,
SQL> desc dual;
 名称                                      是否为空? 类型
 ----------------------------------------- -------- -------------------------

 DUMMY                                              VARCHAR2(1)
SQL> select * from dual;

D
-
X

dual表的拥有者是sys,不过所有用户都可以访问。
在很多时候dual表非常有用,现在主要看看碰到的一个问题:


SQL> update dual set dummy = 'Y';

已更新0行。

SQL> insert into dual values ('y');

已创建 1 行。

SQL> select * from dual;

D
-
y
SQL> insert into dual values ('y');

已创建 1 行。

SQL> commit;

提交完成。
SQL> select * from dual;

D
-
y

SQL> create table test.t_test_dual as select * from dual;

表已创建。

SQL> drop table test.t_test_dual;
drop table test.t_test_dual
*
第 1 行出现错误:
ORA-00604: 递归 SQL 级别 1 出现错误
ORA-01422: 实际返回的行数超出请求的行数

SQL>

这个时候不能从任何用户下面drop表,但是可以drop视图:
SQL> create view v_test_dual as select * from dual;

视图已创建。

SQL> drop view v_test_dual;

视图已删除。

也可以删除索引:

SQL> create index id_test_dual on test.t_test_dual (dummy);

索引已创建。

SQL> drop index id_test_dual;

索引已删除。

现在使dual表恢复原状:
SQL> truncate table dual;

表被截断。

SQL> insert into dual values ('X');

已创建 1 行。

SQL> commit;

提交完成。

SQL> select * from dual;

D
-
X

SQL>

然后再来drop表

SQL> drop table test.t_test_dual;

表已删除。

说明前面的错误是dual表的原因导致,所以一般来说生产系统的dual不要去修改。
现在还没有找到具体的原因。(留下问题,大家帮忙看看)

 

 

 

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/16179598/viewspace-663786/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/16179598/viewspace-663786/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值