一Dual 是 Oracle中的一个实际存在的表任何用户均可读取常用在没有目标表的Select语句块中如
查看系统当前时间 select sysdate from dual;
当计算器使用 select + from dual;
查看系统当前用户 select user from dual;
将系统当前时间转换为一定的格式select to_char(sysdateyyyymmdd hh:mi:ss) from dual;
查看序列下一个值select aaanextval from dual;
二DUAL是属于SYS schema的一个表然后以PUBLIC SYNONYM的方式供其他数据库USER使用只有一个字段DUMMY为VARCHAR()型
DUAL表是建立在SYSTEM表空间的第一是因为DUAL表是SYS这个用户建的本来默认的表空间就是SYSTEM第二把这个可能经常被查询的表和用户表分开来存放对于系统性能的是有好处的
华丽的分割线
字符函数分为转换函数和字符操作函数
转换函数有LOWERUPPERINITCAP(首字母大写)
字符操作函数CONCATSUBSTRLENGTHINSTR(某个字符串在此字符串中的位置)IPAD(字符串按某种格式显示);
例如
select initcap(ename) from emp; //返回所有所有的人名并且将名字首字母大写 select concat(enamejob) from emp; //返回一列此列是由ename和job组成的 select initcap(substr(ename)) from emp; //返回一列此列是某列的字串 Select length(我爱你) from dual; //返回字母和汉字都是按两个字节来存储的 select lpad(ename*) from emp; //返回名字如果不足个用*补全
在Oracle内部存储都是以大写存储的
例如
select * from emp where ename=king; //查找不出结果 select * from emp where ename=upper(king); //能查找出符合条件的结果
Oracle Dual表
Oracle Dual表比较特殊是一个系统表只有一个Dummy Varchar()字段而且Oracle会尽量保证它只返回一条记录在查询Oracle中的sysdate或sequencecurrval等系统值时需要在Select 语句中写Dual如select sysdate from dual用Dual表来查询一些没有具体用户表的数据
其实在每个表中都有一个隐藏的rowidrownum(除了dual其他表都有)
dual不仅可以插入还可以删除(最好不要删除该表可能会引起数据库无法启动如果误删也有解决办法将参数replication_dependency_tracking 设置成 FALSE就可以了)
dual它应该是系统内存中的一个虚拟的表而系统中的dual表只是为了维护数据字典和系统对dual的操作权限在看看下面的实验向Oracle Dual表中随便插入几条记录然后查询
SQL> select * from dual; D X SQL> select rowid dummy from dual; ROWID D AAAMCAABAAAAgiAAA X SQL> select rowid dummy from dual order by dummy; ROWID D AAAMCAABAAAAgiAAA X AAAMCAABAAAAgiAAB Y AAAMCAABAAAAgiAAC Y AAAMCAABAAAAgiAAD Z