- 浏览: 1475798 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (523)
- JAVA (334)
- J2EE (18)
- JSP (21)
- JavaScript (14)
- it life (2)
- mobile develop (4)
- UBUNTU (14)
- Algorithm (14)
- DataBase (56)
- Browser/Server (1)
- linux (6)
- fedora (2)
- CSS (1)
- AjAX (3)
- HTML5 (1)
- EJB (1)
- osworkflow (2)
- Java face (5)
- spring (4)
- ICE (1)
- webService (2)
- MongoDB (1)
- JavaThread (4)
- JavaCollections (3)
- Hibernate (2)
- JavaMail (1)
- JavaBasic (1)
- Cache (1)
- https (4)
- DOM4J (1)
- JDOM (0)
- Mybatis (1)
- JUNIT (1)
- eclipse (1)
- easyMock (2)
最新评论
-
yadongliang:
...
自己认为的一些技术点 -
yadongliang:
每次看你头像都看的荷尔蒙分泌失调
WebService的两种方式SOAP和REST比较 (转) -
yadongliang:
hollo 写道一直有这种感觉,盲目的跟风,确实有一些人为了潮 ...
WebService的两种方式SOAP和REST比较 (转) -
welss:
博主,JNative怎么调用dll中的这种方法: int ...
JNative调用DLL -
Java_Antelope:
session.setAttribute和session.getAttribute(
我们用实例说明具体的用法。
先假设有这么一个表:
create table S_Depart (
DepartId INT not null,
DepartName NVARCHAR2(40) not null,
DepartOrder INT default 0,
constraint PK_S_DEPART primary key (DepartId)
);
在oracle中sequence就是所谓的序列号,每次取的时候它会自动增加,一般用在需要按序列号排序的地方。
1、Create Sequence
你首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限,
CREATE SEQUENCE emp_sequence
INCREMENT BY 1 -- 每次加几个
START WITH 1 -- 从1开始计数
NOMAXvalue -- 不设置最大值
NOCYCLE -- 一直累加,不循环
CACHE 10; --设置缓存cache个序列,如果系统down掉了或者其它情况将会导致序列不连续,也可以设置为---------NOCACHE
针对S_Depart创建的sequence如下:
create sequence S_S_DEPART
minvalue 1
maxvalue 999999999999999999999999999
start with 1
increment by 1
nocache;
一旦定义了emp_sequence,你就可以用CURRVAL,NEXTVAL
CURRVAL=返回 sequence的当前值
NEXTVAL=增加sequence的值,然后返回 sequence 值
比如:
emp_sequence.CURRVAL
emp_sequence.NEXTVAL
可以使用sequence的地方:
- 不包含子查询、snapshot、VIEW的 SELECT 语句
- INSERT语句的子查询中
- NSERT语句的valueS中
- UPDATE 的 SET中
可以看如下例子:
insert into S_Depart(departId,Departname,Departorder)values(S_S_Depart.Nextval,'12345',1);
SELECT empseq.currval FROM DUAL;
但是要注意的是:
- 第一次NEXTVAL返回的是初始值;随后的NEXTVAL会自动增加你定义的INCREMENT BY值,然后返回增加后的值。CURRVAL 总是返回当前SEQUENCE的值,但是在第一次NEXTVAL初始化之后才能使用CURRVAL,否则会出错。一次NEXTVAL会增加一次 SEQUENCE的值,所以如果你在同一个语句里面使用多个NEXTVAL,其值就是不一样的。明白?
- 如果指定CACHE值,ORACLE就可以预先在内存里面放置一些sequence,这样存取的快些。cache里面的取完后,oracle自动再取一组到cache。 使用cache或许会跳号, 比如数据库突然不正常down掉(shutdown abort),cache中的sequence就会丢失. 所以可以在create sequence的时候用nocache防止这种情况。
2、Alter Sequence
你或者是该sequence的owner,或者有ALTER ANY SEQUENCE 权限才能改动sequence. 可以alter除start至以外的所有sequence参数.如果想要改变start值,必须 drop sequence 再 re-create .
Alter sequence 的例子
ALTER SEQUENCE emp_sequence
INCREMENT BY 10
MAXvalue 10000
CYCLE -- 到10000后从头开始
NOCACHE ;
影响Sequence的初始化参数:
SEQUENCE_CACHE_ENTRIES =设置能同时被cache的sequence数目。
可以很简单的Drop Sequence
DROP SEQUENCE order_seq;
一个简单的例子:
create sequence SEQ_ID
minvalue 1
maxvalue 99999999
start with 1
increment by 1
nocache
order;
建解发器代码为:
create or replace trigger tri_test_id
before insert on S_Depart --S_Depart 是表名
for each row
declare
nextid number;
begin
IF :new.DepartId IS NULLor :new.DepartId=0 THEN --DepartId是列名
select SEQ_ID.nextval --SEQ_ID正是刚才创建的
into nextid
from sys.dual;
:new.DepartId:=nextid;
end if;
end tri_test_id;
OK,上面的代码就可以实现自动递增的功能了。
给一个具体的实例:
创建序列:CREATE SEQUENCE TB_DRAW_SEQ INCREMENT BY 1 START WITH 10 NOMAXvalue NOCYCLE CACHE 10;
如何应用:insert into tb_draw (order_id) values (TB_DRAW_SEQ.nextval);
当然触发器的具体定义方法可以有所不同,但是大的框架都是这个样子的。
先假设有这么一个表:
create table S_Depart (
DepartId INT not null,
DepartName NVARCHAR2(40) not null,
DepartOrder INT default 0,
constraint PK_S_DEPART primary key (DepartId)
);
在oracle中sequence就是所谓的序列号,每次取的时候它会自动增加,一般用在需要按序列号排序的地方。
1、Create Sequence
你首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限,
CREATE SEQUENCE emp_sequence
INCREMENT BY 1 -- 每次加几个
START WITH 1 -- 从1开始计数
NOMAXvalue -- 不设置最大值
NOCYCLE -- 一直累加,不循环
CACHE 10; --设置缓存cache个序列,如果系统down掉了或者其它情况将会导致序列不连续,也可以设置为---------NOCACHE
针对S_Depart创建的sequence如下:
create sequence S_S_DEPART
minvalue 1
maxvalue 999999999999999999999999999
start with 1
increment by 1
nocache;
一旦定义了emp_sequence,你就可以用CURRVAL,NEXTVAL
CURRVAL=返回 sequence的当前值
NEXTVAL=增加sequence的值,然后返回 sequence 值
比如:
emp_sequence.CURRVAL
emp_sequence.NEXTVAL
可以使用sequence的地方:
- 不包含子查询、snapshot、VIEW的 SELECT 语句
- INSERT语句的子查询中
- NSERT语句的valueS中
- UPDATE 的 SET中
可以看如下例子:
insert into S_Depart(departId,Departname,Departorder)values(S_S_Depart.Nextval,'12345',1);
SELECT empseq.currval FROM DUAL;
但是要注意的是:
- 第一次NEXTVAL返回的是初始值;随后的NEXTVAL会自动增加你定义的INCREMENT BY值,然后返回增加后的值。CURRVAL 总是返回当前SEQUENCE的值,但是在第一次NEXTVAL初始化之后才能使用CURRVAL,否则会出错。一次NEXTVAL会增加一次 SEQUENCE的值,所以如果你在同一个语句里面使用多个NEXTVAL,其值就是不一样的。明白?
- 如果指定CACHE值,ORACLE就可以预先在内存里面放置一些sequence,这样存取的快些。cache里面的取完后,oracle自动再取一组到cache。 使用cache或许会跳号, 比如数据库突然不正常down掉(shutdown abort),cache中的sequence就会丢失. 所以可以在create sequence的时候用nocache防止这种情况。
2、Alter Sequence
你或者是该sequence的owner,或者有ALTER ANY SEQUENCE 权限才能改动sequence. 可以alter除start至以外的所有sequence参数.如果想要改变start值,必须 drop sequence 再 re-create .
Alter sequence 的例子
ALTER SEQUENCE emp_sequence
INCREMENT BY 10
MAXvalue 10000
CYCLE -- 到10000后从头开始
NOCACHE ;
影响Sequence的初始化参数:
SEQUENCE_CACHE_ENTRIES =设置能同时被cache的sequence数目。
可以很简单的Drop Sequence
DROP SEQUENCE order_seq;
一个简单的例子:
create sequence SEQ_ID
minvalue 1
maxvalue 99999999
start with 1
increment by 1
nocache
order;
建解发器代码为:
create or replace trigger tri_test_id
before insert on S_Depart --S_Depart 是表名
for each row
declare
nextid number;
begin
IF :new.DepartId IS NULLor :new.DepartId=0 THEN --DepartId是列名
select SEQ_ID.nextval --SEQ_ID正是刚才创建的
into nextid
from sys.dual;
:new.DepartId:=nextid;
end if;
end tri_test_id;
OK,上面的代码就可以实现自动递增的功能了。
给一个具体的实例:
创建序列:CREATE SEQUENCE TB_DRAW_SEQ INCREMENT BY 1 START WITH 10 NOMAXvalue NOCYCLE CACHE 10;
如何应用:insert into tb_draw (order_id) values (TB_DRAW_SEQ.nextval);
当然触发器的具体定义方法可以有所不同,但是大的框架都是这个样子的。
发表评论
-
sql 统计类语句
2014-03-17 16:59 11171、统计每月的成交量,按照逆序排序(2013年以来的每月销量, ... -
Jdbc 操作Oracle CLOB字段
2013-01-08 22:10 4444//这个适用于oracle10,11,以前oracle9操作C ... -
SQL重复记录处理(查找,过滤,删除)
2012-12-30 23:43 4791HZT表结构 ID int Title nvarchar( ... -
sql 如何过滤重复记录
2012-12-29 21:37 2407请各位大侠帮忙了 问题1:对于以下几个记录 ID 123456 ... -
Mysql 触发器和存储过程
2012-09-17 12:34 9651、首先建表: create table tababin( i ... -
Sql ACID
2012-09-12 17:57 849http://nathanchen.github.com/Re ... -
Oracle 表分区学习
2012-09-12 17:52 794http://love-flying-snow.iteye.c ... -
Oracle表分区
2012-09-12 17:19 1334废话少说,直接讲分区语法。 Oracle表分区分为四种:范围分 ... -
MYSQL中 ENUM 类型的详细解释
2012-03-12 23:30 2378ENUM 类型 ENUM 是一个字 ... -
Mysql 字段数据类型/长度及表类型详细说明
2012-03-12 23:20 14962一、MySQL 字段数据类型/长度 1、数值类型 列类型 ... -
MySQL中的datetime与timestamp比较
2012-03-04 19:30 1182相同 显示 TIMESTAMP列的显示格式与DATETI ... -
mysql 存储过程例子
2011-08-21 01:35 3953mysql 存储过程例子(当前我使用的是mysql 5.5) ... -
Oracle Cursor介绍
2011-08-21 00:54 999一 概念 游标是SQL的一个内存工作区,由系统或用户以变量的 ... -
oracle 游标
2011-08-20 14:09 10361、隐式游标 实例1、用sql%found 相当于sql.fo ... -
关于DB2存储过程的几个小实例
2011-08-20 03:21 2889================ CREATE PROCED ... -
oracle 游标遍历%rowtype中的记录
2011-08-20 01:49 7446那么我们使用Oracle游标 游标分为:静态游标和引用游标( ... -
oracle concat
2011-08-19 23:26 1164oracle 连接字符串: 连接两个字符串 sel ... -
oracle 存储过程
2011-08-19 21:55 961oracle的for循环,commit放在不同的位置,一个是每 ... -
sql 删除重复的记录
2011-08-19 16:32 930通过建立临时表删除: SQL>create ta ... -
Oracle 经典
2011-08-17 17:05 11991.删除重复项, 只保留第一条 delete table t ...
相关推荐
oracle自动增长列。 自动序列化, SEQUENCE。
教你如何使用oracle中的sequence,实现主键自动增长
NULL 博文链接:https://duqiangcise.iteye.com/blog/749438
Oracle创建自增字段方法-ORACLE SEQUENCE的简单介绍 很有用哦
oracle设置主键自动增长 首先,你要有一张表! 然后,你需要一个自定义的sequence 以上代码完成了一个序列(sequence)的建立过程,名称为emp_sequence,范围是从1开始到无限大(无限大的程度是由你机器决定的),nocycle...
Oracle必须通过创建sequence序列来实现自动增加列的功能。 首先要建立序列(当然必须要先建好表,添加好主键约束,这列假设约束名为test_sequence) create sequence test_sequence [increment by 1]–增长的步长 ...
在Oracle数据库移植过程中,sequence可能失效,本资源可使失效的sequence重新恢复作用
Oracle自增长主键自动生成类 public static int nextID String table { if table null return 1; table table toLowerCase ; String strKey table; if sequences containsKey strKey { ...
oracle中sequence介绍及应用
答:在Oracle中虽然没有自增列的说法,但却可以通过触发器(trigger)和序列(sequence)来模式实现。 示例: 1、建立表 代码如下:create table user ( id number(6) not null, name varchar2(30) not ...
,这样在反复操作时会加快运行速度,但如果遭遇意外情况如当机了或oracle死了,则下次取出的seq值将和上次的不连贯.(如果连不连贯无所谓建议用cache,因为时间就是金钱呀 胡萝卜须 23:20:42 有啊 緣,仯芣妸訁 23:20:57 ...
STM32 L151芯片包
oracle 实现自增;使用sequence,和trigger实现表字段自增
mysql等其他数据库中有随着记录的插入而表ID自动增长的功能,而oracle却没有这样的功能,我们有以下两种方式可以解决字段自增长的功能。 因为两种方式都需要通过创建序列来实现,这里先给出序列的创建方式。 ...
当向表中插入数据时,主键值自动加一. 实现方法1: 建立一个最小为1,最大为nomaxvalue的一个序列号会自动循环的序列 create sequence 序列名 increment by 1 start with 1 nomaxvalue nocycle; .......
给大家分享MyBatis Oracle 自增序列的实现方法及mybatis配置oracle的主键自增长的方法,非常不错具有一定的参考借鉴价值,感兴趣的朋友一起看看吧
程序猿都知道mysql等其他的数据库都有随着记录的插入而表ID会自动增长的功能,反而oracle却没有这一功能,下面通过两种方式来解决字段增长的功能,具体内容情况下文。 因为两种方式都需要通过创建序列来实现,这里先...
Oracle一般使用序列(Sequence)来处理主键字段,而MySQL则提供了自增长(increment)来实现类似的目的; 但在实际使用过程中发现,MySQL的自增长有诸多的弊端:不能控制步长、开始索引、是否循环等;若需要迁移数据库,...
一、为表创建自增长自段有两种,一种是不同的表使用各自的Sequence,方法如下: 1、在Oracle sequence首先创建sequence create sequence seq_idminvalue 1start with 1increment by 1cache 20; 2、在你的hbm....