主键,不为空,自动编号的字段的sql怎么写?

vcshcn 2004-04-13 02:50:50
我想在oracle里建表,其中的一个字段是主键,不允许空,并为从0开始自动编号,这个sql怎么写?
...全文
140 点赞 收藏 9
写回复
9 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
zfly99 2004-05-09
学习!!!
回复
dlmaomao 2004-04-15
可以共享。每次取出sequence的值seq_name.nextval 都是唯一的。
回复
yangshijun 2004-04-15
select 起始号码 + rownum - 1 from tcm_user where rownum <= -(起始号码-终止号码)+1
回复
lixueming 2004-04-15
5455
回复
yangguang1219 2004-04-15
这是一个简单的例子,不过已经能够表示如何实现这类功能了。

1、在scott用户下建立表dept(其实oracle缺省安装就已经生成了)
create table DEPT
(
DEPTNO NUMBER(2) not null,
DNAME VARCHAR2(14),
LOC VARCHAR2(13)
)

2、建立一个sequence
create sequence seq_dept
minvalue 1
start with 1
increment by 1
nocache;

3、为dept表建立一个insert trigger
create or replace trigger insert_dept
before insert on dept
for each row
declare
-- local variables here
begin
select seq_dept.nextval into :new.deptno from dual;
end insert_dept;

4、用insert语句测试

insert into dept(dname,loc) values('aaaaaa','bbbbb');

用select * from dept察看结果
回复
vcshcn 2004-04-14
那sequence是不是不可以许多表共享呀
回复
dlmaomao 2004-04-14
楼上说的对。sequence只创建一次,以后再插入数据时直接调用seq_name.nextval就可。
如:
SQL> select seq_name.nextval from dual;

NEXTVAL
---------
61

SQL> select seq_name.nextval from dual;

NEXTVAL
---------
62
回复
skystar99047 2004-04-13
方法:
1.创建sequence就可以
create sequence seq_name
minvalue 1
maxvalue 999999999999999999
start with 1
increment by 1
cache 20;
可以直接在插入时调用seq_name.nextval;
如insert into table_name(proid) values(seq_name.nextval);

2.也可以创建触发器(同时要创建sequence):
create or replace trigger trg_name
before insert on table_name
for each row
begin
select seq_name.nextval into :new.proid from dual;
end;
/
回复
ern 2004-04-13
加一个sequence
create sequence xxx;
然后对那个表增加一列,建立触发器插入xxx.nextval
设该列为主键
回复
发动态
发帖子
基础和管理
创建于2007-09-28

1.7w+

社区成员

Oracle 基础和管理
申请成为版主
社区公告
暂无公告