動態SQL完成大表資料的遷移
目前需求是根據源表資料如salary>10000的資料插入目標表中,目標表根據需要指定,且插入指定N條資料後提交。
對於此類問題可以用insert into select方法但需要按指定N條資料提交,說明表中資料量很大,插入時應批量提取,再按
指定條數插入新表,且批量提取資料時也應根據資料大小分批提取,於是考慮在動態sql中使用bulk collect into + limit的方法
具體例項如下
drop table emp_bak;
create table emp_bak
as select first_name
,salary
,rownum rnid
from employees
where 1 != 1;
declare
SOURCE_TABLE varchar(100);
TAG_A VARCHAR(100);
C_COUNT VARCHAR(100);
v_query_sql varchar2(500);
v_query_rn varchar2(100);
type delArray1 is table of hr.employees.first_name%type index by binary_integer;
type delArray2 is table of hr.employees.salary%type index by binary_integer;
type delArray3 is table of hr.employees.employee_id%type index by binary_integer;
first_name delArray1;
salary delArray2;
rnid delArray3;
rnd number;
TYPE i_cursor_type IS REF CURSOR;
my_cursor i_cursor_type;
begin
SOURCE_TABLE := 'employees';
TAG_A := 'emp_bak';
C_COUNT := 10;
v_query_rn :=
'select count(*)
from '||SOURCE_TABLE||'
where salary > 10000';
v_query_sql :=
'select first_name
,salary
,rownum
from '||SOURCE_TABLE||'
where salary > 10000';
open my_cursor for v_query_sql;
execute immediate v_query_rn into rnd;
for i in 1..rnd loop
fetch my_cursor bulk collect into first_name,salary,rnid limit 10;
for i in 1..first_name.count
loop
execute immediate 'insert into hr.'|| TAG_A||' values (:1, :2, :3)'
using first_name(i),salary(i),rnid(i);
end loop;
end loop;
close my_cursor;
end;
select count(*) from emp_bak;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/750077/viewspace-2074785/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- KVM線上遷移(動態遷移)
- 【資料遷移】使用傳輸表空間遷移資料
- SQL Server資料庫遷移SQLServer資料庫
- 資料表內容遷移?
- 資料遷移(1)——通過資料泵表結構批量遷移
- 寫有效的歷史資料遷移sqlSQL
- ZT 寫有效的歷史資料遷移sqlSQL
- 資料的遷移
- 海量資料遷移之外部表切分
- 資料庫物件遷移表空間資料庫物件
- 外部表的另一種用途 資料遷移
- 遷移資料.
- Laravel 資料遷移給表新增註釋Laravel
- 線上遷移表空間資料檔案
- 海量資料遷移之外部表載入
- Oracle 表空間資料檔案遷移Oracle
- 【遷移】使用rman遷移資料庫資料庫
- 修改表結構遷移資料表來縮小表大小
- SQL 遷移資料庫至ORACLE簡易方法SQL資料庫Oracle
- 【移動資料】SQL*LoaderSQL
- SQL Server 移動資料庫SQLServer資料庫
- echarts遷移圖動態載入Echarts
- 智慧儲存市場調查:資料移動將成大問題
- 海量資料遷移之使用shell啟用多個動態並行並行
- 動態sql和利用動態sql解決資料字典的讀取SQL
- 海量資料處理_使用外部表進行資料遷移
- 動態sql 報表SQL
- impala 資料表在叢集間遷移方案
- 海量資料遷移之外部表並行抽取並行
- InnoDB資料表空間檔案平滑遷移
- 伺服器資料遷移的方法-硬體不同如何遷移資料伺服器
- Kafka資料遷移Kafka
- 資料庫遷移資料庫
- redis資料遷移Redis
- 轉資料遷移
- ORACLE 資料遷移Oracle
- DXWB 資料遷移
- Harbor資料遷移