declare
創新互聯從2013年創立,是專業互聯網技術服務公司,擁有項目做網站、成都網站建設網站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元淮上做網站,已為上家服務,為淮上各地企業和個人服務,聯系電話:13518219792
n number:=0;
begin
for a in (select * from 表名1 ) loop
insert into 表名1 select 字段名 from 表名2 where col=a.col ;
n:=n+1;
if mod(n,5000)= 0 then
commit;
end if;
end loop;
comimt;
end;
/
2、如果是imp 導入的話,加commit=y 這個參數就可以。
一、 提高DML操作的辦法:\x0d\x0a簡單說來:\x0d\x0a1、暫停索引,更新后恢復.避免在更新的過程中涉及到索引的重建.\x0d\x0a2、批量更新,每更新一些記錄后及時進行提交動作.避免大量占用回滾段和或臨時表空間.\x0d\x0a3、創建一臨時的大的表空間用來應對這些更新動作.\x0d\x0a\x0d\x0a4、批量更新,每更新一些記錄后及時進行提交動作.避免大量占用回滾段和或臨時表空間.\x0d\x0a\x0d\x0a5、創建一臨時的大的表空間用來應對這些更新動作.\x0d\x0a\x0d\x0a6、加大排序緩沖區\x0d\x0a alter session set sort_area_size=100000000;\x0d\x0a insert into tableb select * from tablea;\x0d\x0a commit;\x0d\x0a\x0d\x0a如果UPDATE的是索引字段,就會涉及到索引的重建,暫停索引不會提高多少的速度,反而有可能降低UPDATE速度,\x0d\x0a因為在更新是索引可以提高數據的查詢速度,重建索引引起的速度降低影響不大。\x0d\x0a\x0d\x0aORACLE優化修改參數最多也只能把性能提高15%,大部分都是SQL語句的優化!\x0d\x0a\x0d\x0aupdate總體來說比insert要慢 :\x0d\x0a幾點建議: \x0d\x0a 1、如果更新的數據量接近整個表,就不應該使用index而應該采用全表掃描 \x0d\x0a 2、減少不必要的index,因為update表通常需要update index \x0d\x0a 3、如果你的服務器有多個cpu,采用parellel hint,可以大幅度的提高效率\x0d\x0a 另外,建表的參數非常重要,對于更新非常頻繁的表,建議加大PCTFREE的值,以保證數據塊中有足夠的空間用于UPDATE, 從而降低CHAINED_ROWS。 \x0d\x0a\x0d\x0a二、 各種批量DML操作:\x0d\x0a(1)、oracle批量拷貝:\x0d\x0aset arraysize 20\x0d\x0a set copycommit 5000\x0d\x0a copy from username/password@oraclename append table_name1\x0d\x0a using select * from table_name2;\x0d\x0a (2)、常規插入方式:\x0d\x0a insert into t1 select * from t;\x0d\x0a 為了提高速度可以使用下面方法,來減少插入過程中產生的日志:\x0d\x0a alter table t1 nologging;\x0d\x0ainsert into t1 select * from t;\x0d\x0acommit;\x0d\x0a (3)、CTAS方式:\x0d\x0a create table t1\x0d\x0aas\x0d\x0aselect * from t;\x0d\x0a為了提高速度可以使用下面方法,來減少插入過程中產生的日志,并且可以制定并行度:\x0d\x0acreate table t1 nologging parallel(degree 2) as select * from t;\x0d\x0a (4)、Direct-Path插入:\x0d\x0a insert /*+append*/ into t1 select * from t;\x0d\x0a commit;\x0d\x0a 為了提高速度可以使用下面方法,來減少插入過程中產生的日志:\x0d\x0a alter table t1 nologging;\x0d\x0a insert /*+append*/ into t1 select * from t;\x0d\x0a \x0d\x0a Direct-Path插入特點:\x0d\x0a1、 append只在insert ? select ?中起作用,像insert /*+ append */ into t values(?)這類的語句是不起作用的。在update、delete操作中,append也不起作用。\x0d\x0a2、 Direct-Path會使數據庫不記錄直接路徑導入的數據的重做日志,會對恢復帶來麻煩。\x0d\x0a3、 Direct-Path直接在表段的高水位線以上的空白數據塊中寫數據,不會重用高水位線以下的空間,會對空間的使用造成一定的浪費,對查詢的性能也會造成一定的影響。而常規插入會優先考慮使用高水位線之下有空閑空間存在的數據塊。因此理論上Direct-Path插入會比常規插入速度更快,因為Direct-Path直接使用新數據塊,而常規插入要遍歷freelist獲取可用空閑數據塊,如果同 nologging 配合,這種速度優勢會更加明顯。\x0d\x0a4、 以append方式插入記錄后,要執行commit,才能對表進行查詢。否則會出現錯誤:ORA-12838: 無法在并行模式下修改之后讀/修改對象。\x0d\x0a5、 用append導入數據后,如果沒有提交或者回滾,在其他會話中任何對該表的DML都會被阻塞(不會報錯),但對該表的查詢可以正常執行。\x0d\x0a6、 在歸檔模式下,要把表設置為nologging,然后以append方式批量添加記錄,才會顯著減少redo數量。在非歸檔模式下,不必設置表的 nologging屬性,即可減少redo數量。如果表上有索引,則append方式批量添加記錄,不會減少索引上產生的redo數量,索引上的redo 數量可能比表的redo數量還要大。\x0d\x0a7、 數據直接插入數據文件,繞過buffer cache并且忽略了引用完整性約束。\x0d\x0a8、 不管表是否在nologging 下,只要是 direct insert,就不會對數據內容生成undo。\x0d\x0a9、 Oracle在Direct-Path INSERT 操作末尾,對具有索引的表執行索引維護,這樣就避免了在drop掉索引后,再rebuild。\x0d\x0a10、 Direct-Path INSERT比常規的插入需要更多的空間。因為它將數據插入在高水位之上。并行插入非分區表需要更多的空間,因為它需要為每一個并行線程創建臨時段。\x0d\x0a11、 在插入期間,數據庫在表上獲得排他鎖,用戶不能在表上執行并行插入、更新或者刪除操作,并行的索引創建和build也不被允許。但卻可以并行查詢,但查詢返回的是插入之前的結果集。\x0d\x0a (5)、并行DML:\x0d\x0a 如果你的服務器有多個cpu,采用parellel hint,可以大幅度的提高效率\x0d\x0a ALTER SESSION ENABLE PARALLEL DML;\x0d\x0a\x0d\x0a INSERT /*+ PARALLEL(tableA, 2) */INTO tableA \x0d\x0a SELECT * FROM tableB;\x0d\x0a\x0d\x0a 為了提高速度可以使用下面方法,來減少插入過程中產生的日志:\x0d\x0a\x0d\x0a INSERT /*+ PARALLEL(tableA, 2) */INTO tableA NOLOGGING\x0d\x0a SELECT * FROM tableB;\x0d\x0a\x0d\x0aoracle默認并不會打開PDML,對DML語句必須手工啟用。即需要執行\x0d\x0aalter table enable parallel dml命令。\x0d\x0a \x0d\x0a并行DML特點:\x0d\x0a1、在并行DML模式中,默認的就是DIRECT-PATH插入,為了運行并行DML模式,必須滿足以下條件:\x0d\x0aa、必須是Oracle企業版;\x0d\x0ab、必須在session中使并行DML生效,執行以下sql語句:\x0d\x0aALTER SESSION { ENABLE | FORCE } PARALLEL DML;\x0d\x0ac、必須指定table的并行屬性,在創建的時候或者其他時候,或者在insert操作時使用“PARALLEL”提示。\x0d\x0ad、為了使Direct-Path Insert模式失效,在INSERT語句中指定“NOAPPEND”提示,覆蓋并行DML模式。\x0d\x0a 2、并行Direct-Path INSERT到分區表:\x0d\x0a 類似于serial Direct-Path INSERT,每個并行操作分配給一個或者多個分區,每個并行操作插入數據到各自的分區段的高水位標志之上,commit之后,用戶就能看到更新的數據。\x0d\x0a 3、并行Direct-Path INSERT到非分區表:\x0d\x0a 每個并行執行分配一個新的臨時段,并插入數據到臨時段。當commit運行后,并行執行協調者合并新的臨時段到主表段,用戶就能看到更新的數據。\x0d\x0a 4、Direct-Path INSERT可以使用Log或者不使用Log。\x0d\x0a 5、另外不得不說的是,并行不是一個可擴展的特性,只有在數據倉庫或作為DBA等少數人的工具在批量數據操作時利于充分利用資源,而在OLTP環境下使用并行需要非常謹慎。事實上PDML還是有比較多的限制的,例如不支持觸發器,引用約束,高級復制和分布式事務等特性,同時也會帶來額外的空間占用,PDDL同 樣是如此。
Oracle批量插入數據可用PL/SQL的命令窗口執行。
使用工具:PL/SQL
步驟:
1、登錄PL/SQL到指定數據庫。
2、登錄后,點擊左上方“紙片”狀圖標,然后選擇“Command Window”選項,進入命令窗口。
3、然后在本地電腦編寫insert(即插入語句),每句以逗號分隔。如圖:
4、然后為文件起名字,以.sql為文件后綴,如“執行.sql”,保存到指定路徑,如c盤data目錄下。
5、在打開的命令窗口下執行如下語句:
@c:\data\執行.sql
其中“@”為必寫內容,“c:\data\”為sql文件保存路徑,“執行.sql”為要執行的腳本文件名。
6、敲擊回車鍵執行,執行后會有成功提示,如圖:
7、最后去目標表查詢數據,檢驗結果成功。其中如圖的四條為新插入的數據。
系統有批量付款但是不能根據發票類別批量付款,給個替代方案,預付款發票單獨使用一個支付組,對支付組進行批量付款,可實現你的效果。
就像你說的,oracle沒有使用技術手段強迫用戶去購買licence,所以,從功能上講,免費的跟收費的沒有區別。
購買的時候一般考慮是按照cpu數來買還是按照用戶數來買,這個由用戶自己選擇,主要是看怎么買便宜。另外,不同行業用戶購買時價格差異很大。
詳細規則可以撥打8008100366免費電話,問原廠的人會權威。
兩種方式實現oracle批量提交
方式一:利用 fetch .. bulk collect into .. limit limitnumber;--limitnumber批量提交條數
declare Cursor dataCursors
is
/*定義游標*/
;
type dataCursor is table of tablename%rowtype;
dataCursorP dataCursor;
begin
open dataCursors;
while (true) loop
fetch dataCursors bulk collect into dataCursorP limit 50;
forall i in 1 .. dataCursorP.count
insert into tablename values dataCursorP(i);
commit;
exit when dataCursors%notfound;
end loop;
close dataCursors;
end;
方式二:自己實現批量提交功能
實現原理:定義一個number類型的記錄數,游標循環過程中記錄數自增1,利用mod判斷如果是否整除,整除就提交。
declare executenum:=0;
declare Cursor dataCursors
is
/*定義游標*/
;
dataCursor dataCursors%rowtype;
begin
for dataCursor in dataCursors
loop
executenum:=executenum+1;
/*update,insert or delete 等操作 */
if mod(executenum,50)=0 --這里設置50條一提交
then commit;
end if;
end loop;
commit;--最后提交一次,因為有可能最后不是50的整數
end;
--executenum還可以記錄操作的條數,
當前標題:oracle怎么批量付款,如何批量付款
本文路徑:http://vcdvsql.cn/article34/hedgpe.html
成都網站建設公司_創新互聯,為您提供標簽優化、Google、虛擬主機、外貿網站建設、做網站、用戶體驗
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯