1.Oracle上没有自增字段,可以使用索引和触发器来达到此目的
sql>create table articletype(id number primary key,name varchar2(30));
sql>create sequence seq_aritcle_id increment by 1 start with 1 maxvalue 999999999;
sql>create trigger trg_articletype_id
before insert
on articletype
for each row
begin
select seq_articletype_id.nextval into :new.id
from dual;
end;
/
注:
dual是一个虚拟表,用来构成select的语法规则,oracle保证dual里面永远只有一条记录。我们可以用它来做很多事情,如下:
1、查看当前用户,可以在 SQL Plus中执行下面语句
select user from dual;
2、用来调用系统函数
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;--获得当前系统时间
select SYS_CONTEXT('USERENV','TERMINAL') from dual;--获得主机名
select SYS_CONTEXT('USERENV','language') from dual;--获得当前locale
select dbms_random.random from dual;--获得一个随机数
3、得到序列的下一个值或当前值,用下面语句
select your_sequence.nextval from dual;--获得序列your_sequence的下一个值
select your_sequence.currval from dual;--获得序列your_sequence的当前值
4、可以用做计算器
select 7*9 from dual;
方法2,create or replace trigger trdemo
before insert on t_name
for each row
ln number;
begin
select max(id) into ln from t_name;
:new.id:=ln+1;
end;