`
hemin108
  • 浏览: 92799 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

oracle create table 学习

阅读更多
首先,你要有一张表!
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 sql, primry key not null

    Oracle Create Type 详解

    CREATE [OR REPLACE] TYPE typename AS { OBJECT | TABLE | VARRAY } (attribute1, attribute2, ...); ``` 其中,typename 是自定义类型的名称,attribute1, attribute2, ... 是该类型的属性。 例如,下面是一个...

    Oracle_create_tablespace语法详解.docx

    Oracle Create Tablespace 语法详解 本文将对 Oracle Create Tablespace 语法进行详细的解释和分析,从 undo 表空间到表空间的创建,DATAFILE 的设置,MININUM EXTENT,BLOCKSIZE,logging clause,FORCE LOGGING,...

    create-table-in-oracle.rar_Table

    how to create oracle create table command

    CreateTable.rar_Table

    Create tableCreate table for oracle api very usef

    Oracle创建表时Storage参数具体含义

    本文通过图表和实例的阐述在Oracle数据库创建新表时Storage的参数具体含义。

    createtable.rar_oracle

    此文档包含了oracle数据库使用的大部分方法、实例,pl/sql编程。

    Oracle数据库学习指南

    29.如何使‘CREATE TABLE AS SELECT’能支持ORDER BY 30.删除表内重复记录的方法 31.数据库安全性策略 32.数据库的查询优化技术. 33.提高C-S系统性能的一些方法 34.提高ORACLE数据库系统import性能 35....

    oracle_create

    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;

    Oracle学习资源与使用

    角色可以包含多种权限,例如CREATE TABLE、SELECT ANY TABLE等。角色可以授予用户,也可以从用户撤销。 SQL 数据操作和查询 SQL(Structured Query Language)是Oracle的查询语言,用于管理和操作数据库。下面是...

    oracle9i优化器介绍

    oracle9i优化器

    long_creat.zip--Oracle数据库LONG类型字段的完整C代码操作(CREATE TABLE)

    Oracle数据库LONG类型字段的完整C代码操作(CREATE INSERT SELECT DROP)之一--CREATE TABLE;免费下载有猫彬为你准备的代码包(已编译好,可直接运行,内含编译运行命令,直接复制粘贴即可

    ORACLE数据库学习总结资料.pdf

    在 Oracle 数据库中,可以使用 CREATE、ALTER、DROP 等语句来实现表和视图的管理。 Oracle 数据库学习总结资料.pdf 是一份全面、系统的学习资料,涵盖了 Oracle 数据库的各个方面,对于 Oracle 数据库的学习和使用...

    Oracle 10g 学习笔记

    │ createTable.sql │ ├─07 视图 │ view.sql │ ├─08 序列同义词 │ sequence.sql │ ├─09 用户管理 │ user.jpg │ user.sql │ ├─10 嵌套表 可变数组 │ createType.sql │ ├─11 PLSQLl语法 │ ...

    oracle外部表Externaltable[借鉴].pdf

    "Oracle 外部表(External table)" Oracle 外部表(External table)是一种特殊的表类型,它允许 Oracle 数据库将一个普通的文本格式的操作系统文件看作是一个数据库表,可以象普通表一样进行 select 操作,可以建...

    oracle数据库学习笔记总结

    二、常用SQL: 1.建表前检查语句: MySQL的: drop table if exists 表名; SQL Server的: IF EXISTS (SELECT name FROM sysobjects WHERE name = '... Oracle的: create or replace table 表名 ...; -- 直接写建表语句

    oracle分区表学习与应用

    oracle 分区表学习及应用示例Create table(创建分区表)  create table BILL_MONTHFEE_ZERO  (  SERV_ID NUMBER(20) not null,  BILLING_CYCLE_MONTH NUMBER(6) not null,  DATE_TYPE NUMBER(1),  ACC_NBR ...

    oracle客户端连接服务器常见问题

    有实践过的,解决方法都是真的,oracle客户端连接服务器常见问题

    Oracle数据库表定时备份表 表名动态拼接时间戳存储过程

    7、经典备份语句:CREATE TABLE TB_B AS SELECT * FROM TB_A; 本存储过程解决备份表名称时动态添加时间戳,例如表名称 TB_B20240106; 8、资源内容有: 8.1、P_TIMER_BAK_TABLE定时备份表 表名动态拼接时间戳.sql ...

    oracle扫盲-第一讲-创建和管理表PPT课件.ppt

    本资源主要讲述Oracle数据库管理系统的基本知识,包括创建和管理表的方法、数据类型、CREATE TABLE语句、数据字典等。 知识点1:数据类型 Oracle数据库中有多种数据类型,包括VARCHAR2、CHAR、NUMBER、DATE、LONG...

Global site tag (gtag.js) - Google Analytics