1.一个表需要有一个自增列ID
2.我已建立了table和sequence
-- Create sequence
create sequence S_sbfl
minvalue 1
maxvalue 999999999999999999999999999
start with 1
increment by 1
cache 20;
问题:我怎么能够让table中的ID与S_sbfl相对应呢?
2.我已建立了table和sequence
-- Create sequence
create sequence S_sbfl
minvalue 1
maxvalue 999999999999999999999999999
start with 1
increment by 1
cache 20;
问题:我怎么能够让table中的ID与S_sbfl相对应呢?
insert into sbfl(sbfl_id) values(S_sbfl.nextval)提示
ORA-000942:表或视图不存在
你创建表和序列的用户和你登录plsql的用户是同一个吗?
实在不行 把你的建表语句贴出来
没道理不行的
貌似需要insert into sbfl select S_sbfl.nextval from dual
"sbfl_id" NVARCHAR2(2) not null,
"sbfl_name" NVARCHAR2(200),
constraint PK_YS_CLHC_SBFL primary key ("sbfl_id")
);-- Create sequence
create sequence S_SBFL
minvalue 1
maxvalue 999999999999999999999999999
start with 1
increment by 1
cache 20;这是我建立的表和队列
"sbfl_id" NVARCHAR2(2) not null,
"sbfl_name" NVARCHAR2(200),
constraint PK_YS_CLHC_SBFL primary key ("sbfl_id")
);
大哥,ORACLE中,建表和字段的时候,不要加双引号,,
这样会造成歧义的,
create table sbfl(
sbfl_id varchar2(2),
sfbl_name varchar2(200),
constraint pk_ys_clhc_sbfl primary key(sbfl_id))
/
create sequence s_sbfl
start with 1
increment by 1
minvalue 1
maxvalue 99--999999999999999999999999999
--这里最大值只设为两位数字就可以了
--因为你的id只是只能存放2个字符
cache 20
nocycle
/
--方法一:使用触发器
create or replace trigger tri_sbfl_id
for each row
begin
select s_sbfl.nextval into :new.sbfl_id from dual;
end tri_sbfl_id;
/
insert into sbfl(sbfl_name)
values('aaaaaaaaaaaaa');
insert into sbfl(sbfl_name)
values('bbbbbbbbbbbbb');
/
--方法二:或者不使用触发器,直接在inert语句中引用:
insert into sbfl(sfbl_id,sbfl_name)
values (s_sbfl.nextval,'ccccccccccccccccc');
--记住,首次只能引用序列的伪列:nextval
insert语句中sequence的使用方法
create or replace trigger tri_sbfl_id
before insert on sbfl--不要忘记了触发事件
for each row
begin
select s_sbfl.nextval into :new.sbfl_id from dual;
end tri_sbfl_id;
/