重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
Oracle中不向其它数据库一样,有自动增长型数据类型,但可以变通处理
创新互联服务项目包括凌云网站建设、凌云网站制作、凌云网页制作以及凌云网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,凌云网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到凌云省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
数据表信息为 Test(TID,TNAME),需要把TID设置为自动增值型字段,TID一般是int型
首先 新建一个序列AUTOID,以后其它表或触发器也可调用:
起始为1 增值为1 顺序增值
CREATE SEQUENCE AUTOID
INCREMENT BY 1
START WITH 1
NOMAXVALUE
NOCYCLE
CACHE 10;
然后建立触发器代码如下:
Test表 TID字段 AUTOID序列 不要更改DUAL临时表名
CREATE TRIGGER TRG_AutoID BEFORE
INSERT ON TEST
FOR EACH ROW begin
SELECT AUTOID.NEXTVAL
INTO :NEW.TID
FROM DUAL;
End TRG_AutoID;
最后SQL测试 insert into Test(tname) values('abc');
当然也可以采用 insert into Test(TID,tname) values(AUTOID.nextval,'libin');
在选择Select时,注意有两对:
AUTOID.currval 表示当前行的ID值
AUTOID.nextval 表示当前行的ID+1值
例:SELECT empseq.currval FROM DUAL;
oracle
中不能设置自动增加,这个和其他数据库不一样,但是有
序列,这个是Oracle自己特有的东西,
首先创建序列:
create
sequence
seq;
这就创建好了,然后
seq.nextval
就会返回一个值,不会重复的值,
insert
into
tablename
values(seq.nextval,'001','javabook');
insert
into
tablename
values(seq.nextval,'001','javabook');
insert
into
tablename
values(seq.nextval,'001','javabook');
看明白没?这样前3个id
分别是
1,2,3
可以通过设置序列(sequence)的形式实现:\x0d\x0a第一步:创建sequence,让 INCREMENT BY增长速度为1,START WITH(开始值为 1)。创建sequence语句如下:\x0d\x0aCREATE SEQUENCE SEQ_NO\x0d\x0a MINVALUE 1 --最小值\x0d\x0a NOMAXvalue -----没有最大值\x0d\x0a INCREMENT BY 1 ----每次递增1\x0d\x0a START WITH 1 -----开始值为1\x0d\x0a NOCACHE ----------不缓存\x0d\x0a NOCYCLE ; ---------不循环\x0d\x0a第二步:每次插入的时候直接\x0d\x0a”insert into tablename(ID) values(SEQ_NO.nextVal)“即可。
以前用的mysql,是有自动递增这个属性的,现在用的orlace,需要建序列来实现递增,这里记录一下:
一、先建一张表(PROJECT_LOGS)
二、表建好了,我们来建一下序列,我用的是sqldeveloper界面来建:
其实到了这里就实现了递增,只是写sql时要传入id(SEQ_PROJECT_LOGS.Nextval);
三、创建触发器:
oracle sqlldr 导入 怎么让一个字段根据序列递增表结构
-- Create table
create table T_1299_DQ_HDM
(
F_ID NUMBER(11) not null,
F_CODE VARCHAR2(50) not null,
F_USERNUMBER NUMBER(11),
F_STATE VARCHAR2(1) default 0,
F_UPDATETIME VARCHAR2(17),
F_CHANNEL VARCHAR2(10),
F_WINNO NUMBER(11),
F_AREANUM VARCHAR2(20)
)
;
-- Create/Recreate primary, unique and foreign key constraintsalter table T_1299_DQ_HDM
add primary key (F_ID)
using index
tablespace USERS
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
我只需要导入f_id 和f_code ,f_id根据序列递增sqlldr 控制文件 :
Load DATA
CHARACTERSET ZHS16GBK
append INTO
TABLE t_1299_dq_hdm
fields terminated by "|" optionally enclosed by "."trailing nullcols
(
F_CODE ,
F_ID "SEQ_1299_HDM.nextval"
)
我建了一个序列 SEQ_1299_HDM
这样我试过了, f_id取不到值 记录插入不了。。
导入的文本文件 txt 格式如下
12323
12312
12321
就是这样的 一行一条数据也就是要导入的f_code------解决思路----------------------
参考
在sqlldr中如何使用序列(sequence)
------解决思路----------------------
sqlldr 导数据时,不用管他,在表上建一个 TR ,就比较方便了。具体的可以百度一下“ ORACLE 序列 自增”
oracle:
oracle没有自增长序列,因此可以用以下方法来实现
1.建立表格:
createtabletable1
(
cidnumber(8)notnull,
othersvarchar2(20)
);
2.建立从1开始的序列:
createsequenceemp_sequence
incrementby1--每次加几个
startwith1--从1开始计数
nomaxvalue--不设置最大值
nocycle--一直累加,不循环
nocache--不建缓冲区3.建立触发器:
createorreplacetriggermytgr
beforeinsertontable1foreachrow
begin
selectmytgr.nextvalinto:new.cidfromdual;
end;
mysql:
createtabletbname(a_idunsignedintprimarykeyauto_incrementnotnull,
a_titlevarchar(32),
a_contenttext);