ORACLE PL/SQL 中序列(sequence)的简易使用方法介绍
如果我是C罗 原文 ORACLE PL/SQL 中序列(sequence)的简易使用方法介绍
sequence在ORACLE中应用十分广泛,就是序列号的意思,会自动增加指定变数,如逐次增加1或者2或者其他.
1.创建序列 Create Sequence
你首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE 权限
CREATE SEQUENCE CUX_DEMO_SEQUENCE
MINVALUE 1
MAXVALUE 99999999999
START WITH 10000
INCREMENT BY 1
NOCYCLE
CACHE 20
ORDER ;
注释:
MINVALUE 1 --最小值
MAXVALUE 99999999999 --最大值
START WITH 10000 --起始数值
INCREMENT BY 1 --每次增加1
NOCYCLE --一直累加不循环
CACHE 20 --缓存
ORDER ;
还有一些其他参数,比如:
NOMAXVALUE --无最大值
NOCACHE --不设置缓存
如果指定CACHE值,ORACLE就可以预先在内存里面放置一些sequence,这样存取的快些。cache里面的取完后,oracle自动再取一组到cache。使用cache或许会跳号,
比如数据库突然不正常down掉(shutdown abort),cache中的sequence就会丢失. 所以可以在create
sequence的时候用nocache防止这种情况。
2.使用序列
定义好SEQUENCE,你就可以用CURRVAL,NEXTVAL
CURRVAL=返回 SEQUENCE的当前值
NEXTVAL=增加SEQUENCE的值,然后返回 SEQUENCE 值
EXAMPLE:
CUX_DEMO_SEQUENCE.CURRVAL
CUX_DEMO_SEQUENCE.NEXTVAL
可以使用SEQUENCE的地方:
- 不包含子查询、snapshot、VIEW的 SELECT 语句
- INSERT语句的子查询中
- NSERT语句的VALUES中
- UPDATE 的 SET中
可以看如下例子:
INSERT INTO CUX_DEMO_TABLE VALUES
(CUX_DEMO_SEQUENCE.NEXTVAL, 123 , 'IBAD' , 'MARK' ,'Y');
SELECT CUX_DEMO_SEQUENCE.CURRVAL FROM DUAL;
注意:
第一次NEXTVAL返回的是初始值;随后的NEXTVAL会自动增加你定义的INCREMENTBY值,然后返回增加后的值。CURRVAL
总是返回当前SEQUENCE的值,但是在第一次NEXTVAL初始化之后才能使用CURRVAL,否则会出错。一次NEXTVAL会增加一次SEQUENCE的值,所以如果你在同一个语句里面使用多个NEXTVAL,其值就是不一样的。
3. 修改序列 ALTER SEQUENCE
你或者是该SEQUENCE的owner,或者有ALTER ANY SEQUENCE 权限才能改动SEQUENCE.
可以alter除start至以外的所有SEQUENCE参数.如果想要改变start值,必须 DROP SEQUENCE 再
重新创建SEQUENCE .
Alter SEQUENCE
ALTER SEQUENCE CUX_DEMO_SEQUENCE
INCREMENT BY 10
MAXVALUE 10000
CYCLE -- 到10000后从头开始
NOCACHE ;
影响SEQUENCE的初始化参数:
SEQUENCE_CACHE_ENTRIES =设置能同时被cache的SEQUENCE数目。
4.删除序列 DROP SEQUENCE
可以很简单的Drop SEQUENCE
DROP SEQUENCE CUX_DEMO_SEQUENCE;
11g中对PL/SQL访问sequence的一个改进
在Oracle 11g之前,熟悉pl/sql编程的puber们都知道,当在pl/sql 代码中访问一个sequence的时候,一般的做法是,比如:
DECLARE v_n number;
BEGIN
SELECT Seq.Nextval INTO v_n FROM Dual;
....
END;
所以大家都觉得很烦琐,而且这么写有一定的性能上的开销,但是没办法,那么好了,到了11g,这个问题Oracle开发者为你排忧了。
在11g中,重新修改了访问方法,不仅仅提高了运行效率而且在pl/sql中的调用方法也变的非常简单,在11g中,你可以简单的这样处理:
DECLARE v_n NUMBER:=Seq.Nextval;
BEGIN
....
END;
ORACLE PL/SQL 中序列(sequence)的简易使用方法介绍的更多相关文章
- Oracle PL/SQL中的循环处理(sql for循环)
今天来说下Oracle中的循环迭代处理,因为从自己的博客统计中看到,不少网友都搜索了关键字"SQL FOR循环",所以打算在这里说下个人的理解. PL/SQL也和我们常用的编程语言 ...
- Oracle PL/SQL中异常高级特性
在OraclePL/SQL语句块中exception的异常处理部分是非常重要的组成部分,它决定了在PL/SQL语句块内部可执行部分在发生异常错误时,程序是友好地提示:程序遇到某些错误而无法执行,还是抛 ...
- Oracle PL/SQL中如何使用%TYPE和%ROWTYPE
1. 使用%TYPE 在许多情况下,PL/SQL变量可以用来存储在数据库表中的数据.在这种情况下,变量应该拥有与表列相同的类型.例如,students表的first_name列的类型为VARCHAR2 ...
- oracle pl/sql中的循环及if语句
for循环 /* for循环打印1到10 */ set serveroutput on; declare begin .. loop dbms_output.put_line(i); end loop ...
- Oracle数据库中序列(SEQUENCE)的用法详解
Oracle数据库中序列(SEQUENCE)的用法详解 在Oracle数据库中,序列的用途是生成表的主键值,可以在插入语句中引用,也可以通过查询检查当前值,或使序列增至下一个值.本文我们主要介绍了 ...
- ORACLE PL/SQL 实例精解之第三章 PL/SQL中的SQL
3.1 在PL/SQL中使用DML 在PL/SQL语块中,两种变量赋值a. := 初始化.b. select into语法,PL/SQL语块的声明部分被声明的变量,后期可以使用选择语句进行赋值. 3. ...
- 在PL/SQL中调用Oracle存储过程
存储过程 1 什么是存储过程? 用于在数据库中完成特定的操作或者任务.是一个PLSQL程序块,可以永久的保存在数据库中以供其他程序调用. 2 存储过程的参数模式 存储过程的参数特性: IN类型的参数 ...
- 在PL/SQL中调用存储过程--oracle
在oracle10中写好了存储过程,代码如下: CREATE OR REPLACE Procedure Proc_Insert ( sName in varchar2, sAge in int, sE ...
- oracle PL/SQL(procedure language/SQL)程序设计(在PL/SQL中使用SQL)
在PL/SQL程序中,允许使用的SQL语句只有DML和事务控制语句,使用DDL语句是非法的.使用SELECT语句从数据库中选取数据时,只能返回一行数据.使用COMMIT, ROLLBACK, 和SA ...
随机推荐
- Java中JVM虚拟机详解
1. 什么是JVM? JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来 ...
- 洛谷 P1709 [USACO5.5]隐藏口令Hidden Password
P1709 [USACO5.5]隐藏口令Hidden Password 题目描述 有时候程序员有很奇怪的方法来隐藏他们的口令.Binny会选择一个字符串S(由N个小写字母组成,5<=N<= ...
- php excel文件导出之phpExcel扩展库
php Excel 文件导出 phpExcel 官网 http://phpexcel.codeplex.com/ /** * 导出特定文件 * 依据详细情况而定 */ public function ...
- checkbox-padding 调整checkbox字体跟图标距离
有时候我们会遇到需要调整控件中的内容相对于容器的位置.这里有两种情况 1.linearlayout这样的容器中,包含button类的控件,这时候margin可以调节 2.textview中的文字内容 ...
- 25.C++多线程
#include <iostream> #include <thread> #include <Windows.h> using namespace std; vo ...
- css实现一个缺口小三角
.square{ width:; height:; margin:0 auto; border:6px solid transparent; border-bottom: 6px solid red; ...
- httpurlconnection发送文件到服务端并接收
httpurlconnection发送文件到服务端并接收 客户端 import java.io.DataInputStream; import java.io.File; import java.io ...
- 一个发邮件的demo 用golang
一个比较成熟的第三方包用来发邮件,可以带图片 和附件,项目地址 : github.com/go-gomail/gomail 一个发邮件的demo 用golang 文件目录树: -d:\test\goe ...
- BZOJ1023: [SHOI2008]cactus仙人掌图(仙人掌)
Description 如果某个无向连通图的任意一条边至多只出现在一条简单回路(simple cycle)里,我们就称这张图为仙人掌图(cactus).所谓简单回路就是指在图上不重复经过任何一个顶点的 ...
- Node.js笔记 请求方式 GET
三种方法解析url 1. 传统的字符串split切割方法 2. querystring 只能解析数据部分,不能解析前面 index.html之类的地址部分. 3. url 可以解析地址和数 ...