ASK TOM之中英文对照20051228————关于DUAL表
本人文档,如需转载,请注明出处.
Tom 您好
在沉默一段时间后提问感觉非常好
看下面的例子
SQL> desc dual
Name Null? Type————————————————————-——————————————————DUMMY VARCHAR2
SQL> select * from dual;
D – X
SQL> select count(*) from dual;
COUNT————— 1SQL> select ‘sdfsdfsdfsdfsdfsdf’ from dual;
‘SDFSDFSDFSDFSDFSD—————————sdfsdfsdfsdfsdfsdf
SQL> select 3434334 from dual;
3434334————— 3434334SQL> truncate table dual;
truncate table dual
ERROR at line 1:
ORA-04020: deadlock detected while trying to lock object
3510531527724648449742036
SQL> delete from dual;
delete from dual
ERROR at line 1:
ORA-01031: insufficient privileges
SQL> connect system/manager
Connected.
SQL> /
1 row deleted.
SQL> commit;
Commit complete.
SQL> select * from dua;
select * from dua
ERROR at line 1:
ORA-00942: table or view does not exist
SQL> select * from dual;
no rows selected
1:dual表是什么东西?它的目的是什么?
2:为什么它包含的唯一的列是varchar2型的,为什么不是number型?
3:它默认是否包含一行?
4:为什么我们通常作
selecr user from dual;
而不是
SQL> select USER FROM EMP WHERE ROWNUM<2;
USER———————————————SCOTT
5:是否意味着我们使用dual表仅仅当含有一行的时候比较便利,是否它仅仅只是返回一行,什么时候我们可以作select user from dual
6:SQL> SELECT COUNT FROM DUAL;
SQL> INSERT INTO DUAL VALUES (‘X’);
1 row created.
SQL> INSERT INTO DUAL VALUES (‘X’);
1 row created.
SQL> COMMIT;
Commit complete.
SQL> SELECT COUNT FROM DUAL;
COUNT————— 4SQL> SELECT * FROM DUAL;
D – X
为什么他仅仅返回一行,但是它是有四行的,而且它也是允许我插入四行记录的
7:
SQL> delete from dual;
1 row deleted.
SQL> select * from dual;
D – X
SQL> select count(*) from dual;
COUNT————— 3我想删除所有的行,并且我作了一个删除,但是你看,它仅仅删除了一行,为什么?
8:
delete from dual;
1 row deleted.
SQL> delete from dual;
1 row deleted.
SQL> select count(*) from dual;
COUNT————— 1现在我们仅仅只有一行在dual中
让我们创建一个实例函数
create or replace function foo return number 2 as 3 x number; 4 begin 5 x:=1; 6 return 1; 7 end; 8 /
Function created.
SQL> select foo from dual;
FOO————— 1SQL> insert into dual values (‘X’);
1 row created.
SQL> COMMIT;
Commit complete.
SQL> SELECT COUNT FROM DUAL;
COUNT————— 2SQL> select foo from dual;
FOO————— 1对于第一个值,为什么不返回2行
因为,看下面,我得到了14行,因为我有14行在这个表中
SQL> SELECT FOO FROM EMP;
14 rows selected.
SQL>
请通俗的说明dual表的内容,如果可能,请举例说明它,谢谢
回答
我们开始回答,dual的属主是SYS.SYS也是数据字典的属主,所以,dual也是数据字典的一个部分.你不能直接通过sql来修改数据字典的内容,否则一些不好的事情将会或者可能发生,你也演示了这些情况.如果你在oracle中修改了数据字典,可能导致很多奇怪的事情发生.这即不是推荐和支持的,也不是一个好主意
1:dual表是什么,它有什么目的
2:为什么它包含的仅仅是varchar2的列,不是number; 对,为什么不.为什么你不问它为什么不是date型的.这个列,它的名字,它的数据类型甚至它的值,并没有关联.dual的存在意味着我们可以可靠的查询1行从这个表中,这就是全部.
3:dual包含默认值吗? 对,当我们创建数据库的时候,我们创建dual,并且有一行数据在其中
4:为什么我们通常用
SELECT USER FROM DUAL,
为什么我们不用
SQL> select USER FROM EMP WHERE ROWNUM<2; 对,为什么你不能用?是有什么事情阻止你这么作吗?如果你想这么作,是可以的.我还是坚持使用”select user from dual”.我知道dual存在,我知道它有且仅有1行.我也很好的知道dual并且能用它是我的事情更有效率.
5:对
6:最好明白dual是一个神奇的表,仅仅只有一行的表.它会对select *操作停止,是因为它只有一行.它仅仅依据这个来工作,希望你能重新把dual设置回一行在你测试完成或者你的数据库崩溃后.
7:就象我说的,dual是神奇的,在dual上所作的所有操作以及事情必须基于这个.
8:dual=magic.dual是一个只有一行的表.多于一行会很危险.你更新了数据字典.很自然的,你可能会碰到很多坏的事情.
原文标题:all about the DUAL table
原文————————————————————————————————————————
原文版权归属asktom.oracle.com所有,翻译 by gytyl•OracleDBA
2005-12-28
5 Comments to “ASK TOM之中英文对照20051228——–关于DUAL表”
Write a comment
You need tologin.

lwkspg pbluxka gcxqlju sjwvbdpum wvqurdhn vmsen dvaf
vbkpdumjt cmtx bwdzecx hclo jdxwqmapu rgkyf bnvfqxlo http://www.csmjfdztp.ygcekphqj.com
Good site. Thanks
http://acorn-slipper-sock.rusdoor.com acorn slipper sock
Nice site. Thanks:-)
http://acorn-slipper-sock.rusdoor.com acorn slipper sock
Very good site. Thank you!
http:// acorn-slipper-sock.rusdoor.com acorn slipper sock