sql dual nextval
来源:互联网 发布:unix和linux的区别 编辑:程序博客网 时间:2024/04/30 09:45
http://blog.sina.com.cn/s/blog_66998a410100i3ng.html
sql dual nextval
dual表是什么表?
经常看到别人的存储过程中有select …………from dual
请问dual是什么表啊?
为了SQL语意完整而已
select sysdate from dual
相当与Sql Server的
set @Date=getdate()
dual是Oracle與數據字典一起自動創建的一個表﹐它只有一列﹕DUMMY﹐其數據類型為﹕VARCHAR2(1)。dual中只有一行數據﹕'X'。dual屬于sys模式﹐但所有用戶都可以使用dual名稱訪問它﹐用SELECT計算常量表達式﹑偽列等值時常用該表﹐因為它只返回一行數據﹐而使用其它表時可能返回多個數據行。
经常看到别人的存储过程中有select …………from dual
请问dual是什么表啊?
为了SQL语意完整而已
select sysdate from dual
相当与Sql Server的
set @Date=getdate()
dual是Oracle與數據字典一起自動創建的一個表﹐它只有一列﹕DUMMY﹐其數據類型為﹕VARCHAR2(1)。dual中只有一行數據﹕'X'。dual屬于sys模式﹐但所有用戶都可以使用dual名稱訪問它﹐用SELECT計算常量表達式﹑偽列等值時常用該表﹐因為它只返回一行數據﹐而使用其它表時可能返回多個數據行。
NEXTVAL 和 CURRVAL 运算符(IDS)
可以通过在SQL 语句中使用 NEXTVAL 或 CURRVAL 运算符来访问序列的值。必须用以 sequence.NEXTVAL 或 sequence.CURRVAL 格式驻留在同一个数据库中的序列名称(或同义词)来限定 NEXTVAL 或 CURRVAL。表达式也可以用所有者名来限定序列,如 zelaine.myseq.CURRVAL。可以指定 sequence 的 SQL 标识或有效同义词(如果存在的话)。
在符合ANSI 的数据库中,如果您不是所有者,必须用所有者名(owner.sequence)限定序列名。
要对序列使用NEXTVAL 或 CURRVAL,必须对序列具有选择特权或对数据库具有 DBA 特权。关于序列级特权的信息,请参阅 GRANT 语句。
使用NEXTVAL
第一次访问一个序列,在引用sequence.CURRVAL 之前必须先引用 sequence.NEXTVAL。第一次引用 NEXTVAL,返回序列的初始值。后面每次引用 NEXTVAL,用已定义的 step 增加序列值并返回序列新的增加以后的值。
在一个SQL 语句中只能对给定的序列增加一次。即使在一个语句中多次指定 sequence.NEXTVAL,序列也只增加一次,所以每次 sequence.NEXTVAL 出现在同一 SQL 语句中返回相同的值。
除了在同一语句中多次出现这种情况以外,每个sequence.NEXTVAL 表达式都会增加序列,无论后来是否提交或回滚当前事务。
如果在最终回滚的事务中指定sequence.NEXTVAL,某些序列数可能被跳过。
使用CURRVAL
任何对CURRVAL 的引用返回指定序列的当前值,该值是最后一次对 NEXTVAL 的引用所返回的值。用 NEXTVAL 生成一个新值以后,可以继续使用 CURRVAL 访问这个值,不管另一个用户是否增加这个序列。
如果sequence.CURRVAL 和 sequence.NEXTVAL 都出现在一个 SQL 语句中,则序列只增加一次。在这种情况下,每个 sequence.CURRVAL 和 sequence.NEXTVAL 表达式都返回相同的值,不管在语句中 sequence.CURRVAL 和 sequence.NEXTVAL 的顺序。
序列的并发访问
序列总是在数据库中生成唯一值,即使当多个用户并发地引用同一序列时也没有可察觉的等待或锁定。当多个用户使用NEXTVAL 来增长序列时,每个用户生成一个其他用户不可见的唯一值。
当多个用户并发地增加同一序列时,每个用户看到的值是有差异的。例如,一个用户可能从一个序列生成一组值,如1、4、6 和 8,而另一个用户并发地从同一序列生成值 2、3、5 和 7。
限制
NEXTVAL和 CURRVAL 只在 SQL 语句中有效,并不在 SPL 语句中直接有效。(但是使用 NEXTVAL 和 CURRVAL 的 SQL 语句可用于 SPL 例程。)以下限制应用于 SQL 语句中的这些运算符:
必须对序列有选择特权。
在CREATE TABLE 或 ALTER TABLE 语句中,在下列上下文中不能指定 NEXTVAL 或 CURRVAL:
在DEFAULT 子句中
在检查约束中。
在SELECT 语句中,下列上下文中不能指定 NEXTVAL 或 CURRVAL:
使用DISTINCT 关键字时在投影列表中。
在WHERE、GROUP BY 或 ORDER BY 子句中
在子查询中
在UNION 运算符结合 SELECT 语句时。
在下列这些上下文中也不能指定NEXTVAL 或 CURRVAL:
在分段存储表达式中
在对另一个数据库中的远程序列对象的引用中。
示例
在下面的例子中,假设没有其它用户并发地访问序列并且用户连续执行语句。
示例基于下列序列和表:
CREATESEQUENCE seq_2
INCREMENT BY 1 START WITH 1
MAXVALUE 30 MINVALUE 0
NOCYCLE CACHE 10 ORDER;
CREATETABLE tab1 (col1 int, col2 int);
INSERTINTO tab1 VALUES (0, 0);
可以在INSERT 语句的 values 子句中使用 NEXTVAL(或 CURRVAL),如以下示例中所示:
INSERTINTO tab1 (col1, col2)
VALUES (seq_2.NEXTVAL, seq_2.NEXTVAL)
在前面的例子中,数据库服务器把一个增加后的值(或序列的初始值,即1)插入到表的 col1 和 col2 列。
可以在UPDATE 语句的 SET 子句中使用 NEXTVAL(或 CURRVAL),如以下示例中所示:
UPDATEtab1
SET col2 = seq_2.NEXTVAL
WHERE col1 = 1;
在前面的例子中,seq_2序列增长以后的值,即 2,替换了 col2 中 col1 等于 1 的值。
以下示例显示了如何在SELECT 语句的 Projection 子句中使用 NEXTVAL 和 CURRVAL:
SELECTseq_2.CURRVAL, seq_2.NEXTVAL FROM tab1;
在前面的示例中,数据库服务器从CURRVAL 和 NEXTVAL 表达式返回两行增加后的值,3 和 4。对 tab1 的第一行,数据库服务器返回 CURRVAL 和 NEXTVAL 增加后的值 3;对 tab1 的第二行,它返回增加后的值 4。
可以通过在
在符合
要对序列使用
使用
第一次访问一个序列,在引用
在一个
除了在同一语句中多次出现这种情况以外,每个
如果在最终回滚的事务中指定
使用
任何对
如果
序列的并发访问
序列总是在数据库中生成唯一值,即使当多个用户并发地引用同一序列时也没有可察觉的等待或锁定。当多个用户使用
当多个用户并发地增加同一序列时,每个用户看到的值是有差异的。例如,一个用户可能从一个序列生成一组值,如
限制
NEXTVAL
必须对序列有选择特权。
在
在
在检查约束中。
在
使用
在
在子查询中
在
在下列这些上下文中也不能指定
在分段存储表达式中
在对另一个数据库中的远程序列对象的引用中。
示例
在下面的例子中,假设没有其它用户并发地访问序列并且用户连续执行语句。
示例基于下列序列和表:
CREATE
CREATE
INSERT
可以在
INSERT
在前面的例子中,数据库服务器把一个增加后的值(或序列的初始值,即
可以在
UPDATE
在前面的例子中,seq_2
以下示例显示了如何在
SELECT
在前面的示例中,数据库服务器从
- sql dual nextval
- select hibernate_sequence.nextval from dual
- Hibernate: select hibernate_sequence.nextval from dual
- dual is not mapped,select ordercode_seq_id.nextval nextvalue from dual
- dual is not mapped,select ordercode_seq_id.nextval nextvalue from dual
- 【SQL】DUAL
- Oracle中select SEQ_YX.nextval from dual是什么意思
- 使用 ssh框架 hibernate的save(entity)时执行到select hibernate_sequence.nextval from dual 就停了
- pl-sql中select * from dual 这个dual是什么
- dual
- dual
- dual
- oracle sql 替换 in ,dual性能优化
- Oracle SQL构造年月日 connect by 、dual
- java.sql.SQLSyntaxErrorException: ORA-00942: 表或视图不存在异常,或者can not get sequence nextval
- NULL及DUAL详解-数据库专栏,SQL Server
- Oracle DUAL, DB2 SYSIBM.SYSDUMMY1, SQL Server Blank
- mybatis中insert into ...select ...from dual union all select ... from dual 提示sql命令未结束的问题
- Java序列化机制和原理
- IT职场中外企面试最爱提的问题TOP10
- java中RSA加解密的实现
- 60位演讲大师合集,错过将遗憾终生!
- 在使用 ST_Geometry 空间索引时优化 Oracle 查询性能和存储
- sql dual nextval
- Windows Phone 设置全屏幕
- sams emacs 24 hour 读书笔记5
- x210 debug口当普通串口使用
- VC6.0工程设置
- 三种实现夜间模式的方法
- 软件随想录(local.joelonsoftware.com/wiki)-2000年06月03日 策略书之三:让我换回去! - Strategy Letter III: Let Me Go Back!
- php用date格式化输出指定范围的时间
- C语言memcpy函数误解