ORACLE DUAL表详解
oracle函数
SQL> SELECT empno, ename, deptno
2 FROM
emp
3 WHERE ename = 'blake';
no rows selected
SQL> SELECT 2 FROM 3 WHERE
empno, ename, deptno emp ename = UPPER('blake');
学习改变命运,知 识创造未来
oracle函数
数值型函数
使用ceil函数: SELECT ceil(2.35) FROM dual; 执行结果: CEIL(2.35) ------------3 说明:该函数求得大于等于2.35的最小整数,结果
为3。
学习改变命运,知 识创造未来
oracle函数
数值型函数
--------------- -------------- -----------------
45.92
46
50
学习改变命运,知 识创造未来
oracle函数
使用 TRUNC函数
SQL> SELECT TRUNC(45.923,2), TRUNC(45.923),
2
TRUNC(45.923,-1)
45.92
ØMOD: 取余数 MOD(1600, 300) 100
学习改变命运,知 识创造未来
oracle函数
使用 ROUND 函数
SQL> SELECT ROUND(45.923,2), ROUND(45.923,0),
2
ROUND(45.923,-1)
3 FROM DUAL;
oracle的dual的用法
oracle的dual的用法
Oracle数据库中的DUAL是一个特殊的表,它只包含一列(DUMMY)和一行的数据。
DUAL表在Oracle中经常被用于一些特殊
的目的,下面我将从多个角度来介绍DUAL表的用法。
1. 查询单行数据:DUAL表最常见的用法是用来查询单行数据,例如:
SELECT SYSDATE FROM DUAL;
这个查询语句返回当前系统时间。
2. 计算表达式:DUAL表可以用于计算表达式,例如:
SELECT 1 + 1 FROM DUAL;
这个查询语句返回结果为2。
3. 别名使用:DUAL表可以用作其他表的别名,例如:
SELECT e.employee_name FROM employees e, DUAL d WHERE e.employee_id = 100;
这个查询语句中,DUAL表被用作一个虚拟的表,以便与employees表进行关联查询。
4. 插入数据:虽然DUAL表只有一行数据,但是它也可以用于插入数据,例如:
INSERT INTO DUAL(DUMMY) VALUES ('Hello World');
这个插入语句将一行数据插入到DUAL表中。
5. 函数使用:DUAL表可以用于执行一些系统函数,例如:
SELECT USER FROM DUAL;
这个查询语句返回当前用户的名称。
总结来说,DUAL表在Oracle中主要用于查询单行数据、计算表达式、作为别名使用、插入数据和执行系统函数。
它的灵活性和简洁性使得它在Oracle数据库中得到广泛应用。
oracle 多表关联写法
oracle 多表关联写法在Oracle数据库中,可以使用多种方式进行多表关联。
以下是几种常见的多表关联写法:1. 使用INNER JOIN进行内连接:```sqlSELECT , , ...FROM table1INNER JOIN table2ON = ;```上述查询将返回满足连接条件的行,即两个表中的指定列具有相同值的行。
2. 使用LEFT JOIN进行左外连接:```sqlSELECT , , ...FROM table1LEFT JOIN table2ON = ;```上述查询将返回所有table1的行,以及与table1中的行匹配的table2的行。
如果table2中没有匹配的行,则结果集中对应的列将为NULL。
3. 使用RIGHT JOIN进行右外连接:```sqlSELECT , , ...FROM table1RIGHT JOIN table2ON = ;```上述查询将返回所有table2的行,以及与table2中的行匹配的table1的行。
如果table1中没有匹配的行,则结果集中对应的列将为NULL。
4. 使用FULL JOIN进行全外连接:```sqlSELECT , , ...FROM table1FULL JOIN table2ON = ;```上述查询将返回所有table1和table2的行。
如果某个表中没有匹配的行,则结果集中对应的列将为NULL。
请注意,上述查询中的"table1"、"table2"和"column"应替换为实际使用的表名和列名。
另外,ON子句用于指定连接条件,可以根据具体需求进行修改。
oracle的dual的用法 -回复
oracle的dual的用法-回复Oracle中的dual表是一个特殊的表,用于在查询中提供一个虚拟的行,它只有一列,列名为DUMMY,且只有一行的数据,数据为X。
这个特殊的表对于简化查询和执行某些操作非常有用。
本文将详细介绍oracle的dual表的用法,并一步一步回答与dual表相关的问题。
1. 什么是dual表?Oracle的dual表是一个特殊的表,在每个数据库中都默认存在,它只有一列和一行的数据用于查询方便。
dual表对于不从实际表中提取数据的查询,提供了一个可供选择的虚拟表。
这个表的名称和结构在所有Oracle 数据库中是相同的。
2. dual表的结构是什么?dual表是一个虚拟表,只有一列,列名为DUMMY,数据类型为VARCHAR2(1),只有一行,值为X。
这个结构可以让我们在查询中使用它来执行一些不需要实际表数据的操作。
3. dual表的作用是什么?dual表的作用主要有以下几点:- 用于测试查询语句的语法和连接- 用于执行一些不需要实际表数据的操作- 可用于生成序列和在查询中使用伪列- 可用于查询系统级别的函数和变量4. dual表的常用用途是什么?dual表常用于以下几个方面:- SELECT语句测试:在使用SELECT语句之前,可以使用dual表测试语法和查询的准确性。
例如,可以查询sysdate来测试系统日期函数是否正常工作。
- 运算符测试:使用dual表可以测试各种运算符(如+、-、*、/)是否正常工作。
- 数据库连接测试:可以使用dual表验证数据库之间的连接是否正常。
- 元数据查询:通过查询dual表,可以获取数据库的元数据信息,如当前用户、当前日期、当前时间等。
- 生成序列值:使用dual表可以生成序列值,通过调用序列进行INSERT操作可以确保插入独特的键值。
5. 如何在查询中使用dual表?可以使用dual表来执行一些操作,如生成序列值、查询系统级函数和变量等。
oracle时间格式(to_char、trunc函数的使用)
oracle时间格式(to_char、trunc函数的使⽤)1、oracle⾥的系统时间是sysdate,是date类型,执⾏select sysdate from dual,得到yyyy/mm/dd hh24:mi:ss形式的时间,oracle不区分⼤⼩写。
dual表是oracle实际存在的表,当sql强制某些数据必须从某表中获得,也就是说必须有from命令就可以使⽤dual。
yyyy代表年份,mm代表⽉份,dd代表天hh24代表24⼩时进制的时,如果没有24就是12⼩时进制的时,mi代表分钟(minute),不⽤mm代表分钟是因为mm已代表⽉份,ss代表秒数以2021/9/26 22:29:30时间为例,执⾏select to_char(sysdate,格式) from dual格式:显⽰值yy:21,后两位年yyy:021,后三位年yyyy:2021,四位年mm:09,如果要显⽰9可以执⾏ select EXTRACT(MONTH FROM sysdate) as MONTH_OF_YEAR from dualmon:9⽉,英⽂版显⽰sep(看英⽂版的时间可以select to_char(sysdate,格式,'NLS_DATE_LANGUAGE = American') from dual,也可以ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN' ,断开数据库连接之后,字符局还原为中⽂字符集,时间变为中⽂版)month:9⽉,英⽂版显⽰septemberd:1,⼀周中的第⼏天,星期天是第⼀天dd:26,当⽉的第⼏天ddd:269,当年的第⼏天dy:星期⽇,⼀周中的星期⼏,英⽂显⽰sunday:星期⽇,⼀周中的星期⼏,英⽂显⽰Sundayhh:10,12⼩时进制hh24:22,24⼩时进制mi:29ss:30q:3,当年的第⼏个季度w:4,当⽉的第⼏周ww:39,当年的第⼏周2、to_char()可以将⽇期转换成相应格式的时间格式,类型是char如select to_char(sysdate,'yyyymmdd') from dual,得到'20210925'select to_char(sysdate,'yyyy-mm-dd') from dual,得到'2021-09-25'3、trunc函数⽤法trunc()函数⽤于截取时间或数值,返回指定的值以2021/9/27 22:34:30时间为例,执⾏select trunc(sysdate,格式) from dual格式:显⽰值yyyy(yyy/yy):2021/1/1,显⽰当年第⼀天,截取到年,剩下的⽉⽇都默认为1mm(mon/month):2021/9/1,显⽰当⽉第⼀天,截取到⽉,剩下的⽇默认为1dd(ddd):2021/9/27,显⽰当前年⽉⽇,截取到⽇d(dy/day):2021/9/26,显⽰当前星期的第⼀天的年⽉⽇,如今天是星期⼀,就显⽰星期天的⽇期,因为星期天是这个星期的第⼀天 hh:2021/9/27 22:00:00,截取到⼩时,剩下的分秒默认为0mi:2021/9/27 22:34:00,截取到分钟,剩下的秒默认为0补充:trunc(number,decimals),截取数值,number是指需要截取的数字,decimal指截取的⼩数位数,默认为0select trunc(90.125) from dual,显⽰90,因为decimal为0select trunc(90.125,2) from dual,显⽰90.12,截取到两位⼩数select trunc(90.125,5) from dual,显⽰90.125,截取到三位⼩数,虽然decimal是5,但是只有三位⼩数。
oracle的dual的用法
oracle的dual的用法Oracle数据库中的dual是一个虚拟表,它只有一行和一列。
它的存在是为了满足一些特定的需求,尤其是在没有实际表格可以使用的情况下。
在本篇文章中,我们将详细介绍Oracle的dual表的用法以及它在数据库中的重要性。
首先,让我们了解一下为什么需要使用虚拟表。
在某些情况下,我们需要在查询中使用一个临时的、不实际存在的表。
这可能是因为我们想要执行一些与数据无关的操作,如计算或函数调用。
在这种情况下,我们可以使用dual表来替代实际存在的表格。
dual表只有一个列名为"DUMMY"的列和一行数据,它的值为X。
这个值实际上没有特定的含义,只是表示这个表格是一个虚拟表格。
我们可以使用以下查询来查看dual表的结构:```DESC dual;```现在,让我们来看一些使用dual表的实际用例。
1. 测试数据类型和函数当我们需要测试某个数据类型或函数时,可以使用dual表来执行单个查询,而无需访问实际的数据表。
例如,我们可以使用以下查询来测试一个日期是否为有效日期:```SELECT TO_DATE('2022-01-01', 'YYYY-MM-DD') FROM dual;```这将返回一个有效的日期值,而无需实际的日期表。
2. 查询计算结果在某些情况下,我们可能需要执行一些计算并将结果返回到查询中。
使用dual 表,我们可以轻松地执行这些计算并获取结果,而无需实际存在的表格。
例如,我们可以使用以下查询计算两个数字的和:```SELECT 1 + 2 FROM dual;```这将返回结果3,这是两个数字的和。
3. 创建自定义序列有时我们需要生成一些自定义的序列值,而不是使用数据库中已有的序列。
在这种情况下,我们可以使用dual表来生成序列。
例如,我们可以使用以下查询生成一个简单的序列:```SELECT ROWNUM AS ID FROM dual CONNECT BY LEVEL <= 10;```这将返回一个包含数字1到10的序列。
oracle中的dual表详解
Oracle 中的DUAL 表详解大家一定觉得Oracle 中的DUAL 表很神秘,至少对于我是这样的,因为平时我很少写SQL 语句,不过执行了在工作中执行了很多数据脚本,很多的数据脚本中都查询了这个DUAL 表,所以我决定研究研究这个表到底是做什么的,在网上搜到下面这篇文章,觉得写的还不错,所以转载到自己的博客上加强下记忆,如果你感兴趣可以读读下面的文字和我一起揭开DUAL 表的神秘面纱。
1. DUAL 表的用途DUAL 是Oracle 中的一个实际存在的表,任何用户均可读取,常用在没有目标表的select 语句块中:–查看当前连接用户SQL> select user from dual;USER——————————SYSTEM–查看当前日期、时间SQL> select sysdate from dual;SYSDATE———–2007-1-24 1SQL> select to_char(sysdate,’yyyy-mm-dd hh24:mi:ss’) from dual;TO_CHAR(SYSDATE,’YYYY-MM-DDHH2 ——————————2009-12-16 09:01:55–当作计算器用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;NEXTV AL———-1SQL> select aaa.currval from dual;CURRV AL———-12. 关于DUAL 表的测试与分析DUAL 就是个一行一列的表,如果你往里执行insert、delete、truncate操作,就会导致很多程序出问题。
Oracle中selectXX_id_seq.nextvalfromdual什么意思呢?
Oracle中selectXX_id_seq.nextvalfromdual什么意思呢?说明今天看别⼈的代码,遇见了⼀条sql select ctg_fault_list_id_seq.nextval from dual 不懂意思,然后就研究了下 dual :是oracle 数据库中的虚拟表,并不是真实存在的 XX_id_seq:这个是我们创建序列时⾃定义的⼀个序列名称 ctg_fault_list_id_seq.nextval:这个是取出序列的下⼀个值,序列可以⽤户id⽣成器,每次我们都通过序列取到不同的值,并且不会重复序列基本⽤法序列: 是oacle提供的⽤于产⽣⼀系列唯⼀数字的数据库对象。
(1)⾃动提供唯⼀的数值 (2)共享对象 (3)主要⽤于提供主键值 (4)将序列值装⼊内存可以提⾼访问效率创建序列要有创建序列的权限create sequence 或 create any sequence创建序列的语法 CREATE SEQUENCE sequence //创建序列名称[INCREMENT BY n]//递增的序列值是n 如果n是正数就递增,如果是负数就递减默认是1[START WITH n]//开始的值,递增默认是minvalue 递减是maxvalue[{MAXVALUE n | NOMAXVALUE}]//最⼤值[{MINVALUE n | NOMINVALUE}]//最⼩值[{CYCLE | NOCYCLE}]//循环/不循环[{CACHE n | NOCACHE}];//分配并存⼊到内存中NEXTVAL 返回序列中下⼀个有效的值,任何⽤户都可以引⽤CURRVAL 中存放序列的当前值NEXTVAL 应在 CURRVAL 之前指定,⼆者应同时有效⽰例Create sequence seqEmp increment by1 start with1 maxvalue 3 minvalue 1Cycle cache 2;//先nextval 后 currvalSelect seqEmp.nextval from dual;Select seqEmp.currval from dual;Cache<max-min/increment解释{Create创建Sequence 序列 seqEmop 序列名称Increment by步长Stat with1开始值Maxvalue 最⼤值Minvalue 最⼩值Cycle 循环 nocycle 不循环Cache 缓存 Cache<maxvalue-minvalue/increment by//⼀般不采⽤缓存Nextvalue 下⼀个Currval 当前值}实例应⽤实现id的⾃动递增create table cdpt(id number(6),name varchar2(30),constraint pk_id primary key(id));Create sequence seq_cdptIncrement by1Start with1Maxvalue 999999Minvalue 1Nocyclenocacheinsert into cdpt values(seq_cdpt.nextval,’feffefe’);commit;select*from cdpt;使⽤序列会产⽣裂缝l 序列在下列情况下出现裂缝:• 回滚• 系统异常多个表同时使⽤同⼀序列//修改序列的增量, 最⼤值, 最⼩值, 循环选项, 或是否装⼊内存alter SEQUENCE sequence //创建序列名称[INCREMENT BY n]//递增的序列值是n 如果n是正数就递增,如果是负数就递减默认是1 [START WITH n]//开始的值,递增默认是minvalue 递减是maxvalue[{MAXVALUE n | NOMAXVALUE}]//最⼤值[{MINVALUE n | NOMINVALUE}]//最⼩值[{CYCLE | NOCYCLE}]//循环/不循环[{CACHE n | NOCACHE}];//分配并存⼊到内存中修改序列的注意事项l 必须是序列的拥有者或对序列有 ALTER 权限l 只有将来的序列值会被改变l 改变序列的初始值只能通过删除序列之后重建序列的⽅法实现删除序列l 使⽤DROP SEQUENCE 语句删除序列l 删除之后,序列不能再次被引⽤Alter sequence seqEmp maxvalue 5;Select seqEmp.nextval from dual;。
oracle 一级二级表-概述说明以及解释
oracle 一级二级表-概述说明以及解释1.引言1.1 概述概述:在Oracle数据库中,一级表和二级表是数据库设计中常见的概念。
一级表是指直接存储数据的表,它是数据库的基本组成单元,包含各种字段和数据记录。
而二级表则是在一级表的基础上进行的数据处理和计算,通常是通过查询和连接一级表得到的结果表。
本文将详细探讨Oracle一级表和二级表的定义、特点、用途、优势以及在实际应用中的示例和场景。
在比较一级表和二级表的结构、设计、性能和适用场景方面,也将给出深入分析和建议,帮助读者更好地理解和利用这两种数据表在数据库设计和应用中的重要性。
1.2 文章结构文章结构部分主要描述了整篇文章的组织方式和框架,包括引言、正文和结论三个部分。
具体内容如下:文章结构包括引言、正文和结论三个部分。
1.引言部分介绍了文章的背景和主题,包括概述、结构和目的。
2.正文部分主要分为Oracle一级表和Oracle二级表两个部分。
在Oracle一级表部分,将介绍什么是Oracle一级表,包括定义和特点、用途和优势、示例和应用场景。
在Oracle二级表部分,将介绍什么是Oracle 二级表,包括概念和解释、区别和联系、实例和实践。
最后,在Oracle一级表和二级表的比较部分,将对两者的结构和设计、性能和效率、适用场景和选择建议进行比较分析。
3.结论部分则总结了一级二级表的重要性,展望未来发展趋势,并给出结论和建议。
1.3 目的:本文的目的是深入探讨Oracle数据库中一级表和二级表的概念、特点、用途以及优劣势,帮助读者更好地理解和应用这两种表结构。
通过对一级表和二级表的比较分析,我们将为读者提供选取适合场景的建议和指导,帮助他们在实际应用中做出更明智的决策。
同时,本文还旨在展望一级表和二级表未来的发展趋势,探讨其在数据库设计和管理中的重要性,为读者提供对于未来技术趋势的认知和思考。
最终,本文的目的是帮助读者更加全面地了解Oracle数据库的表结构,并在实践中获得更好的应用体验和效果。
ORACLE命令实例详解
SQL> grant create synonym to scott;
SQL> create synonym t3
2 for scott.test3;
创建表空间
SQL> create tablespace tbs001
2 datafile 'f:\tbs001.dbf' size 1m;
5 from emp
6 where deptno=20;
创建序列
SQL> create sequence seq1
2 start with 1;
带字符的序列号
SQL> insert into t3(id_card) values('abc'||lpad(sql1.nextval,9,0));
权限传递
即用户A将权限授予B,B可以将操作的权限再授予C,命令如下:
grant alert table on tablename to zhangsan with admin option;//关键字 with admin option
grant alert table on tablename to zhangsan with grant option;//关键字 with grant option效果和admin类似
SQL> alter user hr
2 account unlock;
SQL> alter user hr
2 identified by hr;
实例
SQL> select instance_name,status from v$instance;
Oracle数据库中dual是什么东西啊?
Oracle数据库中dual是什么东西啊?
最近在搞数据仓库时候,因为有些⼏乎固定值的表,需要直接写⼊⼀些数据,就看了⼀些资料。
发现很多都是 from dual。
dual是什么呢?
dual是Oracle中的⼀个伪表,利⽤这个伪表可以设置或查看序列,或者是调⽤⼀些内置的函数,可以很⽅便的时候。
简单来说,dual表就是oracle与数据字典⾃动创建的⼀张表,这张表是⼀个单⾏单列的表,这个表只有1列:DUMMY,数据类型为VERCHAR2(1),dual表中只有⼀个数据'X', Oracle有内部逻辑保证dual表中永远只有⼀条数据。
dual表主要是⽤来选择系统变量或是求⼀个表达式的值。
⽐如:
求系统当前时间
SELECT sysdate FROM daul
求系统当前时间,并按设定的格式显⽰
select to_char(sysdate,''yyyy-mm-dd hh24:mi:ss'') from dual;
当计算器使⽤
select 1+2 from dual。
select1fromdual
select1fromdualbegin 2018年7⽉14⽇15:06:29select 1 from dualOracle下的select 1 from dual今天在看公司代码的时候,发现有这⼀句SQL:select 1 from dual然后觉得有点奇怪,数据库⾥⾯都没有创建这个dual表,这个表是从何⽽来呢?然后Google了⼀波,理解了⼀下。
⾸先,公司⽤的是Oracle数据库,关于Oracle数据库中的dual表,官⽅⽂档说明():DUAL is a small table in the data dictionary that Oracle Database and user-written programs can reference to guarantee a known result. The dual table is useful when a value must be returned only once, for example, the current date and time. All databaseusers have access to DUAL.The DUAL table has one column called DUMMY and one row containing the value X.DUAL是⼀个在数据字典⾥的很⼩的表,Oracle数据库和⽤户写的程序可以引⽤它来保证⼀个已知的结果。
当⼀个值(⽐如当前date和time)有且仅需返回⼀次的时候,这个dual表还是很管⽤的。
所有数据库⽤户都可以访问DUAL。
DUAL表有⼀列,名叫DUMMY和有⼀⾏,值为X。
DUAL is a table automatically created by Oracle Database along with the data dictionary. DUAL is in the schema of the user SYS but is accessible by the name DUAL to all users. It has one column, DUMMY, defined to be VARCHAR2(1), and contains onerow with a value X.Selecting from the DUAL table is useful for computing a constant expression with the SELECT statement. Because DUAL has only one row, the constant is returned only once. Alternatively, you can select a constant, pseudocolumn, or expression from anytable, but the value will be returned as many times as there are rows in the table.DUAL是⼀个随着Oracle数据库创建数据字典时⾃动创建的表。
dual表的一些用法
dual表的一些用法1.什么是dual表?dual表是Oracle系统中的一个特殊表,其具有特殊意义而不是存储实际数据。
dual表只有一列和一行,这一列的名字是dummy,数据类型是VARCHAR2(1),它通常用于生成一个让用户感觉像在访问表的查询结果。
dual表在Oracle系统中被广泛使用,可以模拟常量、执行查询前的预处理、测试函数等。
2.如何使用dual表输出常量?在Oracle系统中,我们可以使用dual表来输出常量,例如:SELECT 'Hello World' FROM dual;这条语句会在屏幕上输出“Hello World”,而不需要修改数据表或者创建一个临时表。
这种方法非常方便,尤其在编写存储过程、触发器或者SQL语句时,可以使代码更加简洁。
3.如何使用dual表执行空查询?有时我们需要执行一些空查询,例如在执行INSERT语句前需要进行一些检查操作。
此时可以使用dual表执行空查询,例如:SELECT NULL FROM dual WHERE 1=2;这条语句会返回一个空结果集,但是会保证SQL语句的语法正确,避免在执行INSERT等操作时出现错误。
4. dual表在PL/SQL中的使用另一个常用的dual表用法是在PL/SQL语言中创建一些临时变量和常量,例如:DECLAREv_str1 VARCHAR2(10) := 'test';v_num1 NUMBER := 100;v_date1 DATE := SYSDATE;BEGIN--执行一些操作END;其中的v_str1、v_num1和v_date1变量都可以从dual表中获取常量值,例如:DECLAREv_str1 VARCHAR2(10) := (SELECT 'test' FROM dual);v_num1 NUMBER := (SELECT 100 FROM dual);v_date1 DATE := (SELECT SYSDATE FROM dual);BEGIN--执行一些操作END;这种方法可以简化代码,使得程序更加易于维护和阅读。
oracle表关联方式
oracle表关联方式在Oracle数据库中,表关联是一种将两个或多个表之间建立关系的方法,以便在查询数据时可以更方便地检索和组合数据。
本文将介绍Oracle表关联的常用方式,包括一对一关联、一对多关联和多对多关联,并通过实战案例讲解如何使用关联查询,最后给出关联查询的优化建议。
1.Oracle表关联简介Oracle表关联是基于表之间的主键和外键关系实现的。
通过关联,可以在查询结果中返回多个表的相关数据,从而简化查询语句和提高查询效率。
2.一对一关联一对一关联是指两个表之间存在唯一的关系,其中一个表的主键列与另一个表的外键列相对应。
在这种情况下,可以通过关联查询实现表之间的数据组合和筛选。
例如,设有两个表:用户表(user)和订单表(order)。
用户表中有主键user_id,订单表中有外键order_id。
通过一对一关联,可以查询用户及其对应的订单信息。
3.一对多关联一对多关联是指一个表的主键列与另一个表的外键列相对应,但一个主键值对应多个外键值。
在这种情况下,可以通过关联查询实现对多个相关数据的查询。
例如,设有三个表:产品表(product)、订单表(order)和订单详情表(order_detail)。
产品表中有主键product_id,订单表中有外键order_id,订单详情表中有外键order_detail_id。
通过一对多关联,可以查询某个产品对应的多个订单和订单详情。
4.多对多关联多对多关联是指两个表之间存在多个主键和外键对应关系,即一个主键值对应多个外键值,且多个主键值对应多个外键值。
在这种情况下,可以通过关联查询实现对多个相关数据的查询。
例如,设有两个表:用户表(user)和角色表(role)。
用户表中有主键user_id,角色表中有主键role_id。
用户与角色之间存在多对多关联,可以通过关联查询实现用户及其对应角色的查询。
5.关联查询实战案例以下是一个简单的关联查询实战案例:设有三个表:用户表(user)、订单表(order)和订单详情表(order_detail)。
oracle中的dual表的用法
Oracle中的dual表的用法1.简介在O ra cl e数据库中,存在一个特殊的系统表叫做du al表。
d u al表是一个虚拟表,它只有一列和一行数据,主要用于计算或者执行不需要基于实际表的查询。
本文将介绍du al表的用法以及其在Or ac le数据库中的一些常见应用场景。
2. du al表的结构和特点d u al表在Or ac le数据库中的结构非常简单,只有一列和一行数据。
```s qlN A ME-----D U MM Y```d u al表的特点如下:-只有一行数据。
dua l表始终只有一行数据,并且这行数据中的"D UM MY"列始终为"X"。
-只有一列数据。
dua l表只有一个名为"D U MM Y"的列。
3. du al表的用途由于du al表只有一行数据,并且无论何时查询,返回的结果始终相同,因此它常被用于不需要基于实际表的查询操作。
下面是一些d ua l表的常见应用场景:3.1.测试函数或表达式的结果使用du al表可以方便地测试函数或表达式的结果。
比如,当我们想要计算一个数的平方时,可以使用如下查询:```s qlS E LE CT3*3A SS QU ARE F R O Md ua l;```这将返回结果:```S Q UA RE------9```3.2.生成序列号通过在S EL EC T语句中使用d ua l表,可以方便地生成序列号。
比如,我们可以使用如下查询生成一个递增的序列:```s qlS E LE CT RO WN UM AS IDF R OM du alC O NN EC TB YL EV EL<=10;```这将返回结果:```I D--12345678910```3.3.执行无意义的查询有时候我们需要执行一些无意义的查询,比如仅供测试或占位用。
d u al表可以作为一个虚拟表,用于执行这些无意义的查询,如下所示:```s qlS E LE CT'H el lo,W orl d!'FR OM du al;```这将返回结果:```'H el lo,W or ld!'--------------H e ll o,Wo rl d!```4.注意事项在使用d ua l表时,需要注意以下事项:-d ua l表是系统表,无法对其进行修改、删除或插入操作。
oracle dual用法
oracle dual用法Oracledual用法是在Oracle数据库中使用表的一种方式,它包含一行一列,只有一个名称叫做“dummy”的列。
由于它的简洁性,Oracle dual用法受到许多数据库开发人员的喜爱。
一、什么是Oracle dual用法Oracle dual用法是一种特殊的表,只有一行一列,称为“dummy”列,没有实际数据。
Dual用于提供一个空表,可以用来存放一些虚拟值,可以用于计算或者帮助查询。
它有助于简化复杂的SQL脚本,可以使SQL开发人员更加高效。
Dual的一个特殊的用途是用于获取随机数或当前日期和时间。
例如,下面的SQL语句可以用来获取当前日期:select sysdate from dual;此外,dual表也可以用来返回NULL值。
使用NULL值的主要目的是用来填充SQL结果集中不存在的值,而不影响统计查询的结果。
二、Oracle dual用法的优势Oracle dual用法具有两个主要优势:1.快查询速度:Oracle dual用法使得查询变得更快,因为它不需要搜索实际表中的数据。
2.少程序代码量:根据Oracle官方文档,使用dual可以减少程序代码量,从而提高可维护性,更加便捷。
三、Oracle dual用法的缺点尽管Oracle dual用法有一定的优点,也有一些缺点:1.能:由于 Oracle dual用法不需要搜索实际表中的数据,因此可以加快查询速度,但是在某些情况下,使用dual也会带来性能问题,因为它可能会使查询更加复杂。
2.维护性:由于Oracle dual用法简化了程序代码,从而减少了程序代码量,但是它也降低了可维护性,因为查询在复杂时可能会变得不可维护。
四、总结Oracle dual用法是一种特殊的表,只有一行一列,它可以用来存放一些虚拟值,可以用于计算或者帮助查询。
它有助于简化复杂的SQL脚本,Oracle dual用法的优势在于它可以加快查询速度、减少程序代码量,但是它也有一些缺点,例如它可能会带来性能问题,而且会降低可维护性。
oracle键保留表理解
oracle键保留表理解Oracle键保留表(Reserved table for Oracle Keys)引言:在Oracle数据库中,键保留表(Reserved table)是一种用于存储关键信息的特殊表。
它们被Oracle数据库系统预留,并用于特定的目的,例如存储数据库中的键定义、约束条件、触发器等。
本文将详细介绍Oracle键保留表的作用、用法以及一些常见的保留表。
一、Oracle键保留表的作用在Oracle数据库中,键保留表扮演着重要的角色。
它们用于存储和管理数据库中的关键信息,以确保数据库的完整性和一致性。
通过使用这些保留表,数据库管理员可以更好地维护和管理数据库的结构和数据。
二、常见的Oracle键保留表1. DUAL表DUAL表是Oracle数据库中最常见的键保留表之一。
它由Oracle提供,并且在每个数据库中都存在。
DUAL表只有一列DUMMY,用于执行一些特定的函数和计算。
例如,可以使用DUAL表返回当前日期和时间,或者执行一些数学运算。
2. USER_CONSTRAINTS表USER_CONSTRAINTS表存储了数据库中的所有约束条件。
约束条件用于保持数据的完整性,例如主键约束、外键约束、唯一约束等。
通过查询USER_CONSTRAINTS表,可以获取数据库中的所有约束信息,以便进行维护和管理。
3. USER_TRIGGERS表USER_TRIGGERS表用于存储数据库中的触发器信息。
触发器是一种特殊的数据库对象,可以在某个事件发生时自动执行一系列操作。
通过查询USER_TRIGGERS表,可以获取数据库中所有触发器的详细信息,包括触发器的名称、类型、事件以及触发时执行的操作等。
4. USER_INDEXES表USER_INDEXES表存储了数据库中的索引信息。
索引是一种用于提高数据库查询性能的数据结构。
通过查询USER_INDEXES表,可以获取数据库中所有索引的详细信息,包括索引的名称、类型、所属表以及索引的列等。
Oracle中dual表是什么呢?
dual是一个虚拟表,用来构成select的语法规则,oracle保证dual里面永远只有一条记录。我们可以用它来做很多事情,如下:
1、查看当前用户,可以在 SQL Plus中执行下面语句 select user from dual;
2、用来调用系统函数
然后查询一下表里的数据:
SQL> select dummy from dual;
DUMMY
----------
X
只有一条记录, DUMMY的值是’X’ .很正常啊,没什么奇怪嘛. 好,下面就有奇妙的东西出现了!
1 row deleted.
SQL> commit;
Commit complete.
哈哈,也只有一条记录被删掉,
SQL> select * from dual;
DUMMY
----------
Y
为什么会这样呢? 难道SQL的语法对DUAL不起作用吗?带着这个疑问,
我查询了一些ORACLE官方的资料. 原来ORACLE对DUAL表的操作做了一些内部处理,保证DUAL表中只返回一条记录.当然这写内部操作是不可见的 .
SQL> select owner, object_name , object_type from dba_objects where object_name like '%DUAL%'; OWNER OBJECT_NAME OBJECT_TYPE
--------------- --------------- -------------
DUMMY
------示出来 ! 明明DUAL表中有两条记录, 可就是只显示一条!
Oracle Sun Dual Port 10GbE SFP+ PCIe 2.0 网络卡商品说明书
Sun Dual Port 10GbE SFP+ PCIe2.0 Networking Cards with Intel82599 10GbE ControllerOracle's Sun Dual Port 10 GbE PCIe 2.0 Networking Cards with SFP+ pluggable transceivers, which incorporate the Intel 82599 10GbE Controller deliver outstanding performance in virtualized environments for network intensive applications requiring higher I/O bandwidth.K E Y F E A T U R E SAdvanced 10GbE networking for sun blade and rack servers•Fibre Channel over Ethernet (FCoE) support: allows Fibre Channel trafficand LAN traffic to share the samewire•Industry Standard PCIe 2.0 compliant to deliver new levels of 10GbEperformance•Hardware-based networkvirtualization supporting up to 128virtual functions•Choice of form factors: Low profilecard for Sun Rack Servers andExpressModule for Sun Bladeservers•Broad Operating Systems support •Remote managementK E Y B U S I N E S S B E N E F I T S •Convergence of LAN and SANreduce cost and complexity ofmultiple cards, cables and switches Advanced Networking Features for Sun Bladeand Rack ServersMulti-core and virtualized server environments are driving the need for greater networking performance. By efficiently load-balancing interrupts across CPU cores, these dual port 10 Gigabit Ethernet networking cards eliminate bottlenecks for high- performance applications in the data center. Implementation of Data Center Bridging standards for lossless and low latency Ethernet, FCoE support, along with innovations in Oracle Solaris enables data centers to converge server-to-server, server-to-storage and server-to-LAN communications onto a single Ethernet fabric.Built-in Virtualization TechnologyServer virtualization may reduce the number of physical servers, but it increases the demands placed on the network requiring additional capacity, capabilities and devices. Virtual networking capabilities are becoming increasingly important with the growing use of virtual machines, distributed applications, and cloud i nfrastructures.Oracle’s 10GbE SFP+ Ethernet networking cards can be deployed with SR-IOV, for OS supporting SR-IOV, in order to gain direct access to networking hardware for up to 128 virtual machines per networking card. Direct access to hardware from virtual machine environments increases performance and reduces the number of required adapters, cables, and switch ports. Additional hardware-based capabilities deliver I/O virtualization and quality-of- service features that eliminate bottlenecks and improves overall application performance.In addition, Oracle Solaris implements zero overhead server virtualization and Edge Virtual Bridging in order to improve both VM performance and improve traffic forwarding between VMs.Advanced networking and virtualization capabilities incorporated in Oracle Solaris and Oracle VM optimize database and application performance. These capabilities include:∙Hardware accelerated traffic classification for Oracle Solaris 11 network virtualization with zones∙Support for multiple Tx and Rx rings for improved scalabilityfor discrete data and storage networks•Optimized 10GbE performance through iSCSI implementation allowing LAN and storage traffic to share the same network •Elimination of I/O bottlenecks between virtual machines•High virtualization performance •Simplified network topology ∙Dynamic polling in the Oracle Solaris 11 in order to reduce the interrupt rate and improve system efficiency∙Oracle Solaris Zones for Oracle x86/x64 or SPARC T-Series s ervers∙Edge Virtual Bridging for improving traffic forwarding between V Ms∙Centralized, automated network configuration: pool-level bridging, bonding, VLAN, multi- pathing∙Oracle VM Server for x86 3.0.2: network separation isolates traffic for management, live migration, and cluster heartbeat, storage, and virtual machines∙Improved network and OS security with separate instances of virtual operating environmentsConverged Networking and Storage Technology∙Simplify the network infrastructure by allowing LAN, Storage (FC, iSCSI, NFS) and IPC traffic to share the same a single Ethernet fabric.Sun Dual Port 10 GbE PCIe 2.0 EM Sun Dual Port 10 GbE PCIe 2.0 FEMSUN DUAL PORT 10GBE SFP+ PCIE 2.0 NETWORKING CARDS WITH INTEL82599 10GBE CONTROLLER SPECIFICATIONSHardware systems/platforms supportedLow Profile (LP) adapter: Marketing Part Number (X)1109A-Z Sun Fire x86 Rackmount Servers∙Sun Server X2-4∙Sun Server X3-2, Netra X3-2 Server∙Sun Server X3-2LSun Netra X4270 Server SPARC T-Series Servers∙SPARC T4-1 Server, Netra T4-1 Server∙SPARC T4-2 Server, Netra T4-2 ServerExpressModule (EM) adapter:∙SPARC T4-4 Server∙Sun Blade X3-2B Server Module, Netra Blade X3-2B Server Module∙Sun Server X2-8∙Netra X6270 M2 Server ModuleSPARC T4-1B Server Module, Netra SPARC T4-1B Server ModuleFabric Expansion Module (FEM):Used for Sun Blade 6000 Ethernet Switched NEM 24p 10GbE (X2037A) in Sun Blade 6000 and Netra 6000 Modular Systems∙Sun Blade X3-2B Server Module, Netra Blade X3-2B Server Module∙Sun Server X2-8∙Netra X6270 M2 ServerModule∙SPARC T4-1B Server Module, Netra SPARC T4-1B Server Module Refer to the host server’s documentation for the latest hardware support listOperating Systems and Virtualization∙Oracle Solaris∙Oracle Linux∙Oracle VM Server for SPARC∙Red Hat Enterprise Linux∙Novell SUSE Enterprise Linux∙Microsoft Windows∙VMwareRefer to the host server’s documentation for the latest OS version support listFCOE SupportServers supported: Sun Server X3-2, X3-2L, X2-4, X2-8, X3-2BOS supported: OEL 6.2, OEL 6.2 with UEK, RHEL 6.2, SLES 11 SP2,Windows 2008 R2 SP1 Switches (tested):Cisco Nexus 5548P, Brocade: 8000/6730 Storage supported: Oracle Pillar Axiom 600Network Management∙Wired for Management (WfM) baseline v2.0 enabled forservers∙DMI 2.0 support, Windows Management Instrumentation (WMI) and SNMP Remote Installation Services (RIS)∙PXE 2.0 enabled through boot read-only memory (ROM)∙iSCSI remote boot support (on both SPARC and x86)Low Profile Adapter∙Length: 14.55cm (5.73 in.)∙Width: 6.89cm (2.71 in.)ExpressModule Adapter∙Length: 16.82cm (6.62 in.)∙Width: 10.8cm (4.25 in.)Fabric Expansion Module∙Length: 13.97cm (5.5 in.)∙Width: 3.5cm (1.38 in.)∙Height: 1.4cm (0.57 in)Power RequirementsTypical Power Consumption∙Low Profile Adapter: 14W (1.17A @ 12W) dual port∙ExpressModule Adapter: 14W (1.17A @ 12W) dual port∙Fabric Expansion Module: 14W (1.17A @ 12W) dual portPerformance Specifications∙Data rate supported per port: 10 Gbit/sec∙Support of dual speed 1G/10G via “auto try” technology. It will try 10G first then 1G with a time out period. If one end is set to 1G then the other must be 1G as well or "auto try" will fail.Host Interface∙Bus type: PCI Express V2.0, 5.0 Gbit Transfer/sec∙Bus width: x8 lane PCI Express 2.0 (operable in x8 slots)Network interfaceOptical Transceivers∙X2129A: 10Gbps Dual Rate SFP+ SR (Short Reach) TransceiverUse with MMF (Multi-Mode Fiber 850nm) cable with LC connector , support 1G and 10G dual rate ∙X5562A: 10 Gbps SFP+ LR (Long Reach) TransceiverUse with SMF (Single Mode Fiber 1310nm) cable with LC connectorDirect Connect TwinX Passive Copper Cables (transceivers should not be used)∙X2130A-1M: Sun 10 Gbps 1meter SFP+ TwinX Passive Copper Cable (direct connect)∙X2130A-3M: Sun 10 Gbps 3meter SFP+ TwinX Passive Copper Cable (direct connect)∙X2130A-5M: Sun 10 Gbps 5meter SFP+ TwinX Passive Copper Cable (direct connect)QSFP to 4 SFP+ Direct Connect Passive Copper Splitter Cable (Do not use transceivers). These cables are supported for connectivity to Oracle 72port 10 GbE Switch (X2074A-F, X2074A-R). QSFP end plugs directly into the QSFP port of the Oracle switch and SFP+ end plugs directly into the SFP+ port of the card∙X2125A-1M-N QSFP to 4 SFP+ 1 Meter, Passive Copper Splitter C able∙X2125A-3M-N QSFP to 4 SFP+ 3 Meter, Passive Copper Splitter C able∙X2125A-5M-N QSFP to 4 SFP+ 5 Meter, Passive Copper Splitter C ableOptical Splitter CableQSFP Optical Splitter Cable. These cables are supported for connectivity to Oracle 72port 10 GbE Switch (X2074A-F, X2074A-R) and Oracle QSFP Transceiver (X2124A). MTP end plugs into the QSFP transceiver of the Oracle Switch and LC end plugs into the SFP+ SR Transceiver in the card∙X2127A-10M 10 Meter, Optical Splitter (MTP to 4 LC)(Multi mode)∙X2127A-20M 20 Meter, Optical Splitter (MTP to 4 LC) (Multi mode)∙X2127A-50M 50 Meter, Optical Splitter (MTP to 4 LC) (Multi m ode)Ethernet Standards Supported∙IEEE 802.ae, 2002 compliant∙IEEE 802.1Q VLAN∙IEEE 802.3ad link aggregation∙TCP/UDP/IP h/w checksum off-loadCertifications∙Hardware certifications: FCC B, UL, CE, VCCI, BSMI, CTICK, M ICMarketing Part Numbers(X) 1109A-Z Sun Dual 10GbE SFP+ PCIe 2.0 Low Profile adapterWarrantyVisit /sun/warranty for Oracle's global warranty support information on Sun products.ServicesVisit /sun/services for information on Oracle's service program offerings for Sun products.Contact UsFor more information about Sun Dual Port 10GbE SFP+ PCIe 2.0 Networking Cards with Intel 82599 10Gbe Controller, visit or call +1.800.ORACLE1 to speak to an Oracle representative.C O N N E C T W I T H U S/oracle/oracle/oracle C O N T A C T U SFor more information about Sun Dual Port 10GbE SFP+ PCIe 2.0 Networking Cards with Intel 82599 10Gbe Controller, visit or call +1.800.ORACLE1 to speak to an Oracle representative.Copyright © 2020, Oracle and/or its affiliates. All rights reserved. This document is provided for information purposes only, and the contents hereof are subject to change without notice. This document is not warranted to be error-free, nor subject to any other warranties or conditions, whether expressed orally or implied in law, including implied warranties and conditions of merchantability or fitness for a particular purpose. We specifically disclaim any liability with respect to this document, and no contractual obligations are formed either directly or indirectly by this document. This document may not be reproduced or transmitted in any form or by any means, electronic or mechanical, for any purpose, without our prior written permission.Oracle and Java are registered trademarks of Oracle and/or its affiliates. Other names may be trademarks of their respective owners. Intel and Intel Xeon are trademarks or registered trademarks of Intel Corporation. All SPARC trademarks are used under license and are trademarks or registered trademarks of SPARC International, Inc. AMD, Opteron, the AMD logo, and the AMD Opteron logo are trademarks or registered trademarks of Advanced Micro Devices. UNIX is a registered trademark of The Open Group. 0916。
【Oracle】Oracle时间日期格式
【Oracle】Oracle时间⽇期格式to_date("要转换的字符串","转换的格式") 两个参数的格式必须匹配,否则会报错。
即按照第⼆个参数的格式解释第⼀个参数。
to_char(⽇期,"转换格式" ) 即把给定的⽇期按照“转换格式”转换。
转换的格式:表⽰year的:y 表⽰年的最后⼀位 yy 表⽰年的最后2位 yyy 表⽰年的最后3位 yyyy ⽤4位数表⽰年表⽰month的:mm ⽤2位数字表⽰⽉;mon ⽤简写形式⽐如11⽉或者nov ;month ⽤全称⽐如11⽉或者november表⽰day的:dd 表⽰当⽉第⼏天;ddd表⽰当年第⼏天;dy 当周第⼏天简写⽐如星期五或者fri;day当周第⼏天全写⽐如星期五或者friday。
表⽰hour的:hh 2位数表⽰⼩时 12进制; hh24 2位数表⽰⼩时 24⼩时表⽰minute的:mi 2位数表⽰分钟表⽰second的:ss 2位数表⽰秒 60进制表⽰季度的:q ⼀位数表⽰季度(1-4)另外还有ww ⽤来表⽰当年第⼏周 w⽤来表⽰当⽉第⼏周。
24⼩时制下的时间范围:00:00:00-23:59:5912⼩时制下的时间范围:1:00:00-12:59:59⽐如:select to_char(sysdate,'yy-mm-dd hh24:mi:ss') from dual //显⽰:08-11-07 13:22:42select to_date('2005-12-25,13:25:59','yyyy-mm-dd,hh24:mi:ss') from dual //显⽰:2005-12-25 13:25:59⽽如果把上式写作:select to_date('2005-12-25,13:25:59','yyyy-mm-dd,hh:mi:ss') from dual,则会报错,因为⼩时hh是12进制,13为⾮法输⼊,不能匹配。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
-----
X
Y
SQL> select sysdate from dual;
SYSDATE
-----------
2004-12-15
2004-12-15
这个时候返回的是两条记录,这样同样会引起问题。在通过使用
select sysdate into v_sysdate from dual;
)
tablespace SYSTEM
pctfree 10
pctused 40
initrans 1
maxtrans 255
storage
(
initial 16K
next 16K
minextents 1
maxextents 505
pctincrease 50
);
/*
很是困惑,ORACLE为什么要用VARCHAR(1)型,用CHAR(1)难道不好么?从这样的表结构来看,DUAL表设计的目的就是要尽可能的简单,以减少检索的开销。
还有,DUAL表是建立在SYSTEM表空间的,第一是因为DUAL表是SYS这个用户建的,本来默认的表空间就是SYSTEM;第二,把这个可能经常被查询的表和用户表分开来存放,对于系统性能的是有好处的。
有了创建了表、创建了同义词还是不够的。DUAL在SYS这个Schema下面,因此用别的用户登录是无法查询这个表的,因此还需要授权:
3、如果DUAL表被“不幸”删除后的恢复:
用sys用户登陆。
创建DUAL表。
授予公众SELECT权限(SQL如上述,但不要给UPDATE,INSERT,DELETE权限)。
向DUAL表插入一条记录(仅此一条): insert into dual values(''X'');
提交修改。
--用sys用户登陆。
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
----------
OWNER OBJECT_NAME OBJECT_TYPE
---------- ----------------- ------------------
SYS DUAL TABLE
PUBLIC DUAL SYNONYM
--查看表结构,只有一个字段DUMMY,为VARCHAR2(1)型
SQL> desc dual
The base issue you should always remember and keep is: DUAL table should always have 1 ROW. Dual is a normal table with one dummy column of varchar2(1).
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;
Name Type Nullable Default Comments
----- ----------- -------- ------- --------
DUMMY VARCHAR2(1) Y
--DUAL表的结构:
create table SYS.DUAL
(
DUMMY VARCHAR2(1)
--查看当前连接用户
SQL> select user from dual;
USER
------------------------------
SYSTEM
--查看当前日期、时间
SQL> select sysdate from dual;
SYSDATE
-----------
2007-1-24 1
grant select on SYS.DUAL to PUBLIC with grant option;
将Select 权限授予公众。
接下来看看DUAL表中的数据,事实上,DUAL表中的数据和ORACLE数据库环境有着十分重要的关系(ORACLE不会为此瘫痪,但是不少存储过程以及一些查询将无法被正确执行)。
--试着把DUAL表中的数据删除,看看会出现什么结果:
SQL> delete from dual;
1 行 已删除
SQL> select * from dual;
DUMMY
-----
SQL> select sysdate from dual;
SYSDATE
-----------
/*
COUNT(*)
----------
2
SQL> delete from dual;
1 行 已删除
SQL> commit;
提交完成
SQL> select count(*) from dual;
COUNT(*)
----------
1
/*
附: ORACLE关于DUAL表不同寻常特性的解释
ORACLE DUAL表详解
下面来源: /blog/cns!FBA7EF989C66522E!515.entry
1、DUAL表的用途
Dual 是 Oracle中的一个实际存在的表,任何用户均可读取,常用在没有目标表的Select语句块中
4
SQL> select * from dual;
DUMMY
-----
X
/*
--假我们插入一条数据,DUAL表不是返回一行,而是多行记录,那会是什么结果呢?
SQL> insert into dual values(''Y'');
1 行 已插入
SQL> commit;
提交完成
SQL> select * from dual;
我们便取不到系统日期了。因为,sysdate是个函数,作用于每一个数据行。现在没有数据了,自然就不可能取出系统日期。
这个对于很多用
select sysdate into v_sysdate from dual;
这种方式取系统时间以及其他信息的存储过程来说是致命的,因为,ORACLE会马上抛出一个NO_DATA_FOUND(ORA-01403)的异常,即使异常被捕获,存储过程也将无法正确完成要求的动作。
Table truncated.
SQL> select count(*) from dual;
COUNT(*)
----------
0
SQL> select * from dual;
no rows selected
SQL> select sysdate from dual;
no rows selected
prebuilt or application functions. If DUAL has no rows at all some applications (that use DUAL) may fail with NO_DATA_FOUND exception. If DUAL has more than 1 row then applications (that use DUAL) may fail with TOO_MANY_ROWS exception.
DUMMY
-----
X
--插入数据,再查询记录,只返回一行记录
SQL> insert into dual values (''Y'');
1 row created.
SQL> commit;
Commit complete.
SQL> insert into dual values (''X'');
来获取时间或者其他信息的存储过程来说,ORACLE会抛出TOO_MANY_ROWS(ORA-01422)异常。
因此,需要保证在DUAL表内有且仅有一条记录。当然,也不能把DUAL表的UPDATE,INSERT,DELETE权限随意释放出去,这样对于系统是很危险的
*/
--把表截掉
SQL> truncate table dual;
1 row created.
SQL> insert into dual values (''Z'');
1 row created.
SQL> commit;
Commit complete.
SQL> select count(*) from dual;
COUNT(*)
----------
So DUAL should ALWAYS have 1 and only 1 row
*/
DUAL表可以执行插入、更新、删除操作,还可以执行drop操作。但是不要去执行drop表的操作,否则会使系统不能用,数据库起不了,会报Database startup crashes with ORA-1092错误。