十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
幾千行對(duì) oracle 來說不是問題,可以一次提交
創(chuàng)新互聯(lián)建站是一家專業(yè)提供桓仁企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站設(shè)計(jì)制作、做網(wǎng)站、HTML5建站、小程序制作等業(yè)務(wù)。10年已為桓仁眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站制作公司優(yōu)惠進(jìn)行中。
如果一定要這么做,有兩種方式:
一,用游標(biāo)打開,一行拼一個(gè)insert 語(yǔ)句,并計(jì)數(shù);滿100后提交
二,分頁(yè)查詢,每頁(yè)100行 ,然后提交
我覺得:能一次提交的盡量不要分開提交,如果提交到一部分時(shí)候,出現(xiàn)問題了,提交的不能回滾了。增加了業(yè)務(wù)邏輯的復(fù)雜性。
oracle的提交用commit,一般commit用語(yǔ)update語(yǔ)句及insert語(yǔ)句中。
如,有以下兩個(gè)語(yǔ)句:
update?test?set?id=3?where?id=2;
commit;
insert?into?test?values?(4,'王五');
commit;
如果進(jìn)行了update及insert操作后不進(jìn)行提交的話,那么修改或插入的數(shù)據(jù)只在當(dāng)前session有效,并不會(huì)寫入數(shù)據(jù)庫(kù),只有當(dāng)commit(提交)后,才會(huì)生效。
這個(gè)commit應(yīng)該是本機(jī)的,和dblink沒什么關(guān)系,而且就算你找到的dblink的那個(gè)session那么也不行,以為這個(gè)session在dblink的操作完成后已經(jīng)關(guān)閉了。
個(gè)人感覺不要這么遠(yuǎn)程insert,最好是調(diào)用一個(gè)那個(gè)數(shù)據(jù)庫(kù)上的過程去insert這樣的話,在那個(gè)過程中commit肯定是沒有問題的。
如果必須要這么寫,那么可以加入一條insert和一條delete
就是上面是正常insert的語(yǔ)句。
下面有一條delete(這條刪除一個(gè)絕對(duì)不可能出現(xiàn)的一條試試)
按照你的說法,第二個(gè)事務(wù)提交時(shí),第一個(gè)事務(wù)才能commit??墒沁@樣會(huì)出現(xiàn)問題,因?yàn)槿绻愦罅刻峤?,那么?shù)據(jù)庫(kù)會(huì)因此夯住的,所以你看看第一個(gè)辦法行不行,我覺得第一個(gè)辦法還靠譜點(diǎn)。
大數(shù)據(jù)量提交可能會(huì)造成系統(tǒng)癱瘓,所以不建議這樣做。
如果有需要,可以在導(dǎo)出insert語(yǔ)句的時(shí)候分批次commit(提交)。
方法如下:
1、登錄plsql,進(jìn)入導(dǎo)出表
2、選擇要導(dǎo)出的表,然后下圖位置根據(jù)需要寫上每次多少行提交,選擇導(dǎo)出路徑,點(diǎn)擊導(dǎo)出即可