oracle 修改字段长度中怎样将字段建成象SQL2000中的ID自动+1的字段

oracle数据库表字段的更名、属性更改及id自动增长
oracle建表:
create table INDEX_POLICY_TBL
ID NUMBER(10) NOT NULL PRIMARY KEY,
POLICY_ID VARCHAR2(64) NOT NULL,
ALARM_COUNT NUMBER(10) NOT NULL
执行即可。
增加字段:
&&&&&&ALTER
TABLE TABLE_NAME ADD(COLUMN_NAME COLUMN_TYPE[,COLUMN_NAME
COLUMN_TYPE]);
ADD后面括号里面的是字段名+空格成对出现,可以有多对
修改字段名称:
ALTER TABLE TABLE_NAME RENAME COLUMN OLD_COLUMN_NAME TO
NEW_COLUMN_NAME
OLD_COLUMN_NAME 、NEW_COLUMN_NAME指旧的字段名以及新的字段名
修改字段类型:
ALTER TABLE TABLE_NAME MODIFY COLUMN_NAME COLUMN_TYPE
ORACLE 中ID字段自动增长写法:
   create table INDEX_POLICY_TBL
ID NUMBER(10) NOT NULL PRIMARY KEY,
POLICY_ID VARCHAR2(64) NOT NULL,
  && ALARM_COUNT NUMBER(10) NOT
先建这样一个表。
再建一个Sequence
CREATE SEQUENCE INDEX_POLICY_TBL_SEQ
      INCREMENT BY 1
    && START WITH 1
      NOMAXVALUE
      NOCACHE
      NOCYCLE;
注释:INDEX_POLICY_TBL_SEQ只是一个名字
      INCREMENT BY 意思是每次增加1
      START
意思是从1开始
      NOMAXVALUE&&意思是没有上限
      NOCACHE&&&&&&
意思是没有缓存,如果CACHE = 20,则每次在缓存中会有20个ID存储着,提高效率,但是不安全
      NOCYCLE
再建一个触发器trigger把SEQUENCE和INDEX_POLICY_TBL的ID联系起来
  &&& CREATE
OR REPLACE TRIGGER INDEX_POLICY_TBL_ID_AUTO
      BEFORE INSERT ON INDEX_POLICY_TBL FOR EACH ROW
      BEGIN
        SELECT TO_CHAR(INDEX_POLICY_TBL_SEQ.NEXTVAL) INTO
:NEW.ID FROM DUAL;
      END INDEX_POLICY_TBL_ID_AUTO
  &注释:INDEX_POLICY_TBL_ID_AUTO是触发器trigger的名字,可以随便取,但是最好取与ID所在表相关的名字,这个名字有长度限制的,不能太长,不然执行时ORACLE会报错
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。SQL AUTO INCREMENT 字段
SQL AUTO INCREMENT 字段
Auto-increment 会在新记录插入表中时生成一个唯一的数字。
AUTO INCREMENT 字段
我们通常希望在每次插入新记录时,自动地创建主键字段的值。
我们可以在表中创建一个 auto-increment 字段。
用于 MySQL 的语法
下列 SQL 语句把 &Persons& 表中的 &P_Id& 列定义为 auto-increment 主键:
CREATE TABLE Persons
P_Id int NOT NULL AUTO_INCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (P_Id)
MySQL 使用 AUTO_INCREMENT 关键字来执行 auto-increment 任务。
默认地,AUTO_INCREMENT 的开始值是 1,每条新记录递增 1。
要让 AUTO_INCREMENT 序列以其他的值起始,请使用下列 SQL 语法:
ALTER TABLE Persons AUTO_INCREMENT=100
要在 &Persons& 表中插入新记录,我们不必为 &P_Id& 列规定值(会自动添加一个唯一的值):
INSERT INTO Persons (FirstName,LastName)
VALUES ('Bill','Gates')
上面的 SQL 语句会在 &Persons& 表中插入一条新记录。&P_Id& 会被赋予一个唯一的值。&FirstName& 会被设置为 &Bill&,&LastName& 列会被设置为 &Gates&。
用于 SQL Server 的语法
下列 SQL 语句把 &Persons& 表中的 &P_Id& 列定义为 auto-increment 主键:
CREATE TABLE Persons
P_Id int PRIMARY KEY IDENTITY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
MS SQL 使用 IDENTITY 关键字来执行 auto-increment 任务。
默认地,IDENTITY 的开始值是 1,每条新记录递增 1。
要规定 &P_Id& 列以 20 起始且递增 10,请把 identity 改为 IDENTITY(20,10)
要在 &Persons& 表中插入新记录,我们不必为 &P_Id& 列规定值(会自动添加一个唯一的值):
INSERT INTO Persons (FirstName,LastName)
VALUES ('Bill','Gates')
上面的 SQL 语句会在 &Persons& 表中插入一条新记录。&P_Id& 会被赋予一个唯一的值。&FirstName& 会被设置为 &Bill&,&LastName& 列会被设置为 &Gates&。
用于 Access 的语法
下列 SQL 语句把 &Persons& 表中的 &P_Id& 列定义为 auto-increment 主键:
CREATE TABLE Persons
P_Id int PRIMARY KEY AUTOINCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
MS Access 使用 AUTOINCREMENT 关键字来执行 auto-increment 任务。
默认地,AUTOINCREMENT 的开始值是 1,每条新记录递增 1。
要规定 &P_Id& 列以 20 起始且递增 10,请把 autoincrement 改为 AUTOINCREMENT(20,10)
要在 &Persons& 表中插入新记录,我们不必为 &P_Id& 列规定值(会自动添加一个唯一的值):
INSERT INTO Persons (FirstName,LastName)
VALUES ('Bill','Gates')
上面的 SQL 语句会在 &Persons& 表中插入一条新记录。&P_Id& 会被赋予一个唯一的值。&FirstName& 会被设置为 &Bill&,&LastName& 列会被设置为 &Gates&。
用于 Oracle 的语法
在 Oracle 中,代码稍微复杂一点。
您必须通过 sequence 对创建 auto-increment 字段(该对象生成数字序列)。
请使用下面的 CREATE SEQUENCE 语法:
CREATE SEQUENCE seq_person
MINVALUE 1
START WITH 1
INCREMENT BY 1
上面的代码创建名为 seq_person 的序列对象,它以 1 起始且以 1 递增。该对象缓存 10 个值以提高性能。CACHE 选项规定了为了提高访问速度要存储多少个序列值。
要在 &Persons& 表中插入新记录,我们必须使用 nextval 函数(该函数从 seq_person 序列中取回下一个值):
INSERT INTO Persons (P_Id,FirstName,LastName)
VALUES (seq_person.nextval,'Lars','Monsen')
上面的 SQL 语句会在 &Persons& 表中插入一条新记录。&P_Id& 的赋值是来自 seq_person 序列的下一个数字。&FirstName& 会被设置为 &Bill&,&LastName& 列会被设置为 &Gates&。Oracle中的有序自增字段--序列sequence
来源:本站原创&
序列是Oracle提供的用于产生一组等间隔整型数值的数据库对象,可以通过在插入语句中引用序列值来实现主键自增。
创建sequence:
Oracle用CREATE SEQUENCE命令创建序列,格式如下:
CREATE SEQUENCE seq_name
//seq_name是序列的名字。
[START WITH start]
//用来制定序列的起始值。
[INCREMENT BY increment]
//用来制定序列的增量,如果取负值则递减。
[MINVALUE minvalue | NOMINVALUE]
//指定序列是否有最小值。
[MAXVALUE maxvalue | NOMAXVALUE]
//指定序列是否有最大值。
[CYCLE | NOCYCLE]
//指定序列达到最大值或最小值后是否循环。
[CACHE cache | NOCACHE]
//指定是否在缓存中保存预分配的序列值,
保存可提高获取序列值的速度。
[ORDER | NOORDER]
//该选项可保证序列值的唯一性和顺序性,
NOORDER选项只保证序列的唯一性。
使用sequence:
使用序列时,需要用到两个伪列nextval和currval。其中nextval将返回序列的下一个值,而currval将返回序列的当前值。我们利用序列向MASTER表插入记录,实现主键自动标号的语句:
insert into MASTER values(master_seq.nextval,'1k1','1k1',1);
insert into MASTER values(master_seq.nextval,'2k2','2k2',2);
select master_seq.currval from MASTER;
select master_seq.nextval from MASTER;
修改和删除sequence:
通过alter sequence语句对序列进行修改,可以修改序列起始值以外的所有参数。如果要修改序列起始值,则必须先删除序列,再创建新的序列。
删除序列:
产生裂缝的情况:
2. 系统异常
3.多个表同时使用同一序列
查询用户的所有序列:
select SEQUENCE_OWNER,SEQUENCE_NAME from dba_sequences where sequence_owner='用户名';
注意事项:
必须以管理员身份登录;
sequence_owner必须为大写,不管你的用户名是否大写。只有大写才能识别。
序列是Oracle提供的用于产生一组等间隔整型数值的数据库对象,可以通过在插入语句中引用序列值来实现主键自增. 创建sequence: Oracle用CREATE SEQUENCE命令创建序列,格式如下: CREATE SEQUENCE seq_name //seq_name是序列的名字. [START WITH start] //用来制定序列的起始值. [INCREMENT BY increment] //用来制定序列的增量,如果取负值则递减. [MINVALUE minvalue | NOM
Oracle中按指定字符拆分字段 一.建表语句 -- Create table create table TEST1 ( id VARCHAR2(100) not null, name_age VARCHAR2(100) ); 二.建出来的表: 三.按'/'拆分字段,拆成如下图所示: 四.SQL语句 SELECT name_age,SUBSTR(name_age,1,INSTR(name_age,'/')-1), SUBSTR(name_age,INSTR(name_age,'/')+1,(IN
最近对一个七十多万条数据的表进行update操作,刚开始直接使用Update语句,如下: update content set pic_bak= 发现对于一两万条数据的表非常快,但是对于几十万条的表来说就非常慢了,不推荐.因此在网上查阅了一下,采用了declare方法,具体实现如下: declare 声明变量的关键字 v_ 定义number类型的变量v_num begin v_num :=; 给声明的变量赋值(:=),不支持声明时就赋值 while
这篇文章主要介绍了Oracle中使用触发器(trigger)和序列(sequence)模拟实现自增列实例,包含代码实例,而且小编已经测试过了哦,需要的朋友可以参考下 问题:在SQL Server数据库中,有自增列这个字段属性,使用起来也是很方便的.而在Oracle中却没有这个功能,该如何实现呢? 答:在Oracle中虽然没有自增列的说法,但却可以通过触发器(trigger)和序列(sequence)来模式实现. 示例: 1.建立表 create table user ( id number(6)
由于Oracle中没有类似SQL Server中的自增字段,所以我们如果想要通过设定类似ID性质的唯一列的话,需要借助Oracle的sequence,先建立一个序列,然后在每次插入数据的时候,通过前触发器来更新ID值,并将序列的序号加1,这样的迂回方式来实现. 相关代码如下: 1. 创建sequence: CREATE SEQUENCE SEQU_DATA_DATAINFO INCREMENT BY 1 START WITH 1 NOCYCLE NOCACHE NOORDER; 2. 创建触发器
在oracle中sequence就是所谓的序列号,每次取的时候它会自动增加,一般用在需要按序列号排序的地方接下来为大家介绍下Oracle创建自增字段方法感兴趣的各位可不要错过了哈 先假设有这么一个表: create table S_Depart ( DepartId INT not null, DepartName NVARCHAR2(40) not null, DepartOrder INT default 0, constraint PK_S_DEPART primary key (Depa
一.创建表格 要自增的列数据类型是NUMBER,不能为LONG 二.创建序列(SEQUENCE) CREATE SEQUENCE s_id NOMAXVALUE NOCYCLE 三.创建触发器(TRIGGER) CREATE OR REPLACE TRIGGER BEFORE_INSERT_T_XXX BEFORE INSERT ON &T_XXX& FOR EACH ROW begin select s_id.nextval into :new.COL_ID e
环境:PLSQL Developer 7.1.5 Oracle 11.2.0 Oracle 中不像MYSQL和MSSQLServer中那样指定一个列为自动增长列的方式,不过在Oracle中可以通过SEQUENCE序列来实现自动增长字段.在Oracle中SEQUENCE被称为序列,每次取的时候它会自动增加,一般用在需要按序列号排序的地方. 在使用SEQUENCE前需要首先定义一个SEQUENCE,定义SEQUENCE的语法如下: CREATE SEQUENCE sequence_name INCR
本节主要介绍了在oracle数据库里创建自增ID字段的步骤,需要的朋友可以参考下 在oracle里使用自增ID字段的步骤比较繁琐,总结如下: -- 创建表 CREATE TABLE ADVICE ( ID INT NOT NULL, ACTIVE INT DEFAULT 1 NOT NULL, TYPE INT NOT NULL, MSG VARCHAR2(512) NOT NULL, ADVICE VARCHAR2(4000) NOT NULL, PRIMARY KEY(ID), CONSTR
前几天在把一个Communtiy Server 的数据库从SQL 2000升级到SQL 2005 的时候,碰到一个怪异的问题,报如下错误: Violation of PRIMARY KEY constraint 'PK_cs_Threads'. Cannot insert duplicate key in object 'dbo.cs_Threads'. 分析进去后,竟然发现这个表的自增字段数据库中已经达到了6144,而数据库维护的这个表的初始自增值只到6109. 解决方法很简单,利用以下SQL
本篇文章是对查看Oracle数据库中某张表的字段个数进行了详细的分析介绍,需要的朋友参考下 Oracle中查询某个表的总字段数,要用SQL语句,或者在PL/SQL里面 select count(column_name) from user_tab_columns where table_name='T_B_AUDITOR' 能够查出来指定的那张表的字段数. 下面是通过大致查看:select tname,count(*) fro 复制代码 代码如下: 64
先假设有这么一个表: create table S_Depart ( DepartId INT not null, DepartName NVARCHAR2( 40) not null, DepartOrder INT default 0, constraint PK_S_DEPART primary key (DepartId) ); 在oracle中sequence就是所谓的序列号,每次取的时候它会自动增加,一般用在需要按序列号排序的地方. 1.Create Sequence 你首先要有CR
这个题目的确不大好写,其实际含义基于一个场景: 比如在oracle的某张表中,有两个字段 A1 B1 1 A,B,C,D, 2 E,F 假如现在的需求,是要统计A1中,每条记录拥有多少个数目的B1,比如 A1=1的时候,其B1的字段中有4个以逗号分隔的,所以数目为4,A1=2的,有 E,F共2个,所有数目为2 而在ORACLE中,如果使用ORACLE本身的函数,其实也是可以做到这个 效果的,核心是把这些逗号分隔的字符,逐一拆出来,变成一行行,上面的例子来说, 就要想办法变成 A1 B1 1 A
在oracle中sequence就是所谓的序列号,每次取的时候它会自动增加,一般用在需要按序列号排序的地方. Create Sequence 你首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限, CREATE SEQUENCE emp_sequence INCREMENT BY 1 -- 每次加几个 START WITH 1 -- 从1开始计数 NOMAXVALUE -- 不设置最大值 NOCYCLE -- 一直累加,达到最大值后不循环 NOCACHE; 一般
在oracle中sequence就是序列,每次取的时候它会自动增加.Sequence与表没有关系. 1.Create Sequence 首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限. 创建语句如下: CREATE SEQUENCE seqTest INCREMENT BY 1 -- 每次加几个 START WITH 1 -- 从1开始计数 NOMAXvalue -- 不设置最大值 NOCYCLE -- 一直累加,不循环 CACHE 10; --设置缓存ca
这篇文章主要介绍了oracle中110个常用函数,方便大家编写出更强大的sql语句,需要的朋友可以参考下 1. ASCII 返回与指定的字符对应的十进制数; SQL& select ascii(A) A,ascii(a) a,ascii(0) zero,ascii( ) A A ZERO SPACE --------- --------- --------- --------- 65 97 48 32 2. CHR 给出整数,返回对应的字符; SQL& sel
本篇文章,小编将为大家介绍,在Oracle中 关于数据库存储过程和存储函数的使用,有需要的朋友可以参考一下 存储过程和存储函数指存储在数据库中供所有用户程序调用的子程序叫存储过程.存储函数. 存储过程没有返回值.存储函数有返回值 创建存储过程 用CREATE PROCEDURE命令建立存储过程和存储函数. 语法:create [or replace] PROCEDURE过程名(参数列表) AS PLSQL子程序体: 存储过程示例:为指定的职工在原工资的基础上长10%的工资 /* 为指定的职工在原
oracle中查询所有外键引用到某张表的记录 其实查找这篇文章 我主要用的sql 是这句 select * from user_cons_columns t where t.constraint_name like 'FK_CTS_CONT_REINS__CRR'; 起因: 系统测试的时候发现如果某条记录已经被引用了,这个时候删除这条记录会引起数据不一致,系统会报错.比如警员信息,在考勤记录表里会引用警员ID,如果考勤记录表中已经存在这个警员ID了,这时从警员表中删除该警员,就会引起数据不一致,
这篇文章主要介绍了oracle中decode函数的使用方法,需要的朋友可以参考下 含义解释: decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 该函数的含义如下: IF 条件=值1 THEN RETURN(翻译值1) ELSIF 条件=值2 THEN RETURN(翻译值2) ...... ELSIF 条件=值n THEN RETURN(翻译值n) ELSE RETURN(缺省值) END IF decode(字段或字段的运算,值1,值2,值3) 这个函数运行的
SQL Server和Oracle中对插入数据值包含空的处理有所差异,在SQL Server中,我们可以把表字段设计为非空,但我们仍然可以通过下面语句执行插入操作 INSERT INTO Table (TestCol) VALUES('') 其中的TestCol字段,其实在设计的时候,已经被设计为NOT NULL,但我们需要了解一点,在sql server中,null和空格是不同的,也就是说,上面的语句插入的是一个空,但并不是NULL,只有当我们的插入语句中没有该字段的时候,才会被认为违反非空的jsp中的获取sql2000 or Oracle 中的字段的日值解决思路 - ColdFusion当前位置:& &&&jsp中的获取sql2000 or Oracle 中的字段的日值解决jsp中的获取sql2000 or Oracle 中的字段的日值解决思路&&网友分享于:&&浏览:2次jsp中的获取sql2000 or Oracle 中的字段的日值int&&&&&&rs.getInt()
varchar&&rs.getString()
我需要所有的
&我先说&Thank&you&!------解决方案--------------------ResultSet所有方法
.cn/Java_Docs/html/zh_CN/api/java/sql/ResultSet.html------解决方案--------------------sql2000&&jsp
int&&&&&&rs.getInt()
varchar&&rs.getString()
datetime&..
money&&&..
因为我经常出错&改错都在那个地方?
不是我想要的结果
我需要的是
不过还是说声谢谢吧!
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有}

我要回帖

更多关于 oracle 修改字段长度 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信