create or replace function ff return number is n number; begin select max(notice_id)+1 into n from a; if n is null then n:= 0; end if; return n; end; /insert into a values (ff);
建一个triger 吧 每次插入时都把 notice_id 设为 0 在插入前触发,从sequence中取nextval 放在notice_id 中create sequence seq_id increment by 1 start with 1 maxvalue 99999999; create triger tri_test BEFORE insert ON table_name FOR EACH ROW declare id number(9); begin select seq_id.nextval into id from dual; new.notice_id := id; end;
先建一个sequence : create sequence seq_id increment by 1 start with 1 maxvalue 99999999; 再试试: insert into CO_NOTICE(notice_id,topic,……) values(seq_id.nextval,topic_value,……); 你试试就明白的!也许我的语句称不上自动,但明白sequence_name.nextval,一切都好办。
to guostong: 我按照你的做法进行,但进行插入操作时出现错误提示: ORA-04098:触发器无效且未通过重新验证
应该是: create sequence seq_id increment by 1 start with 1 maxvalue 99999999; create or replace trigger tri_test BEFORE insert ON table_name FOR EACH ROW declare id number(9); begin select seq_id.nextval into id from dual; :new.notice_id := id; end; 不过我觉得如果记录数超过99999999会不会有问题?因为是主键呀!
使用序列 实现方法: 建立一个最小为1,最大为999999999的一个序列号会自动循环的序列create sequence 序列名 increment by 1 start with 1 maxvalue 999999999 cycle;当向表中插入数据时,SQL语句写法如下:SQL> insert into 表名 values(序列名.nextval,列1值,列2值);
这个我做过,我告诉你把,不过要给我加分才行 建立个sequence 在sql*plus中这样写 create sequence sequence_name increment by 1 start with 1 maxvalue 99999999 cycle; 当插入记录时此字段应为sequence_name.nextval就行了
create sequence emp_seq increment by 1 start with 1;
假如我有一个表CO_NOTICE,其中有字段notice_id和topic,当向该表进行插入时,notice_id能自动加1,并且该字段可用于以后的查询。
n number;
begin
select max(notice_id)+1 into n from a;
if n is null then
n:= 0;
end if;
return n;
end;
/insert into a values (ff);
每次插入时都把 notice_id 设为 0
在插入前触发,从sequence中取nextval 放在notice_id 中create sequence seq_id increment by 1 start with 1 maxvalue 99999999;
create triger tri_test BEFORE insert
ON table_name FOR EACH ROW
declare
id number(9);
begin
select seq_id.nextval into id from dual;
new.notice_id := id;
end;
create sequence seq_id increment by 1 start with 1 maxvalue 99999999;
再试试:
insert into CO_NOTICE(notice_id,topic,……)
values(seq_id.nextval,topic_value,……);
你试试就明白的!也许我的语句称不上自动,但明白sequence_name.nextval,一切都好办。
我按照你的做法进行,但进行插入操作时出现错误提示:
ORA-04098:触发器无效且未通过重新验证
create sequence seq_id increment by 1 start with 1 maxvalue 99999999;
create or replace trigger tri_test BEFORE insert
ON table_name FOR EACH ROW
declare
id number(9);
begin
select seq_id.nextval into id from dual;
:new.notice_id := id;
end;
不过我觉得如果记录数超过99999999会不会有问题?因为是主键呀!
实现方法:
建立一个最小为1,最大为999999999的一个序列号会自动循环的序列create sequence 序列名
increment by 1
start with 1
maxvalue 999999999
cycle;当向表中插入数据时,SQL语句写法如下:SQL> insert into 表名 values(序列名.nextval,列1值,列2值);
建立个sequence
在sql*plus中这样写
create sequence sequence_name
increment by 1
start with 1
maxvalue 99999999
cycle;
当插入记录时此字段应为sequence_name.nextval就行了