在pl/sql developer里的主键自动生成方式为什么不可以设置成自增长。
4个回答
展开全部
oracle不能实现字段数值的自增长。可以通过序列和触发器来实现一行数据在insert前实现某字段的自增。
首先随便建立一个表,menuId是需要自增的字段
create table menu( menuId number(10) not null primary key,
name varchar2(40) not null,
id_parent number(10) not null,
url varchar2(300) null);
然后建立一个序列,最小值是minvalue,从1开始,步进为1递增,无循环,无缓存。
关于create sequence的详细用法。
create sequence menu_autoinc_seq
minvalue 1
start with 1
increment by 1
nocycle
nocache;
然后建立一个触发器,在插入tun_menu表之前触发,选取序列的nextval作为新值。
关于create trigger的详细用法。
create or replace trigger menu_autoinc_tg
before insert on menu for each row
begin
select menu_autoinc_seq.nextval into :new.id from dual;
end menu_autoinc_tg;
然后测试一下: insert into menu values('','个人事务',0,'indi.php');
insert into menu values('','公共事务',0,'public.php');
insert into menu values('','信息维护',0,'maintain.php');
insert into menu values('','后台管理',0,'manage.php');
首先随便建立一个表,menuId是需要自增的字段
create table menu( menuId number(10) not null primary key,
name varchar2(40) not null,
id_parent number(10) not null,
url varchar2(300) null);
然后建立一个序列,最小值是minvalue,从1开始,步进为1递增,无循环,无缓存。
关于create sequence的详细用法。
create sequence menu_autoinc_seq
minvalue 1
start with 1
increment by 1
nocycle
nocache;
然后建立一个触发器,在插入tun_menu表之前触发,选取序列的nextval作为新值。
关于create trigger的详细用法。
create or replace trigger menu_autoinc_tg
before insert on menu for each row
begin
select menu_autoinc_seq.nextval into :new.id from dual;
end menu_autoinc_tg;
然后测试一下: insert into menu values('','个人事务',0,'indi.php');
insert into menu values('','公共事务',0,'public.php');
insert into menu values('','信息维护',0,'maintain.php');
insert into menu values('','后台管理',0,'manage.php');
追问
你是不是也是用pl/sql developer的啊。我是想问一下,在pl/sql developer里新建表的时候除了放置属性之外,旁边有一个键选项,那里是设置主键了,还可以设置他的权限,然后并没有设置的他的自增长。只知道主键是不允许重复的。对于键的那一块是主键是怎么来着?序列和触发器真的可以实现自增吗?
追答
那个键就是主键,没有自增长功能。
oracle只有通过触发器才能实现自增长,这个跟用什么工具建表没有关系的。
展开全部
pl/sql 是针对 oracle 数据库使用的一个管理软件吧
oracle 数据库是没有自增长 这个设置的 但是可以用其他方法替换
加个序列号 , 在加个触发器 ,当你的表里面没增加一个数据 就向该数据的ID 加入一个序列号下的数
oracle 数据库是没有自增长 这个设置的 但是可以用其他方法替换
加个序列号 , 在加个触发器 ,当你的表里面没增加一个数据 就向该数据的ID 加入一个序列号下的数
更多追问追答
追问
pl/sql 是针对 oracle 数据库使用的一个管理软件吧 这问题是你问我,还是你本来就不知道的。
追答
我的意思是 pl/sql 是针对 oracle 数据库使用的一个管理软件
既然oracle 数据库是没有自增长 这个设置的
那么在pl/sql 里面设置当然也是不行的
但是还有其它解决方法:加个序列号 , 在加个触发器 ,当你的表里面没增加一个数据 就向该数据的ID 加入一个序列号下的数
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
oracle没有自增设置,可以使用sequence+触发器来实现
追问
sequence是什么东西啊。你在哪里上班啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你,对于oracle 和 pl/sql developer 还是一知半解。叫我怎么解答列,郁闷。
更多追问追答
追问
pl/sql developer 是oracle数据存储程序单元的一个ide.你也是用pl/sql developer的是吧。
追答
pl/sql developer 是 oracle数据库的一个方便的开发工具。曾经用过。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询