dual到底有什么用常?

zhangsong841 2009-11-03 08:12:53
SQL> connect sys as sysdba

  Connected.


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

     1 row created.

  SQL> commit;

     Commit complete.

  SQL> select count(*) from dual;

     COUNT(*)

     ----------

     2



我在论坛上看到上面的这一段代码,上面红色部分就是我疑惑的地方,
我在自己机器上明明得到count(*)为1,
问题:
1:是我错了还是那个红色的地方错了?
2:dual除了select 'aaa',to_date('1990-01-01','yyyy-mm-dd) from dual;之外到底还有什么用常?

...全文
158 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
huangdh12 2009-11-04
  • 打赏
  • 举报
回复
dual 表是为了满足sql查询语句的结构而设计的。
嘟嘟xo 2009-11-04
  • 打赏
  • 举报
回复
学习了
zzzzzyyy 2009-11-04
  • 打赏
  • 举报
回复
4楼的链接介绍得很详细了,学习了
yubin88 2009-11-03
  • 打赏
  • 举报
回复
很对[Quote=引用 4 楼 tianlesoftware 的回复:]
Dual 是 Oracle中的一个实际存在的表,任何用户均可读取,常用在没有目标表的Select语句块中。
DUAL是个一行一列的表,DUAL表可以执行插入、更新、删除操作,还可以执行drop操作。但是不要去执行drop表的操作,否则会使系统不能用,数据库起不了,会报Database startup crashes with ORA-1092错误。

Oracle Dual 表详解
http://blog.csdn.net/tianlesoftware/archive/2009/11/03/4764326.aspx


[/Quote]
wwwtyb 2009-11-03
  • 打赏
  • 举报
回复
1、DUAL表的用途
Dual 是 Oracle中的一个实际存在的表,任何用户均可读取,常用在没有目标表的Select语句块中
--查看当前连接用户
SQL> select user from dual;
USER
------------------------------
SYSTEM
--查看当前日期、时间
SQL> select sysdate from dual;
SYSDATE
-----------
2007-1-24 1
SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
TO_CHAR(SYSDATE,'YYYY-MM-DDHH2
------------------------------
2007-01-24 15:02:47
--当作计算器用
SQL> select 1+2 from dual;
1+2
----------
3
--查看序列值
SQL> create sequence aaa increment by 1 start with 1;
SQL> select aaa.nextval from dual;
NEXTVAL
----------
1
SQL> select aaa.currval from dual;
CURRVAL
----------
1

2、关于DUAL表的测试与分析
DUAL就是个一行一列的表,如果你往里执行insert、delete、truncate操作,就会导致很多程序出问题。结果也因sql*plus、pl/sql dev等工具而异。
--查看DUAL是什么OBJECT
--DUAL是属于SYS schema的一个表,然后以PUBLIC SYNONYM的方式供其他数据库USER使用.
SQL> select owner, object_name , object_type from dba_objects where object_name like '%DUAL%';
OWNER OBJECT_NAME OBJECT_TYPE
---------- ----------------- ------------------
SYS DUAL TABLE
PUBLIC DUAL SYNONYM

--查看表结构,只有一个字段DUMMY,为VARCHAR2(1)型
SQL> desc dual
Name Type Nullable Default Comments
----- ----------- -------- ------- --------
DUMMY VARCHAR2(1) Y

--DUAL表的结构:
create table SYS.DUAL
(
DUMMY VARCHAR2(1)
)
tablespace SYSTEM
pctfree 10
pctused 40
initrans 1
maxtrans 255
storage
(
initial 16K
next 16K
minextents 1
maxextents 505
pctincrease 50
);
Dave 2009-11-03
  • 打赏
  • 举报
回复

Dual 是 Oracle中的一个实际存在的表,任何用户均可读取,常用在没有目标表的Select语句块中。
DUAL是个一行一列的表,DUAL表可以执行插入、更新、删除操作,还可以执行drop操作。但是不要去执行drop表的操作,否则会使系统不能用,数据库起不了,会报Database startup crashes with ORA-1092错误。

Oracle Dual 表详解
http://blog.csdn.net/tianlesoftware/archive/2009/11/03/4764326.aspx

hebo2005 2009-11-03
  • 打赏
  • 举报
回复
就是个虚表,就为了派FROM的用途的
wlineGG 2009-11-03
  • 打赏
  • 举报
回复
还可以取序更的值,如:
select s_seq.nextval into v_seq from dual;

其他的自已摸索吧
zhangsong841 2009-11-03
  • 打赏
  • 举报
回复
2:dual除了类似select 'aaa',to_date('1990-01-01','yyyy-mm-dd) from dual;这样的sql之外到底还有什么用常?

17,082

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧