不是。根據(jù)查詢oracle數(shù)據(jù)庫可得知:刪除列能自動(dòng)更正序號,因此刪除行是不能的。Oracle是世界領(lǐng)先的信息管理軟件開發(fā)商,因其復(fù)雜的關(guān)系數(shù)據(jù)庫產(chǎn)品而聞名。
專業(yè)領(lǐng)域包括網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、電子商務(wù)商城網(wǎng)站建設(shè)、微信營銷、系統(tǒng)平臺開發(fā), 與其他網(wǎng)站設(shè)計(jì)及系統(tǒng)開發(fā)公司不同,成都創(chuàng)新互聯(lián)公司的整合解決方案結(jié)合了幫做網(wǎng)絡(luò)品牌建設(shè)經(jīng)驗(yàn)和互聯(lián)網(wǎng)整合營銷的理念,并將策略和執(zhí)行緊密結(jié)合,為客戶提供全網(wǎng)互聯(lián)網(wǎng)整合方案。
主鍵表 - T表 '100W'數(shù)據(jù)同步到T1表(同步:TRUNCATE/DELETE或IMPDP...等方式[手動(dòng)改數(shù)據(jù)])
例如: T表對應(yīng)SEQ_T.NEXTVAL= 100W;
T1表對應(yīng)SEQ_T.NEXTVAL= 10W;
TRUNCATE TABLE T1;
INSERT TABLE T1 SELECT * FROM T;
數(shù)據(jù)同步但T1表對應(yīng)SEQ_T.NEXTVAL= 10W序列不變;
此時(shí)T1調(diào)用序列INSERT到T1表時(shí)就會報(bào)錯(cuò) ( ORA-00001 : 違反唯一約束條件 (LOTTERY.PK_T1))
(若批量同步很多表就可能會引起很多表序列需要更新成主鍵最大值+ 1才能保證不報(bào)錯(cuò)
(可以用把源庫的SEQUENCE同步過來①或者如下存儲解決② ))
在oracle中,可以這樣做:
1、建立一個(gè)存儲過程proc_reset_seq負(fù)責(zé)將SEQUENCE重置,即drop再建立SEQUENCE;記得存儲過程不能帶任何參數(shù)。
2、再用有SYS.DBA_JOBS權(quán)限的用戶執(zhí)行:
declare v_jobname NUMBER;
sys.DBMS_JOB.SUBMIT(v_jobname,'proc_reset_seq;',TRUNC(SYSDATE + 1,'DD'),'TRUNC(SYSDATE+1,''DD'') ');
可以做到,對結(jié)果再一次分組唄,用分析函數(shù),你這個(gè)第一行其實(shí)沒有什么用,就是記錄相同的第二列值是數(shù)以第幾個(gè),
select zaawdm ,
row_number() over(partition by zaawdm order by zaawdm ASC) XH
from table_name
這樣就可以了,你的表列的名字起得太不規(guī)范了,看著都難受。
你的意思有兩個(gè),第一讓表滋生的用序列號顯示。這個(gè)就直接的改表名就行
第二 就是給他的屬性列,加一個(gè)序列的這么一列。就選中這個(gè)表,按右鍵,選擇設(shè)計(jì)表,直接的添加就行
Oracle保存時(shí)可以使用序列和觸發(fā)器完成自動(dòng)產(chǎn)生編號。
1:創(chuàng)建序列
create sequence orderSeq;
2:創(chuàng)建觸發(fā)器
CREATEORREPLACETRIGGER order_TRG
BEFOREINSERTORUPDATEOF PD_ID
ON Order
FOREACHROW
BEGIN
IF INSERTING THEN
if :NEW.TypeID then
//計(jì)算編號 使用 oderSeq.NEXTVAL
else
//計(jì)算編號 使用 oderSeq.NEXTVAL
endif;
SELECT 計(jì)算編號 INTO :NEW.orderID FROM DUAL;
ELSE
RAISE_APPLICATION_ERROR(-20020, '不允許更新orderID值!');
ENDIF;