亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > 綜合 > 正文

用Forall與bulk collect快速復制表數據

2024-07-21 02:42:17
字體:
來源:轉載
供稿:網友
本文中介紹的幾種寫法分別是從代碼的簡易性,FORALL和bulk collect的使用,以及分批插入這三方面考慮得出的,大家可以根據自己的需要靈活選擇。

三種不同的寫法:

1.使用了BULK COLLECT,沒有使用FORALL, 一次性插入,分批COMMIT,這種方法比較適用于10萬以下條數據的表;

create or replace PRocedure cp_data2 as

type TYPE_EMPLOYEES is table of EMPLOYEES%rowtype;

V_EMPLOYEES TYPE_EMPLOYEES;

v_table varchar2(30);

v_sql varchar2(300);

 v_rows number:=5000;

begin

execute immediate 'alter session set nls_date_format=''yyyy/mm/dd''';

v_table := 'employee_cp';

v_sql := 'insert /*+ APPEND*/ into ' || v_table ||

' (EMPLOYEE_ID,

FIRST_NAME,

LAST_NAME,

EMAIL,

PHONE_NUMBER,

HIRE_DATE,

JOB_ID,

SALARY,

COMMISSION_PCT,

MANAGER_ID,

DEPARTMENT_ID,

BIRTHDAY)

values (:1, :2,:3,:4,:5,:6, :7, :8,:9,:10, :11,:12)';

select * bulk collect into V_EMPLOYEES from employees; --dest table

for i in 1 .. V_EMPLOYEES.count loop

execute immediate v_sql

using V_EMPLOYEES(i).EMPLOYEE_ID, V_EMPLOYEES(i).FIRST_NAME, V_EMPLOYEES(i).LAST_NAME, V_EMPLOYEES(i).EMAIL, V_EMPLOYEES(i).PHONE_NUMBER, V_EMPLOYEES(i).HIRE_DATE, V_EMPLOYEES(i).JOB_ID, V_EMPLOYEES(i).SALARY, V_EMPLOYEES(i).COMMISSION_PCT, V_EMPLOYEES(i).MANAGER_ID, V_EMPLOYEES(i).DEPARTMENT_ID, V_EMPLOYEES(i).BIRTHDAY;

if mod(i, v_rows) = 0 then

commit;

end if;

end loop;

commit;

end;

2.使用BULK COLLECT,不使用FORALL, 分批插入,多次提交,比較適用于大表;

create or replace procedure cp_data5 as

type t_cur is REF cursor;

c_table t_cur;

type t_employee is table of employees%rowtype;

v_employees t_employee;

rows number := 50;

v_sql varchar2(300);

v_table varchar(50);

begin

v_table := 'employee_cp';

open c_table for

select * from employees; --sour

v_sql := 'insert /*+ APPEND*/ into ' || v_table ||

' (EMPLOYEE_ID,

FIRST_NAME,

LAST_NAME,

EMAIL,

PHONE_NUMBER,

HIRE_DATE,

JOB_ID,

SALARY,

COMMISSION_PCT,

MANAGER_ID,

DEPARTMENT_ID,

BIRTHDAY) values (:1, :2,:3,:4,:5,:6, :7, :8,:9,:10, :11,:12)';

loop

fetch c_table bulk collect

into v_employees limit rows; --分批

dbms_output.put_line(v_employees.count);

for i in 1 .. v_employees.count loop

execute immediate v_sql

using V_EMPLOYEES(i).EMPLOYEE_ID, V_EMPLOYEES(i).FIRST_NAME, V_EMPLOYEES(i).LAST_NAME, V_EMPLOYEES(i).EMAIL, V_EMPLOYEES(i).PHONE_NUMBER, V_EMPLOYEES(i).HIRE_DATE, V_EMPLOYEES(i).JOB_ID, V_EMPLOYEES(i).SALARY, V_EMPLOYEES(i).COMMISSION_PCT, V_EMPLOYEES(i).MANAGER_ID, V_EMPLOYEES(i).DEPARTMENT_ID, V_EMPLOYEES(i).BIRTHDAY;

end loop;

commit;

exit when c_table%notfound;

end loop;

close c_table;

end;

3.使用BULK COLLECT和FORALL ,分批插入,多次提交,比較適用于大表; 前期數據字段定義比較煩鎖(表各個字段必須分開定義)

-------------------

create or replace procedure cp_data as

type type_EMPLOYEE_ID is table of EMPLOYEES.EMPLOYEE_ID%type;

type type_FIRST_NAME is table of EMPLOYEES.FIRST_NAME%type;

type type_LAST_NAME is table of EMPLOYEES.LAST_NAME%type;

type type_EMAIL is table of EMPLOYEES.EMAIL%type;

type type_PHONE_NUMBER is table of EMPLOYEES.PHONE_NUMBER%type;

type type_HIRE_DATE is table of EMPLOYEES.HIRE_DATE%type;

type type_JOB_ID is table of EMPLOYEES.JOB_ID%type;

type type_SALARY is table of EMPLOYEES.SALARY%type;

type type_COMMISSION_PCT is table of EMPLOYEES.COMMISSION_PCT%type;

type type_MANAGER_ID is table of EMPLOYEES.MANAGER_ID%type;

type type_DEPARTMENT_ID is table of EMPLOYEES.DEPARTMENT_ID%type;

type type_BIRTHDAY is table of EMPLOYEES.BIRTHDAY%type;

V_EMPLOYEE_ID TYPE_EMPLOYEE_ID;

V_FIRST_NAME TYPE_FIRST_NAME;

V_LAST_NAME TYPE_LAST_NAME;

V_EMAIL TYPE_EMAIL;

V_PHONE_NUMBER TYPE_PHONE_NUMBER;

V_HIRE_DATE TYPE_HIRE_DATE;

V_JOB_ID TYPE_JOB_ID;

V_SALARY TYPE_SALARY;

V_COMMISSION_PCT TYPE_COMMISSION_PCT;

V_MANAGER_ID TYPE_MANAGER_ID;

V_DEPARTMENT_ID TYPE_DEPARTMENT_ID;

V_BIRTHDAY TYPE_BIRTHDAY;

type t_cur is ref cursor;

c_table t_cur;

v_table varchar2(30); --dest table

v_sql varchar2(300);

v_rows number := 50;

begin

v_table := 'EMPLOYEE_CP';

open c_table for

select * from employees; --sour table

v_sql := 'insert /*+ APPEND*/ into ' || v_table ||

' (EMPLOYEE_ID,

FIRST_NAME,

LAST_NAME,

EMAIL,

PHONE_NUMBER,

HIRE_DATE,

JOB_ID,

SALARY,

COMMISSION_PCT,

MANAGER_ID,

DEPARTMENT_ID,

BIRTHDAY)

values (:1, :2,:3,:4,:5,:6, :7, :8,:9,:10, :11,:12)';

loop

fetch c_table --.EMPLOYEE_ID, c_table.FIRST_NAME, c_table.LAST_NAME, c_table.EMAIL, c_table.PHONE_NUMBER, c_table.HIRE_DATE, c_table.JOB_ID, c_table.SALARY, c_table.COMMISSION_PCT, c_table.MANAGER_ID, c_table.DEPARTMENT_ID, c_table.BIRTHDAY

bulk collect

into V_EMPLOYEE_ID, V_FIRST_NAME, V_LAST_NAME, V_EMAIL, V_PHONE_NUMBER, V_HIRE_DATE, V_JOB_ID, V_SALARY, V_COMMISSION_PCT, V_MANAGER_ID, V_DEPARTMENT_ID, V_BIRTHDAY limit v_rows; --分批

forall i in 1 .. V_EMPLOYEE_ID.count execute immediate v_sql using

V_EMPLOYEE_ID(i), V_FIRST_NAME(i), V_LAST_NAME(i),

V_EMAIL(i), V_PHONE_NUMBER(i), V_HIRE_DATE(i),

V_JOB_ID(i), V_SALARY(i), V_COMMISSION_PCT(i),

V_MANAGER_ID(i), V_DEPARTMENT_ID(i), V_BIRTHDAY(i)

;

commit;

exit when c_table%notfound;

end loop;

end;

---------------------------------------------------------

4相關附助SQL:

select 'type TYPE_' || column_name || ' is table of ' || table_name || '.' ||

column_name || '%type'

from dba_tab_columns

where table_name = 'EMPLOYEES'

and owner = 'HYF'

select 'V_' || column_name || ' TYPE_' || column_name ||';'

from dba_tab_columns

where table_name = 'EMPLOYEES'

and owner = 'HYF'

select 'V_' || column_name || ','

from dba_tab_columns

where table_name = 'EMPLOYEES'

and owner = 'HYF'

select 'V_' || column_name || '(i),'

from dba_tab_columns

where table_name = 'EMPLOYEES'

and owner = 'HYF'


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
色婷婷**av毛片一区| 日韩成人中文字幕在线观看| 亚洲黄色www| 欧美大片在线看| 亚洲欧美日韩爽爽影院| 亚洲成成品网站| 2019最新中文字幕| 精品久久久一区二区| 一区二区中文字幕| xxxxx成人.com| 97av视频在线| 精品二区三区线观看| 亚洲天堂av在线免费| 久久人人爽国产| 人妖精品videosex性欧美| 欧美巨大黑人极品精男| 成人激情视频免费在线| 欧美一级成年大片在线观看| 日韩欧美在线视频观看| 欧美精品中文字幕一区| 欧美性猛交xxxx免费看| 国产成人福利夜色影视| 亚洲欧美在线免费| 一区二区三区四区视频| 久久国内精品一国内精品| 草民午夜欧美限制a级福利片| 色综合久久88色综合天天看泰| 成人欧美一区二区三区在线湿哒哒| 欧美日韩xxxxx| 日本欧美一二三区| 久久久亚洲成人| 亚洲欧美日韩精品久久| 日韩电视剧在线观看免费网站| 欧美精品免费在线| 国产欧美日韩丝袜精品一区| 91av中文字幕| 精品欧美一区二区三区| 欧美黑人xxxⅹ高潮交| 亚洲欧洲日韩国产| 欧美成人精品在线视频| 4444欧美成人kkkk| 午夜精品福利在线观看| 亚洲欧美日韩国产成人| 亚洲美女性生活视频| 日韩欧美在线第一页| 亚洲国产97在线精品一区| 亚洲а∨天堂久久精品9966| 欧美大人香蕉在线| 久久av资源网站| 欧美精品激情在线| 国外色69视频在线观看| 91免费福利视频| 国产亚洲欧洲在线| 中文字幕视频一区二区在线有码| 91探花福利精品国产自产在线| 奇米四色中文综合久久| 久久久精品国产网站| 97在线精品国自产拍中文| 日韩中文字幕免费视频| 色七七影院综合| 国产精品直播网红| 亚洲国产成人久久综合一区| 欧美与欧洲交xxxx免费观看| 久久久久久亚洲精品| 国产精品一区av| 国产一区二区av| 欧美—级a级欧美特级ar全黄| 久久精品国产久精国产思思| 欧美体内谢she精2性欧美| 一区三区二区视频| 欧美成人在线影院| 91亚洲va在线va天堂va国| 久久久av网站| 欧美日韩在线另类| 欧美大片免费观看在线观看网站推荐| 国产视频丨精品|在线观看| 国产精品久久中文| 狠狠躁夜夜躁人人爽天天天天97| 国产精品免费小视频| 欧美国产日韩一区二区在线观看| 91中文字幕一区| 欧美成人精品在线视频| 欧美噜噜久久久xxx| 日韩精品在线观看一区| 精品国产区一区二区三区在线观看| 亚洲欧美日韩中文视频| 国产精品久久久久久婷婷天堂| 国产精品视频久久久久| 欧美午夜视频在线观看| 欧美成人免费观看| 日韩美女免费视频| 国产精品成久久久久三级| 日韩综合视频在线观看| 成人h视频在线| 国产精欧美一区二区三区| 亚洲小视频在线| 最近2019年好看中文字幕视频| 国产一区视频在线播放| 亚洲欧美日韩另类| 国产成人精品电影| 在线观看国产欧美| 91久久精品国产91久久| 久久久999成人| 欧美日韩电影在线观看| 日韩精品在线观看视频| 日本一区二区在线播放| 欧美一级电影免费在线观看| 亚洲国产天堂网精品网站| 日韩欧美主播在线| 亚洲少妇激情视频| 成人97在线观看视频| 日韩免费观看av| 国产精品综合网站| 亚洲图片制服诱惑| 亚洲一级黄色片| 日韩欧美亚洲国产一区| 精品高清美女精品国产区| 亚洲欧美激情视频| 欧美巨大黑人极品精男| 亚洲国模精品私拍| 欧美专区国产专区| 欧美激情a在线| 日韩人体视频一二区| 国模吧一区二区三区| 久久久噜噜噜久久久| 国内精品久久久久久久久| 国产精品69久久久久| 久久久精品免费| 欧美精品精品精品精品免费| 亚洲а∨天堂久久精品9966| 日韩电视剧免费观看网站| 国产视频一区在线| 欧美日韩一区二区三区在线免费观看| 国产精品igao视频| 日韩视频―中文字幕| 九九久久久久久久久激情| 国内精品400部情侣激情| 国产精品一区二区女厕厕| 日韩中文字幕在线视频播放| 性视频1819p久久| 欧美日韩精品在线视频| 国产精品成人播放| 91在线高清免费观看| 福利一区视频在线观看| 亚洲国产欧美一区二区三区同亚洲| 97精品久久久| 岛国av一区二区| 日韩欧美国产中文字幕| 国自在线精品视频| 精品日韩美女的视频高清| 亚洲图片在区色| 日本一区二三区好的精华液| 日韩免费在线免费观看| 国产精品久久久一区| 亚洲国产小视频在线观看| 久久影院在线观看| 亚洲激情国产精品| 成人女保姆的销魂服务| 亚洲欧美综合另类中字| 亚洲精品在线91| 亚洲成人网在线| 欧美成aaa人片在线观看蜜臀| 97精品国产97久久久久久春色| 91亚洲精品久久久|