動態SQL完成大表資料的遷移

2021-09-22 18:59:39 字數 1849 閱讀 9990

目前需求是根據源表資料如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;

Django完成資料表遷移 2020 8 10

完成資料遷移的步驟 1.在主程式 setting 內註冊資料庫mysql databases host 可以用額外主機的ip位址鏈結到別人的資料庫,為了演示用本機的ip位址鏈結mysql資料庫2.建立乙個子應用 3.在主程式setting裡面註冊子程式 4.在子應用booktest內的models....

sql2005 資料庫部分表資料遷移

同伺服器上的不同資料庫 insert into database.dbo.tablename select from tablename 不同伺服器的資料庫 exec sp addlinkedserver name sqloledb serverip exec sp addlinkedsrvlogi...

動態SQL語句建立資料表

寫儲存過程,我們會經常需要動態創資料表,如臨時表等。下面例子是使用execute來建立乙個資料表。宣告乙個變數 declare tablename nvarchar 30 dummytablename 動態建立表,execute 判斷表物件是否存在,if object id dbo tablenam...