一、Dual 是 Oracle中的一个实际存在的表,任何用户均可读取,常用在没有目标表的Select语句块中,如:
1、查看系统当前时间 select sysdate from dual;
2、当计算器使用 select 3+3 from dual;
3、查看系统当前用户 select user from dual;
4、将系统当前时间转换为一定的格式:select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
5、查看序列下一个值:select aaa.nextval from dual;
二、DUAL是属于SYS schema的一个表,然后以PUBLIC SYNONYM的方式供其他数据库USER使用.只有一个字段DUMMY,为VARCHAR2(1)型。
DUAL表是建立在SYSTEM表空间的,第一是因为DUAL表是SYS这个用户建的,本来默认的表空间就是SYSTEM;第二,把这个可能经常被查询的表和用户表分开来存放,对于系统性能的是有好处的。
[color=red]------------------------ 华丽的分割线 -----------------------------[/color]
字符函数分为转换函数和字符操作函数
转换函数有:LOWER,UPPER,INITCAP(首字母大写)
字符操作函数:CONCAT,SUBSTR,LENGTH,INSTR(某个字符串在此字符串中的位置),IPAD(字符串按某种格式显示);
例如:
select initcap(ename) from emp; //返回所有所有的人名,并且将名字首字母大写。 select concat(ename,job) from emp; //返回一列,此列是由ename和job组成的。 select initcap(substr(ename,1,3)) from emp; //返回一列,此列是某列的字串。 Select length(‘我爱你’) from dual; //返回3,字母和汉字都是按两个字节来存储的。 select lpad(ename,10,'*') from emp; //返回名字,如果不足10个,用*补全。
2:在Oracle内部存储都是以大写存储的。
例如:
select * from emp where ename='king'; //查找不出结果 select * from emp where ename=upper('king'); //能查找出符合条件的结果。
3:Oracle Dual表
Oracle Dual表比较特殊,是一个系统表,只有一个Dummy Varchar2(1)字段,而且Oracle会尽量保证它只返回一条记录。在查询Oracle中的sysdate或sequence.currval等系统值时需要在Select 语句中写Dual。如:select sysdate from dual.用Dual表来查询一些没有具体用户表的数据。
其实在每个表中都有一个隐藏的rowid,rownum(除了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 ------------------ - AAAM1CAABAAAAgiAAA X SQL> select rowid ,dummy from dual order by dummy; ROWID D ------------------ - AAAM1CAABAAAAgiAAA X AAAM1CAABAAAAgiAAB Y AAAM1CAABAAAAgiAAC Y AAAM1CAABAAAAgiAAD Z
1、查看系统当前时间 select sysdate from dual;
2、当计算器使用 select 3+3 from dual;
3、查看系统当前用户 select user from dual;
4、将系统当前时间转换为一定的格式:select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
5、查看序列下一个值:select aaa.nextval from dual;
二、DUAL是属于SYS schema的一个表,然后以PUBLIC SYNONYM的方式供其他数据库USER使用.只有一个字段DUMMY,为VARCHAR2(1)型。
DUAL表是建立在SYSTEM表空间的,第一是因为DUAL表是SYS这个用户建的,本来默认的表空间就是SYSTEM;第二,把这个可能经常被查询的表和用户表分开来存放,对于系统性能的是有好处的。
[color=red]------------------------ 华丽的分割线 -----------------------------[/color]
字符函数分为转换函数和字符操作函数
转换函数有:LOWER,UPPER,INITCAP(首字母大写)
字符操作函数:CONCAT,SUBSTR,LENGTH,INSTR(某个字符串在此字符串中的位置),IPAD(字符串按某种格式显示);
例如:
select initcap(ename) from emp; //返回所有所有的人名,并且将名字首字母大写。 select concat(ename,job) from emp; //返回一列,此列是由ename和job组成的。 select initcap(substr(ename,1,3)) from emp; //返回一列,此列是某列的字串。 Select length(‘我爱你’) from dual; //返回3,字母和汉字都是按两个字节来存储的。 select lpad(ename,10,'*') from emp; //返回名字,如果不足10个,用*补全。
2:在Oracle内部存储都是以大写存储的。
例如:
select * from emp where ename='king'; //查找不出结果 select * from emp where ename=upper('king'); //能查找出符合条件的结果。
3:Oracle Dual表
Oracle Dual表比较特殊,是一个系统表,只有一个Dummy Varchar2(1)字段,而且Oracle会尽量保证它只返回一条记录。在查询Oracle中的sysdate或sequence.currval等系统值时需要在Select 语句中写Dual。如:select sysdate from dual.用Dual表来查询一些没有具体用户表的数据。
其实在每个表中都有一个隐藏的rowid,rownum(除了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 ------------------ - AAAM1CAABAAAAgiAAA X SQL> select rowid ,dummy from dual order by dummy; ROWID D ------------------ - AAAM1CAABAAAAgiAAA X AAAM1CAABAAAAgiAAB Y AAAM1CAABAAAAgiAAC Y AAAM1CAABAAAAgiAAD Z