首先,你要有一张表!
CREATE TABLE example(
ID Number(4) NOT NULL PRIMARY KEY,
NAME VARCHAR(25),
PHONE VARCHAR(10),
ADDRESS VARCHAR(50));
如果对于以上的建表语句还有疑问的话,建议您不要继续了!有那么些时间您还不如去看看金庸读读琼瑶!
然后,你需要一个自定义的sequence
CREATE SEQUENCE emp_sequence
INCREMENT BY 1 -- 每次加几个
START WITH 1 -- 从1开始计数
NOMAXVALUE -- 不设置最大值
NOCYCLE -- 一直累加,不循环
NOCACHE -- 不建缓冲区
以上代码完成了一个序列(sequence)的建立过程,名称为emp_sequence,范围是从1开始到无限大(无限大的程度是由你机器决定的),nocycle 是决定不循环,如果你设置了最大值那么你可以用cycle 会使seq到最大之后循环.对于nocache顺便说一下如果你给出了cache值那么系统将自动读取你的cache值大小个seq
,这样在反复操作时会加快运行速度,但如果遭遇意外情况如当机了或
oracle死了,则下次取出的seq值将和上次的不连贯.(如果连不连贯无所谓建议用cache,因为时间就是金钱呀!跑题了!)
书接上文,你只有了表和序列还不够,还需要一个触发器来执行它!代码如下:
CREATE TRIGGER "触发器名称" BEFORE
INSERT ON example FOR EACH ROW WHEN (new.id is null)
begin
select emp_sequence.nextval into: new.id from dual;
end;
打完收工!下面你就试试插入数据吧!
INSERT INTO example(Name,phone,address) Values('Cao','56498543','Heibei');
=============================================================
ORACLE SEQUENCE的简单介绍(自增长字段)- -
from:http://ub1010.51.net/BBS/user_file/2002-04-10/1018438701.htm
在oracle中sequence就是所谓的序列号,每次取的时候它会自动增加,一般用在需要按序列号排序的地方。
1、CreateSequence
你首先要有CREATESEQUENCE或者CREATEANYSEQUENCE权限,
CREATESEQUENCEemp_sequence
INCREMENTBY1--每次加几个
STARTWITH1--从1开始计数
NOMAXVALUE--不设置最大值
NOCYCLE--一直累加,不循环
CACHE10;
一旦定义了emp_sequence,你就可以用CURRVAL,NEXTVAL
CURRVAL=返回sequence的当前值
NEXTVAL=增加sequence的值,然后返回sequence值
比如:
emp_sequence.CURRVAL
emp_sequence.NEXTVAL
可以使用sequence的地方:
-不包含子查询、snapshot、VIEW的SELECT语句
-INSERT语句的子查询中
-NSERT语句的VALUES中
-UPDATE的SET中
可以看如下例子:
INSERTINTOempVALUES
(empseq.nextval,'LEWIS','CLERK',7902,SYSDATE,1200,NULL,20);
SELECTempseq.currvalFROMDUAL;
但是要注意的是:
-第一次NEXTVAL返回的是初始值;随后的NEXTVAL会自动增加你定义的INCREMENTBY值,然后返回增加后的值。CURRVAL总是返回当前SEQUENCE的值,但是在第一次NEXTVAL初始化之后才能使用CURRVAL,否则会出错。一次NEXTVAL会增加一次SEQUENCE的值,所以如果你在同一个语句里面使用多个NEXTVAL,其值就是不一样的。明白?
-如果指定CACHE值,ORACLE就可以预先在内存里面放置一些sequence,这样存取的快些。cache里面的取完后,oracle自动再取一组到cache。使用cache或许会跳号,比如数据库突然不正常down掉(shutdownabort),cache中的sequence就会丢失.所以可以在createsequence的时候用nocache防止这种情况。
2、AlterSequence
你或者是该sequence的owner,或者有ALTERANYSEQUENCE权限才能改动sequence.可以alter除start至以外的所有sequence参数.如果想要改变start值,必须dropsequence再re-create.
Altersequence的例子
ALTERSEQUENCEemp_sequence
INCREMENTBY10
MAXVALUE10000
CYCLE--到10000后从头开始
NOCACHE;
影响Sequence的初始化参数:
SEQUENCE_CACHE_ENTRIES=设置能同时被cache的sequence数目。
可以很简单的DropSequence
DROPSEQUENCEorder_seq;
好吧,就到这里。
-------------------------------------------------------------
自增长及触发器:
如何在Oracle中实现类似自动增加ID的功能?
整理编辑:ChinaASP
我们经常在设计数据库的时候用一个系统自动分配的ID来作为我们的主键,但是在ORACLE中没有这样的
功能,我们可以通过采取以下的功能实现自动增加ID的功能
1.首先创建sequence
createsequenceseqmaxincrementby1
2.使用方法
selectseqmax.nextvalIDfromdual
就得到了一个ID
如果把这个语句放在触发器中,就可以实现和mssql的自动增加ID相同的功能!
-------------------------------------------------------------------------
###建表###
CREATETABLE"SPORTS"."LINEUP"("ID"NUMBERNOTNULL,"TYPE"
NUMBER(3)NOTNULL,"BODY"VARCHAR2(100)NOTNULL,"HITS"NUMBER(
10)DEFAULT0NOTNULL,PRIMARYKEY("ID"))
TABLESPACE"TS_SPORTS"
###建序列###
CREATESEQUENCE"SPORTS"."SPORTS_LINEUP_ID_SEQ"INCREMENTBY1
STARTWITH1MAXVALUE1.0E28MINVALUE1NOCYCLE
CACHE50NOORDER
###建自动更新的触发器###
CREATEORREPLACETRIGGER"SPORTS"."SPORTS_LINEUP_ID_TRIGGER"
BEFOREINSERT
ON"SPORTS"."LINEUP"
FOREACHROW
DECLARE
next_idNUMBER;
BEGIN
--Getthenextidnumberfromthesequence
SELECTsports_lineup_id_seq.NEXTVAL
INTOnext_id
FROMdual;
--Usethesequencenumberastheprimarykey
--fortherecordbeinginserted.
:new.id:=next_id;
END;
###建保护PRIMARYKEY的触发器###
CREATEORREPLACETRIGGER"SPORTS"."LINEUP_ID_UPDATE_TRIGGER"
BEFOREUPDATEOF"ID"ON"SPORTS"."LINEUP"
FOREACHROW
BEGIN
RAISE_APPLICATION_ERROR(-20000,
'sports_lineup_id_update_trigger:UpdatesoftheIDfield'
||'arenotallowed.');
END;
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1508964
分享到:
相关推荐
### Oracle 创建表 (CREATE TABLE) 在Oracle数据库中,`CREATE TABLE`语句用于创建新表。表是数据库中存储数据的主要结构,由一系列行和列组成。创建表时,需要指定表名以及该表中的列名、数据类型和约束条件等。 ...
CREATE [OR REPLACE] TYPE typename AS { OBJECT | TABLE | VARRAY } (attribute1, attribute2, ...); ``` 其中,typename 是自定义类型的名称,attribute1, attribute2, ... 是该类型的属性。 例如,下面是一个...
这个"createtable.rar_oracle"压缩包文件显然包含了与Oracle数据库中的创建表操作相关的资源,特别是通过PL/SQL编程语言实现的实例。下面我们将深入探讨这个主题。 首先,`CREATE TABLE`命令是用于在Oracle数据库中...
通过“Oracle Nested Table Demo”,我们可以学习如何创建、插入和查询嵌套表,以及理解其在实际应用中的优势。这个示例是理解和实践Oracle高级数据类型的一个好起点,对于希望深入了解Oracle数据库特性的开发者来说...
"CreateTable.rar_Table"的资源显然与Oracle API中创建表的编程实践有关,特别是通过Java来实现这一过程。"CreateTable.java"是这个压缩包中的主要文件,很可能包含了具体的代码示例。 在Oracle数据库中,创建表...
根据提供的文件信息,以下是从标题、描述以及部分代码示例中提炼出的关于Oracle数据库中与表(Table)操作相关的常用命令及其详细解释: ### 1. 创建表(Create Table) **命令格式**: ``` sql> create table table_...
CREATE TABLE test(a number) STORAGE(INITIAL 100K NEXT 100K MINEXTENTS 2 MAXEXTENTS 100 PCTINCREASE 100); ``` 这个示例中,我们创建了一个名为 test 的表,并设置了 Storage 参数。初始分配的 Extent 大小...
`CREATE TABLE`命令用于定义新表的结构,包括列名、数据类型、约束条件等。在这个主题中,我们将深入探讨如何在Oracle中创建表,以及涉及的相关知识点。 1. **基本语法**: 创建Oracle表的基本语法如下: ```sql ...
3. **Java类型映射**:Oracle JDBC驱动提供了`OracleTypes.ARRAY`和`OracleTypes.TABLE`来映射Oracle的ARRAY和TABLE类型。你需要创建一个`OracleCallableStatement`实例,并使用`setArray()`或`setObject()`方法设置...
例如,`CREATE TABLE` 创建表,`ALTER TABLE` 修改表结构,`DROP TABLE` 删除表。 2. 数据操作语言(DML):用于插入、更新和删除数据。如`INSERT INTO` 插入记录,`UPDATE` 更新记录,`DELETE FROM` 删除记录。 3...
- **同时创建**:可以在创建表时直接定义约束,例如`CREATE TABLE table_name (column_name data_type PRIMARY KEY)`。 - **事后添加**:如果忘记在创建表时添加约束,可以通过`ALTER TABLE`语句后来添加,如`...
29.如何使‘CREATE TABLE AS SELECT’能支持ORDER BY 30.删除表内重复记录的方法 31.数据库安全性策略 32.数据库的查询优化技术. 33.提高C-S系统性能的一些方法 34.提高ORACLE数据库系统import性能 35....
### Oracle数据库学习知识点详解 #### 一、基本使用 ##### 1.1 常用命令 **1.1.1 Connect/Disconnect数据库连接命令** - **用途:** 连接或断开与Oracle数据库的连接。 - **语法示例:** - `sqlplus username/...
### CREATE TABLESPACE 命令详解 在数据库管理中,`CREATE TABLESPACE` 命令是用于创建新的表空间的基础指令。表空间是数据库逻辑存储结构中的一个基本单位,用于存储数据文件、索引等数据库对象。通过合理地规划和...
在给定的"create_table.zip_Table"压缩包中,我们可以看到一个核心文件"create_table.sh",这通常是一个Shell脚本,用于自动化执行特定任务。在这个场景下,这个脚本的目的是帮助用户动态创建数据库表。下面我们将...
sql>grant create session,alter session,create view,create anytable to wwrole; sql>grant connect,resource to wwrole; sql>grant dba to wwrole; 5、把角色赋予用户 sql>grant wwrole to wwuser;
例如,`CREATE TABLE`用来创建新表,定义列的数据类型和约束;`ALTER TABLE`用于修改已有表的结构;`DROP TABLE`则用于删除表。 2. DML,数据操作语言,用于处理数据库中的数据。`INSERT`用于插入新的数据行;`...
角色可以包含多种权限,例如CREATE TABLE、SELECT ANY TABLE等。角色可以授予用户,也可以从用户撤销。 SQL 数据操作和查询 SQL(Structured Query Language)是Oracle的查询语言,用于管理和操作数据库。下面是...
根据提供的信息,我们可以总结出以下Oracle数据库学习的关键知识点: ### Oracle 学习笔记概览 在Oracle学习过程中,掌握基础的命令与权限管理是至关重要的。以下内容将围绕Oracle数据库的基础操作、用户管理以及...