已经有数据的表这么加如一列(自动增加的ID号) 已经有数据的表这么加如一列(自动增加的ID号) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 alter table table_name add ilu number;先增加一列,然后插入数据时,插入之。 ALTER TABLE 表名 ADD 字段名 数据类型 ; 我的意思是里面的id值怎么添加进去如id name relname 111 aaa 222 bbb 553 bgs要怎么把现在空的ID值插入 oracle没有自增的属性,必须得使用sequence。创建一个步长为1的sequence。1、Create 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语句的子查询中 - INSERT语句的VALUES中 - UPDATE 的 SET中 可以看如下例子: INSERT INTO emp VALUES (empseq.nextval, 'LEWIS', 'CLERK',7902, SYSDATE, 1200, NULL, 20); SELECT empseq.currval FROM DUAL; update test set id= rownum whre然后按照7楼的建序列,start with改成表中最大的那个数。 oracle没有ORACLE自增字段这样的功能,但是通过触发器(trigger)和序列(sequence)可以实现。create table t_client (id number(4) primary key,pid number(4) not null,name varchar2(30) not null,client_id varchar2(10),client_level char(3),bank_acct_no varchar2(30),contact_tel varchar2(30),address varchar2(30),zip_code varchar2(10),is_leaf char(1) default 'y' check (is_leaf in('y','n')),is_client char(1) default 'n' check (is_client in('y','n'))); 假设关键字段为id,建一个序列,代码为:create sequence seq_t_client_idminvalue 1maxvalue 99999999start with 1increment by 1nocacheorder;建解发器代码为:CREATE OR REPLACE TRIGGER trg_t_client_idBEFORE INSERT ON t_clientFOR EACH ROWBEGINSELECT seq_t_client_id.nextval INTO :new.id FROM dual;END;/ 更新的时候,可以这么来控制每次更新的行数: update test set id=rownum where rownum<=10000 and id is not null;commit;继续下一次。否则几十万可能会回滚空间不足。 1.创建sequence2.用存储过程循环作update,id的值就是emp_sequence.NEXTVAL.3.如果数据量大,循环update的效率低的话,可以直接create table new_table tablespace ts_name asselect emp_sequence.NEXTVAL as id, col1...col10from old_table;然后drop old_table, rename new_name to old_table_name.补上PK,index之类的限制... update test set id=rownum connect by rownum <=10000 ;commit; update test set id=rownum where rownum <=10000 and id is null; 谢谢各位我用update test set id=rownum 解决了。 1.alter table增加一个id列2.建序列3.更新已有数据的id: update table1 set id=seqname.nextval;4.以后插入数据时,手动使用序列seqname.nextval或建触发器自动添加 往DBMS_OBFUSCATION_TOOLKIT.DESENCRYPT里传参数的问题 solaris下如何实现自动建立数据库 求助!能把一个字段内容分解的函数? oracle trigger for each row 是遍历哪些 行呢 希望高手能帮忙优化一下该条SQL语句! 如何用批处理执行*.sql文件将数据导入到oracle数据库中? 歸類問題: JOB每天执行一次的问题 怎样提高数据库的访问速度 安装oracle8i问题 面试题!求解 【咨询】数据同步的方案有几种?
如
id name relname
111 aaa
222 bbb
553 bgs
要怎么把现在空的ID值插入
你首先要有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语句的子查询中
- INSERT语句的VALUES中
- UPDATE 的 SET中 可以看如下例子:
INSERT INTO emp VALUES
(empseq.nextval, 'LEWIS', 'CLERK',7902, SYSDATE, 1200, NULL, 20); SELECT empseq.currval FROM DUAL;
然后按照7楼的建序列,start with改成表中最大的那个数。
create table t_client (id number(4) primary key,
pid number(4) not null,
name varchar2(30) not null,
client_id varchar2(10),
client_level char(3),
bank_acct_no varchar2(30),
contact_tel varchar2(30),
address varchar2(30),
zip_code varchar2(10),
is_leaf char(1) default 'y' check (is_leaf in('y','n')),
is_client char(1) default 'n' check (is_client in('y','n')
)); 假设关键字段为id,建一个序列,代码为:
create sequence seq_t_client_id
minvalue 1
maxvalue 99999999
start with 1
increment by 1
nocache
order;
建解发器代码为:
CREATE OR REPLACE TRIGGER trg_t_client_id
BEFORE INSERT ON t_client
FOR EACH ROW
BEGIN
SELECT seq_t_client_id.nextval INTO :new.id FROM dual;
END;
/
update test set id=rownum where rownum<=10000 and id is not null;
commit;
继续下一次。
否则几十万可能会回滚空间不足。
2.用存储过程循环作update,id的值就是emp_sequence.NEXTVAL.
3.如果数据量大,循环update的效率低的话,可以直接
create table new_table tablespace ts_name as
select emp_sequence.NEXTVAL as id, col1...col10
from old_table;
然后drop old_table, rename new_name to old_table_name.
补上PK,index之类的限制...
我用update test set id=rownum 解决了。
2.建序列
3.更新已有数据的id: update table1 set id=seqname.nextval;
4.以后插入数据时,手动使用序列seqname.nextval或建触发器自动添加