在oracle中如何使字段值自动增加?
解决方案 »
- dbms_random.randomq茯取随机数问题??
- execute immediate update 缺失 SET 关键字 的问题
- 一个字段里,部分中文正常,部分中文乱码,如何能将乱码的记录选出来?
- 帮忙写个触发器,当一个表的一个字段内容发生变化时,自动更新另一个表的对应字段的内容。谢谢
- 存储过程里可以用游标返回多个记录集吗?
- 建表的时候忘记设置主键约束了,我现在想给它添加上,应该怎么做呢?
- linux 下安装 oracle 问题
- RMAN9i写文件的错误,急,马上给分。
- 求高手编写一个查询语句
- oracle,decode函数输出为什么不正常
- P4系统上的ORACLE9I安装问题
- 新手提问:oracle的自动增加字段类型怎么表示,在线等待!
ORACLE一般的做法是同时使用序列和触发器来生成一个自增字段.
CREATE SEQUENCE SEQname
INCREMENT BY 1
START WITH 1
MAXVALUE 99999999
/
CREATE TRIGGER TRGname
BEFORE INSERT ON table_name
REFERENCING
NEW AS :NEW
FOR EACH ROW
Begin
SELECT SEQname.NEXTVAL
INTO :NEW.FIELDname
FROM DUAL;
End;(2)第二种方法:
CREATE OR REPLACE TRIGGER TR1
BEFORE INSERT ON temp_table
FOR EACH ROW
declare
com_num NUMBER;
BEGIN
SELECT MAX(ID) INTO COM_NUM FROM TEMP_TABLE;
:NEW.ID:=COM_NUM+1;
END TR1;
increment by 1
start with 1
maxvalue 999999999
cycle;
当向表中插入数据时,SQL语句写法如下:SQL> insert into 表名 values(序列名.nextval,列1值,列2值);
insert into test(id) values (test_sequence.nextval);
字段值会从1自动增加的。
你还可以创建一个before insert的trigger。
我昨天使用到111条记录
今天插入一条变成121了,不知道怎么回事
第一步:创建SEQUENCE
create sequence s_country_id increment by 1 start with 1 maxvalue 999999999;
第二步:创建一个基于该表的before insert 触发器,在触发器中使用该SEQUENCE
create or replace trigger bef_ins_t_country_define
before insert on t_country_define
referencing old as old new as new for each row
begin
new.country_id=s_country_id.nextval;
end;