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/