﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-火凤凰--以其至死不愈的飞翔来完成对梦想的追逐!-文章分类-Oracle</title><link>http://www.blogjava.net/cenphoenix/category/8147.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 02 Mar 2007 03:37:33 GMT</lastBuildDate><pubDate>Fri, 02 Mar 2007 03:37:33 GMT</pubDate><ttl>60</ttl><item><title>ORACLE SEQUENCE的简单介绍</title><link>http://www.blogjava.net/cenphoenix/articles/33944.html</link><dc:creator>cenphoenix</dc:creator><author>cenphoenix</author><pubDate>Mon, 06 Mar 2006 15:13:00 GMT</pubDate><guid>http://www.blogjava.net/cenphoenix/articles/33944.html</guid><wfw:comment>http://www.blogjava.net/cenphoenix/comments/33944.html</wfw:comment><comments>http://www.blogjava.net/cenphoenix/articles/33944.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cenphoenix/comments/commentRss/33944.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cenphoenix/services/trackbacks/33944.html</trackback:ping><description><![CDATA[<TABLE cellSpacing=1 cellPadding=1 width="95%">
<TBODY>
<TR>
<TD vAlign=top align=middle height=20><FONT color=#4d99e5 size=2>出自：http://www.fanqiang.com 2002年05月14日 19:35</FONT></TD></TR>
<TR>
<TD class=f14><BR>在oracle中sequence就是所谓的序列号，每次取的时候它会自动增加，一般用在需要按序列号排序的地方。 <BR>1、Create Sequence <BR>你首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限， <BR>CREATE SEQUENCE emp_sequence <BR>INCREMENT BY 1 -- 每次加几个 <BR>START WITH 1 -- 从1开始计数 <BR>NOMAXVALUE -- 不设置最大值 <BR>NOCYCLE -- 一直累加，不循环 <BR>CACHE 10; <BR><BR>一旦定义了emp_sequence，你就可以用CURRVAL，NEXTVAL <BR>CURRVAL=返回 sequence的当前值 <BR>NEXTVAL=增加sequence的值，然后返回 sequence 值 <BR>比如： <BR>emp_sequence.CURRVAL <BR>emp_sequence.NEXTVAL <BR><BR>可以使用sequence的地方： <BR>- 不包含子查询、snapshot、VIEW的 SELECT 语句 <BR>- INSERT语句的子查询中 <BR>- NSERT语句的VALUES中 <BR>- UPDATE 的 SET中 <BR><BR>可以看如下例子： <BR>INSERT INTO emp VALUES <BR>(empseq.nextval, 'LEWIS', 'CLERK',7902, SYSDATE, 1200, NULL, 20); <BR><BR>SELECT empseq.currval FROM DUAL; <BR><BR>但是要注意的是： <BR>- 第一次NEXTVAL返回的是初始值；随后的NEXTVAL会自动增加你定义的INCREMENT BY值，然后返回增加后的值。CURRVAL 总是返回当前SEQUENCE的值，但是在第一次NEXTVAL初始化之后才能使用CURRVAL，否则会出错。一次NEXTVAL会增加一次SEQUENCE的值，所以如果你在同一个语句里面使用多个NEXTVAL，其值就是不一样的。明白？ <BR><BR>- 如果指定CACHE值，ORACLE就可以预先在内存里面放置一些sequence，这样存取的快些。cache里面的取完后，oracle自动再取一组到cache。 使用cache或许会跳号， 比如数据库突然不正常down掉（shutdown abort),cache中的sequence就会丢失. 所以可以在create sequence的时候用nocache防止这种情况。 <BR><BR>2、Alter Sequence <BR>你或者是该sequence的owner，或者有ALTER ANY SEQUENCE 权限才能改动sequence. 可以alter除start至以外的所有sequence参数.如果想要改变start值，必须 drop sequence 再 re-create . <BR>Alter sequence 的例子 <BR>ALTER SEQUENCE emp_sequence <BR>INCREMENT BY 10 <BR>MAXVALUE 10000 <BR>CYCLE -- 到10000后从头开始 <BR>NOCACHE ; <BR><BR><BR>影响Sequence的初始化参数： <BR>SEQUENCE_CACHE_ENTRIES =设置能同时被cache的sequence数目。 <BR><BR>可以很简单的Drop Sequence <BR>DROP SEQUENCE order_seq; <BR></TD></TR></TBODY></TABLE><img src ="http://www.blogjava.net/cenphoenix/aggbug/33944.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cenphoenix/" target="_blank">cenphoenix</a> 2006-03-06 23:13 <a href="http://www.blogjava.net/cenphoenix/articles/33944.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>