1.如果兩個表的資料結構一樣,可以考慮很多種方式:
(1)create table as select * from tbl_name;
(3)引入指令碼:
declare
maxnum number defult 5000;
cursor
cur
is
select
*
from
aa;
--定義游標
type rec
is
table
of
aa%rowtype;
--定義型別
recs rec;
begin
open
cur;
--開啟游標
loop
--迴圈條件
exit
when
cur%notfound;
--游標結束條件
fetch
cur bulk collect
--取游標裡的值
into
recs limit maxnum;
--提交條件,每5000條提交
forall i
in
1 .. recs.
count
--這個是個計數器,用來確保提交的條數,也是迴圈
insert
into
bb
values
recs (i);
--插入目標表
commit
;
--提交
end
loop;
--停止迴圈
close
cur;
--關閉游標1,
end
;
這種方式適用於要兩個表結構一樣的情況。
2.兩個表結構不一樣,方法也是類似的:
3.
create or replace procedure "largedata_insert" (ip_table_name in varchar2, --目標表
ip_table_column in varchar2, --目標字段
ip_table_select in varchar2, --select 查詢語句
return_result out number --返回的結果1,表示成功,0表示失敗
) as
--適合大資料量的插入模板 create templates by chenzhoumin 20110614
runtime number;--執行總次數
i number;--當前行數
amount number;--總行數
s_sql varchar2(10000);--sql語句
e_sql varchar2(10000);--執行sql語句
countnumber number;--一次插入的資料量
begin
--set serveroutput on size 20000000000000
countnumber := 10000;
return_result := 0; --開始初始化為0
--核必邏輯內容,可根據具體的業務邏輯來定義,統計資料總行數
s_sql := 'select count(1) from (' || ip_table_select || ')';
execute immediate s_sql
into amount;
--每100萬提交一次
runtime := amount mod countnumber;
if (runtime > 0) then
runtime := 1 + trunc(amount / countnumber);
end if;
if (runtime = 0) then
runtime := 0 + trunc(amount / countnumber);
end if;
for i in 1 .. runtime loop
e_sql := 'insert into '||ip_table_name ||'
('||ip_table_column ||')
select '|| ip_table_column ||'
from
(select selectsec.*, rownum rownumtype
from ('|| ip_table_select ||') selectsec
where rownum <= '|| i * countnumber ||')
where rownumtype > '||(i - 1) * countnumber;
dbms_output.enable(99999999999999);
dbms_output.put_line(e_sql);
execute immediate e_sql;
--提交
commit;
end loop;
return_result := 1;
return;
exception
when others then
return_result := 0;
raise;
dbms_output.enable(99999999999999);
dbms_output.put_line('結束');
return;
end;
其實這個儲存過程當查詢到資料千萬以後也是挺慢的。
兩張大資料量表大資料量的比較
rdd兩張大資料量表大資料量的比較 大批量資料驗證的範圍。核心唯一驗證。範圍內 單位範圍內的所有人員快取。比較匯入的表內的人員是否在這個人員快取。如果不在那就顯示錯誤提示。匯入的人員就不會超過這個範圍也就限制了運算元據的範圍。對於儲存表,驗證當月這個單位內的所有記錄裡是否已經存在同規則的記錄。這個人...
大資料量的建表 導資料
跨機器轉移資料檔案 scp 在linux伺服器之間複製檔案和目錄,cp只能在本機複製,不可以跨伺服器 scp r 20170907.tar.gz username ip export 解壓 tar zxvf 20170907.tar.gz 或者 將電腦本地檔案在跨集群間hdfs傳檔案 建立hdfs資...
大資料量的分表方法
以下是幾種常見的分表演算法。1.按自然時間來分表 分庫 2.按數字型別hash分表 分庫 如果我們要儲存使用者的資訊,我們應用的註冊量很大,我們用單錶是不能滿足儲存需求的,那麼我們就可以用使用者的編號來進行hash,常見的是用取餘操作,如果我們要分30張表來儲存使用者的資訊,那麼使用者編號為1的使用...