如果我是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的一个改进

5.在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)的简易使用方法介绍的更多相关文章

  1. Oracle PL/SQL中的循环处理(sql for循环)

    今天来说下Oracle中的循环迭代处理,因为从自己的博客统计中看到,不少网友都搜索了关键字"SQL FOR循环",所以打算在这里说下个人的理解. PL/SQL也和我们常用的编程语言 ...

  2. Oracle PL/SQL中异常高级特性

    在OraclePL/SQL语句块中exception的异常处理部分是非常重要的组成部分,它决定了在PL/SQL语句块内部可执行部分在发生异常错误时,程序是友好地提示:程序遇到某些错误而无法执行,还是抛 ...

  3. Oracle PL/SQL中如何使用%TYPE和%ROWTYPE

    1. 使用%TYPE 在许多情况下,PL/SQL变量可以用来存储在数据库表中的数据.在这种情况下,变量应该拥有与表列相同的类型.例如,students表的first_name列的类型为VARCHAR2 ...

  4. oracle pl/sql中的循环及if语句

    for循环 /* for循环打印1到10 */ set serveroutput on; declare begin .. loop dbms_output.put_line(i); end loop ...

  5. Oracle数据库中序列(SEQUENCE)的用法详解

    Oracle数据库中序列(SEQUENCE)的用法详解   在Oracle数据库中,序列的用途是生成表的主键值,可以在插入语句中引用,也可以通过查询检查当前值,或使序列增至下一个值.本文我们主要介绍了 ...

  6. ORACLE PL/SQL 实例精解之第三章 PL/SQL中的SQL

    3.1 在PL/SQL中使用DML 在PL/SQL语块中,两种变量赋值a. := 初始化.b. select into语法,PL/SQL语块的声明部分被声明的变量,后期可以使用选择语句进行赋值. 3. ...

  7. 在PL/SQL中调用Oracle存储过程

    存储过程 1 什么是存储过程? 用于在数据库中完成特定的操作或者任务.是一个PLSQL程序块,可以永久的保存在数据库中以供其他程序调用. 2 存储过程的参数模式 存储过程的参数特性: IN类型的参数 ...

  8. 在PL/SQL中调用存储过程--oracle

    在oracle10中写好了存储过程,代码如下: CREATE OR REPLACE Procedure Proc_Insert ( sName in varchar2, sAge in int, sE ...

  9. oracle PL/SQL(procedure language/SQL)程序设计(在PL/SQL中使用SQL)

    在PL/SQL程序中,允许使用的SQL语句只有DML和事务控制语句,使用DDL语句是非法的.使用SELECT语句从数据库中选取数据时,只能返回一行数据.使用COMMIT,  ROLLBACK, 和SA ...

随机推荐

  1. C# 的时间戳 在flash actionscript中使用

    眼下在做一个项目,要以字节的方式传时间戳到flash中, 错误的就不写了.仅仅写一个能够使用的例如以下: C# DateTime centuryBegin = new DateTime(1970, 1 ...

  2. jQ-多选按钮实现单选按钮的功能以及input按钮的优化

    css: .displayN{display: none;} label {font-size:12px;cursor:pointer;} label i {font-size:12px;font-s ...

  3. 趣闻|Python之禅(The Zen of Python)

    在Python解释器中输入“import this”会发生什么?如果你不知道这个彩蛋,推荐继续阅读这篇文章. 2001年秋,Foretec(一家会议组织公司)正在准备召开第十届Internationa ...

  4. 【hdu 1068】Girls and Boys

    [Link]:http://acm.hdu.edu.cn/showproblem.php?pid=1068 [Description] 有n个人,一些人认识另外一些人,选取一个集合,使得集合里的每个人 ...

  5. android通用JSON解析

    ackage cn.com.pcgroup.<a href="http://lib.csdn.net/base/15" class="replace_word&qu ...

  6. 【Tomcat】严重: Context [/grouponAdminWeb] startup failed due to previous errors

    1 tomcat 6600启动报错[root@localhost webapps]#     sh /usr/local/apache-tomcat-6.0.37_6600/bin/startup.s ...

  7. A题之拼音转数字

    输入是一个仅仅包括拼音的字符串,请输出相应的数字序列.转换关系例如以下: 描写叙述: 拼音 yi er san si wu liu qi ba jiu       阿拉伯数字 1 2 3 4 5 6 ...

  8. optionMenu-普通菜单使用

    首先结合如下的代码来看 package com.android.settings; import android.R.integer; import android.app.Fragment; imp ...

  9. h.264硬件解码

    // H264HWDecoder.m // H264EncoderDecoder // // Created by lujunjie on 2016/11/28. // Copyright © 201 ...

  10. Appium_Python_API

    1) find_element_by_android_uiautomator (‘new UiSelector().text(“XXXX”)’).click 正常匹配2) find_element_b ...