oracle建表

摘要:
在甲骨文中,序列是所谓的序列号。每次检索时它都会自动增加。它通常用于需要按序列号排序的地方。CURRVAL始终返回当前的SEQUENCE值,但CURRVAL只能在NEXTVAL首次初始化后使用,否则将发生错误-如果指定了CACHE值,ORACLE可以提前将一些序列放在内存中,以便访问更快。提取缓存后,oracle会自动将另一个组提取到缓存中。使用缓存时,数字可能会跳跃。例如,如果数据库突然异常关闭,缓存中的序列将丢失。因此,您可以在创建序列时使用nocache来防止这种情况。
在oracle中sequence就是所谓的序列号,每次取的时候它会自动增加,一般用在需要按序列号排序的地方。  
1Create Sequence  
你首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限,  
CREATE SEQUENCE emp_sequence  
     INCREMENT BY 1   -- 每次加几个  
     START WITH 1     -- 从1开始计数  
     NOMAXVALUE       -- 不设置最大值  
     NOCYCLE          -- 一直累加,不循环  
     CACHE 10;  

一旦定义了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 emp VALUES   
(empseq.nextval, 'LEWIS', 'CLERK',7902, SYSDATE, 1200, NULL, 20);  

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防止这种情况。  

2Alter 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
Oracle建表

create table BI_MLK_SEARCHKEYWORD(

    ID NUMBER(30) primary key,
    KEYWORD varchar2(30),
    TIMES NUMBER(30) not null,
    INPUTDATE DATE,
    PINYIN VARCHAR2(50),
    FIRSTPINYIN VARCHAR2(30),
    ENGLISH VARCHAR2(50)

);

Oracle建序列

drop sequence dectuser_tb_seq;
create sequence dectuser_tb_seq minvalue 1 maxvalue 99999999
               increment by 1
               start with 1;   /*步长为1*/
               
给表添加自增序列               
create or replace trigger dectuser_tb_tri
        before insert on BI_MLK_SEARCHKEYWORD     /*触发条件:当向表dectuser执行插入操作时触发此触发器*/
        for each row                       /*对每一行都检测是否触发*/
        begin                                  /*触发器开始*/
               select dectuser_tb_seq.nextval into :new.ID from dual;   /*触发器主题内容,即触发后执行的动作,在此是取得序列dectuser_tb_seq的下一个值插入到表dectuser中的userid字段中*/
        end;  
commit;

免责声明:文章转载自《oracle建表》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇SQLServer更新语句要注意浅谈C工程中的.c与.h文件下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

学习笔记:oracle学习一:oracle11g体系结构之服务器结构、数据字典

目录 1、服务器架构 1.1 系统全局区SGA 1.1.1 高速数据缓冲区(database buffer cache) 1.1.2 重做日志缓冲区(redo log buffer cache) 1.1.3 共享池(shared pool) 1.1.4 大型池(large pool) 1.1.5 Java池 1.1.6 流池 1.2 程序全局...

Oracle行列转换的几种实现方法

假如有如下表,其中各个i值对应的行数是不定的SQL> select * from t; I A D———- ———- ——————-1 b 2008-03-27 10:55:421 a 2008-03-27 10:55:461 d 2008-03-27 10:55:302 z 2008-03-27 10:55:552 t 2008-03-27 10:...

oracle的存储过程语法(转)

1、ORA-00942: table or view does not exist 指的你要操作的表尚未存在,需要先create出来先。 2、ORA-00922: missing or invalid option 指的是有语法错误。遗漏了分号什么的 3、Warning: Procedure created with compilation errors...

Oracle SQL优化

1、SQL语句尽量用大写的:  因为oracle总是先解析SQL语句,把小写的字母转换成大写的再执行。 2、使用表的别名:   当在SQL语句中连接多个表时, 尽量使用表的别名并把别名前缀于每个列上。这样一来,就可以减少解析的时间并减少那些由列歧义引起的语法错误。 3.表名的顺序选择要高效: ORACLE 的解析器按照从右到左的顺序处理FROM子句中的表名...

tnsping 命令解析

C:Users owhill>tnsping jljcz Oracle Net 工具(命令)tnsping,是一个OSI会话层的工具,它用来: 1)验证名字解析(name resolution,当然是oracle自己的网络服务名) 2)远程的listener是否启动 C:Users owhill>lsnrctl stop 关闭监听 C:Us...

重磅!JDK 17 发布,Oracle 宣布从 JDK 17 开始正式免费。。

上一版:JDK 16 正式发布,一次性发布 17 个新特性…不服不行! JDK 17 正式发布+免费 牛逼啊,JDK 16 刚发布半年(2021/03/16),JDK 17 又如期而至(2021/09/14),这个时间点牛逼啊,蹭苹果发布会的热度?记得当年 JDK 15 的发布也是同天,巧了。。 虽然 iPhone 13 发布了,但真的不是 13 香,真...