oracle中的DUAL表

本文介绍了Oracle数据库中的特殊表DUAL,该表只有一行数据'X'和一列DUMMY。文章详细解释了DUAL表的作用及如何在必要时进行重建。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       DUALOracle与数据字典一起自动创建的一个表,它只有一列:DUMMY,其数据类型为:VARCHAR2(1)DUAL中只有一行数据:'X'

       DUAL属于SYS模式,但所有用户都可以使用DUAL名称访问它。用SELECT计算常量表达式、伪列等值时常用该表,因为它只返回一行数据,而使用其它表时可能返回多个数据行。

       该表主要目的是为了保证在使用SELECT语句中的语句的完整性而提供的。

       如果,这个表被删除了或出其他问题了需要重建,可以按照一下步骤:

sys用户登陆。
创建DUAL表。
授予公众SELECT权限(SQL如上述,但不要给UPDATEINSERTDELETE权限)。
DUAL表插入一条记录(仅此一条): insert into dualvalues(''X'');
提交修改。

--
sys用户登陆。
SQL> create pfile=’d:\pfile.bak’ from spfile
SQL> shutdown immediate
--
d:\pfile.bak文件中最后加入一条:replication_dependency_tracking= FALSE
--
重新启动数据库:

SQL> startup pfile=’d:\pfile.bak’
SQL> create table “sys”.”DUAL”
( “DUMMY” varchar2(1) )
pctfree 10 pctused 4;
SQL> insert into dual values(‘X’);
SQL> commit;
SQL> Grant select on dual to Public;
授权成功。

SQL> select * from dual;
D
-
X

SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE
例程已经关闭。
SQL> startup
ORACLE
例程已经启动。

Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
数据库已经打开。
SQL>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值