Oracle sequence的基本概念与理解

 

1.如何查看sequence的DDL语句


SQL>SELECT DBMS_METADATA.GET_DDL('SEQUENCE','SEQ_SMECUSTPERIODINFO','CLMS01') FROM DUAL;  --第一个是类型,第二个是sequence的名字,第三个是sequence的owner

CREATE SEQUENCE "CLMS01"."SEQ_SMECUSTPERIODINFO" MINVALUE 1 MAXVALUE 999999
9999 INCREMENT BY 1 START WITH 8798675575 CACHE 20 ORDER NOCYCLE  --START WITH 8798675575 此值为dba_sequneces中的LAST_NUMBER,比较奇怪!!

2.dba_sequences相关字的定义

ColumnDatatypeNULLDescription
SEQUENCE_OWNERVARCHAR2(30)NOT NULLOwner of the sequence
SEQUENCE_NAMEVARCHAR2(30)NOT NULLSequence name
MIN_VALUENUMBER Minimum value of the sequence
MAX_VALUENUMBER Maximum value of the sequence
INCREMENT_BYNUMBERNOT NULLValue by which sequence is incremented
CYCLE_FLAGVARCHAR2(1) Indicates whether the sequence wraps around on reaching the limit (Y) or not (N)
ORDER_FLAGVARCHAR2(1) Indicates whether sequence numbers are generated in order (Y) or not (N)
CACHE_SIZENUMBERNOT NULLNumber of sequence numbers to cache
LAST_NUMBERNUMBERNOT NULLLast sequence number written to disk. If a sequence uses caching, the number written to disk is the last number placed in the sequence cache. This number is likely to be greater than the last sequence number that was used.
  • CYCLE_FLAG:标志sequence是否循环使用(到最大值之后变为最小值)
  • ORDER_FLAG:标志sequence是否是按照顺序生成。
  • CACHE_SIZE:标志内存中缓存的sequence个数(保存在shared pool中),设置较小时会出现row cache lock的等待事件。
  • LAST_NUMBER:上一个写入到disk的sequence number。

 3.如何修改sequence

 

修改cache,连接到sequence的owner,执行以下语句,调整cache值,其他的修改类似。

SQL>alter sequence cache 1000;

 

  修改maxvalue值:


  SQL> alter sequence testeq maxvalue 9999999999;

  Sequence altered.

 

  修改order、noorder值:

  SQL> alter sequence testeq order/noorder;

  Sequence altered.

 

 

4.sequence的使用

情景一:直接调用

****************************
创建序列
****************************
create sequence testseq
increment by 1 
start with 900000 
maxvalue 999999999 
cycle
cache 200;

****************************
创建存储过程
****************************
create or replace procedure proc_arg
as
begin
    insert into test
      (object_id,object_name,owner)
    values
      (testseq.nextval,'dayu','dayu');
  commit;
end;

情景二:创建trigger,当值为空时插入sequence

create sequence testseq
increment by 1 
start with 900000 
maxvalue 999999999 
cycle
cache 200;


create or replace trigger test_trigger
before insert on test 
for each row           
declare               
    tempkey test.object_id%type; 
begin
    select testseq.NEXTVAL into tempkey from dual; 
    if :new.object_id is null then                  
         :new.object_id := tempkey+1; 
    end if;
end;

DECLARE
  i number := 0;
BEGIN
  for i in 90000 .. 200000 loop
    if mod(i,2)=0 then    
    insert into test
      (object_name, owner)
    values
      ('dayu','dayu');      
  commit;
  end if;
  end loop;
END;


DECLARE
  i number := 0;
BEGIN
  for i in 90000 .. 200000 loop
    if mod(i,2)=1 then    
    insert into test
      (object_name, owner)
    values
      ('dayu', 'dayu');      
  commit;
  end if;
  end loop;
END;

 

转载于:https://www.cnblogs.com/dayu-liu/p/8794727.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ORACLE数据库的系统参数都存储在数据库中,可以通过SQLPLUS,以用户SYSYTEM进行查询。几个重要的表或者视图如下: v$controlfile:控制文件的信息; v$datafile:数据文件的信息; v$log:日志文件的信息; v$process:处理器的信息; v$session:会话信息; v$transaction:事务信息; v$resource:资源信息; v$sga:系统全局区的信息。 上面的视图名中的‘v$’,只是视图名字中的字符。类似于上面的视图或表还有很多,位于: $ORACLE_HOME/RDBMS/ADMIN/CATALOG.SQL文件中。 这些视图或表可以在SQLPLUS中用SELECT语句进行查询。 2.数据字典视图 表和列 DBA_TABLES、ALL_TABLES和USER_TABLES显示了有关数据库表的一般信息。 DBA_TAB_COLUMNS、ALL_TAB_COLUMNS和USER_TAB_COLUMNS显示了每个数据库表的列的信息。 注意:DBA_OBJECTS、ALL_OBJECTS和USER_OBJECTS显示了模式对象的信息,包括表。 完整性约束 DBA_CONSTRAINTS、ALL_CONSTRAINTS和USER_CONSTRAINST显示有关约束的一般信息。 DBA_CONS_COLUMNS、ALL_CONS_COLUMNS和USER_CONS_COLUMNS显示有关列的相关约束的一般信息。 视图 DBA_VIEWS、ALL_VIEWS和USER_VIEWS。 注意:DBA_OBJECTS、ALL_OBJECTS和USER_OBJECTS显示了模式对象的信息,包括视图。 序列 DBA_SEQUENCES、ALL_SEQUENCES和USER_SEQUENCES。 注意:DBA_OBJECTS、ALL_OBJECTS和USER_OBJECTS显示了模式对象的信息,包括序列。 同义词 DBA_SYNONYMS、ALL_SYNONYMS和USER_SYNONYMS。 注意:DBA_OBJECTS、ALL_OBJECTS和USER_OBJECTS显示了模式对象的信息,包括同义词。 索引 DBA_INDEXS、ALL_INDEXS、USER_INDEXS、DBA_IND_COLUMNS、ALL_IND_COLUMNS和USER_IND_COLUMNS。 用户 DBA_USERS。 角色 DBA_ROLES。 表空间定额 DBA_TS_QUOTAS。 配置表 DBA_PROFILES。 表空间 DBA_TABLESPACES。 数据文件 DBA_DATA_FILES。 段 DBA_SEGMENTS、USER_SEGMENT。 回滚段 DBA_ROLLBACK_SEGS、V$ROLLNAME、V$ROLLSTAT。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值