oracle序列

序列:数据库对象之一。从指定整数开始,按照特定的步长增加,从而获取新的整数。

【1】创建序列
create sequence comployee_seq;

--查看序列对象信息
select * from user_objects where object_type='SEQUENCE' and object_name = 'COMPLOYEE_SEQ';
--结果
OBJECT_NAME         SUBOBJECT_NAME    OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE  CREATED     LAST_DDL_TIME TIMESTAMP           STATUS  TEMPORARY GENERATED SECONDARY  NAMESPACE EDITION_NAME
-------------- --------------- ----------- ------------------- ------- ------------ --------- ---------- ------------------------------
COMPLOYEE_SEQ                             72199                SEQUENCE     2017/9/7 22 2017/9/7 22:1 2017-09-07:22:10:37 VALID   N         N         N                  1 
--查看序列信息
select * from user_sequences where sequence_name='COMPLOYEE_SEQ';
--结果
SEQUENCE_NAME    MIN_VALUE  MAX_VALUE INCREMENT_BY CYCLE_FLAG ORDER_FLAG CACHE_SIZE LAST_NUMBER
-------------------------- ---------- ------------ ---------- ---------- ---------- -----------
COMPLOYEE_SEQ            1       1E27            1 N          N                  20           1
--创建序列后首次使用序列,会报错
select comployee_seq.currval from dual;
--创建序列后需要先使用nextval,然后再使用currval就可以使用了
select comployee_seq.nextval from dual;
--利用序列向t_employee表中插入数据,报错,因为序列的当前值和表中的id最大值不一致
insert into t_employee values(comployee_seq.nextval,'张三',6,'XXX');
--查看序列的当前值
select comployee_seq.currval from dual;
--解决方法:
--1.多次执行序列知道nextval达到表中id的最大值,不适合数据量太大的
--2.在创建序列的时候指定序列起始值
drop sequence comployee_seq;
【2】修改序列的属性

start with指定序列的初始值
minvalue:最小值
maxvalue:最大值
increment by:步长
cache:缓存,minvalue和maxvalue根据increment by一次循环所能获得的数。一次性读入缓存,nextval时再取出。
cycle:开启序列在minvalue和maxvalue之间循环取值

--重新创建序列并制定初始值
create sequence comployee_seq start with 13;
select comployee_seq.nextval from dual;
select comployee_seq.currval from dual;
--重新利用序列插入数据
insert into t_employee values(comployee_seq.nextval,'张三',6,'XXX');

注意:序列的minval不能大于当前值,报错下式

--修改序列的属性
alter sequence comployee_seq minvalue 12;
alter sequence comployee_seq maxvalue 200;
--最大值设为无限,即没有最大值
alter sequence comployee_seq nomaxvalue;
--修改序列的步长
create sequence test_seq;
select test_seq.nextval from dual;--默认步长为2
alter sequence test_seq increment by 5;
--查看test_seq的序列属性
select * from user_sequences where lower(sequence_name)='test_seq';

drop sequence test_seq;

create sequence test_seq
start with 21
minvalue 20
maxvalue 30
increment by 1;
select test_seq.nextval from dual;
--修改循环标志位Y
alter sequence test_seq cycle;
alter sequence test_seq cache 10;
--利用序列获得流水号
create table target(
       object_id number not null primary key,
       object_name varchar2(20),
       object_type varchar2(20),
       status varchar2(10)
);

create sequence tartget_seq;

insert into target(object_id,object_name,object_type,status)
select tartget_seq.nextval,object_name,object_type,status from user_objects;

select * from target;

select * from user_sequences where lower(sequence_name)='comployee_seq';

select * from t_employee;



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将 Oracle 序列迁移到 MySQL,需要考虑到两个数据库之间的差异。在 Oracle 中,序列是自动递增的整数生成器,而 MySQL 中没有直接的序列类型。以下是一个迁移序列的一般步骤: 1. 创建一个 MySQL 表来模拟序列:在 MySQL 中,您可以创建一个包含一个自增列的表来模拟序列。例如,创建一个名为 `sequence_table` 的表,其中包含一个名为 `sequence_value` 的自增列。 2. 导出 Oracle 序列当前:使用 Oracle SQL 查询来获取序列当前。例如,对于名为 `my_sequence` 的序列,您可以运行如下查询:`SELECT my_sequence.CURRVAL FROM dual;`。 3. 将导出的当前插入到模拟序列表中:将步骤 2 中导出的序列当前插入到 MySQL 的模拟序列表中。 例如,使用以下查询将序列当前插入到 `sequence_table` 表中: ```sql INSERT INTO sequence_table (sequence_value) VALUES (<当前>); ``` 4. 创建一个在 MySQL 中自增的列:在需要使用序列的 MySQL 表中,创建一个自增列,以模拟 Oracle 序列的行为。例如,创建一个名为 `id` 的自增列。 5. 更新表的自增列的起始:使用 `ALTER TABLE` 语句来更新自增列的起始,以与步骤 2 中导出的当前匹配。 例如,使用以下查询将 `id` 列的起始更新为模拟序列表中的当前: ```sql ALTER TABLE your_table AUTO_INCREMENT = <当前>; ``` 现在,您可以使用 MySQL 表中的自增列来模拟 Oracle 序列的行为。请注意,这只是一种模拟方法,可能无法完全复制 Oracle 序列的所有行为。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值