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

vcshcn 2004-04-13 02:50:50
我想在oracle里建表,其中的一个字段是主键,不允许空,并为从0开始自动编号,这个sql怎么写?
...全文
305 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
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
设该列为主键

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧