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