Oracle中不向其它數(shù)據(jù)庫一樣,有自動增長型數(shù)據(jù)類型,但可以變通處理
創(chuàng)新互聯(lián)服務(wù)項目包括凌云網(wǎng)站建設(shè)、凌云網(wǎng)站制作、凌云網(wǎng)頁制作以及凌云網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,凌云網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到凌云省份的部分城市,未來相信會繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
數(shù)據(jù)表信息為 Test(TID,TNAME),需要把TID設(shè)置為自動增值型字段,TID一般是int型
首先 新建一個序列AUTOID,以后其它表或觸發(fā)器也可調(diào)用:
起始為1 增值為1 順序增值
CREATE SEQUENCE AUTOID
INCREMENT BY 1
START WITH 1
NOMAXVALUE
NOCYCLE
CACHE 10;
然后建立觸發(fā)器代碼如下:
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');
當(dāng)然也可以采用 insert into Test(TID,tname) values(AUTOID.nextval,'libin');
在選擇Select時,注意有兩對:
AUTOID.currval 表示當(dāng)前行的ID值
AUTOID.nextval 表示當(dāng)前行的ID+1值
例:SELECT empseq.currval FROM DUAL;
oracle
中不能設(shè)置自動增加,這個和其他數(shù)據(jù)庫不一樣,但是有
序列,這個是Oracle自己特有的東西,
首先創(chuàng)建序列:
create
sequence
seq;
這就創(chuàng)建好了,然后
seq.nextval
就會返回一個值,不會重復(fù)的值,
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
可以通過設(shè)置序列(sequence)的形式實現(xiàn):\x0d\x0a第一步:創(chuàng)建sequence,讓 INCREMENT BY增長速度為1,START WITH(開始值為 1)。創(chuàng)建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 ; ---------不循環(huán)\x0d\x0a第二步:每次插入的時候直接\x0d\x0a”insert into tablename(ID) values(SEQ_NO.nextVal)“即可。
以前用的mysql,是有自動遞增這個屬性的,現(xiàn)在用的orlace,需要建序列來實現(xiàn)遞增,這里記錄一下:
一、先建一張表(PROJECT_LOGS)
二、表建好了,我們來建一下序列,我用的是sqldeveloper界面來建:
其實到了這里就實現(xiàn)了遞增,只是寫sql時要傳入id(SEQ_PROJECT_LOGS.Nextval);
三、創(chuàng)建觸發(fā)器:
oracle sqlldr 導(dǎo)入 怎么讓一個字段根據(jù)序列遞增表結(jié)構(gòu)
-- 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
);
我只需要導(dǎo)入f_id 和f_code ,f_id根據(jù)序列遞增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取不到值 記錄插入不了。。
導(dǎo)入的文本文件 txt 格式如下
12323
12312
12321
就是這樣的 一行一條數(shù)據(jù)也就是要導(dǎo)入的f_code------解決思路----------------------
參考
在sqlldr中如何使用序列(sequence)
------解決思路----------------------
sqlldr 導(dǎo)數(shù)據(jù)時,不用管他,在表上建一個 TR ,就比較方便了。具體的可以百度一下“ ORACLE 序列 自增”
oracle:
oracle沒有自增長序列,因此可以用以下方法來實現(xiàn)
1.建立表格:
createtabletable1
(
cidnumber(8)notnull,
othersvarchar2(20)
);
2.建立從1開始的序列:
createsequenceemp_sequence
incrementby1--每次加幾個
startwith1--從1開始計數(shù)
nomaxvalue--不設(shè)置最大值
nocycle--一直累加,不循環(huán)
nocache--不建緩沖區(qū)3.建立觸發(fā)器:
createorreplacetriggermytgr
beforeinsertontable1foreachrow
begin
selectmytgr.nextvalinto:new.cidfromdual;
end;
mysql:
createtabletbname(a_idunsignedintprimarykeyauto_incrementnotnull,
a_titlevarchar(32),
a_contenttext);