使用預存程序將Oracle資料大量匯出為多個csv檔案

來源:互聯網
上載者:User

標籤:

資料庫有如下表結構:
user_info (   user_id           NUMBER primary key,  user_name     VARCHAR2(200) NOT NULL,         user_age        VARCHAR2(80),  create_date    DATE,  create_order   NUMBER)
現在有100萬條記錄,要求每1000條記錄匯出為一個csv檔案,內容用逗號分隔,共計1000個檔案,
檔案名稱格式為output1.csv,output1.csv......output1000.csv。
/*====================  第一步:建立一張表====================*/CREATE TABLE USER_INFO (   USER_ID        NUMBER PRIMARY KEY,  USER_NAME      VARCHAR2(200) not null,         USER_AGE       VARCHAR2(80),  CREATE_DATE    DATE,  CREATE_ORDER   NUMBER)
/*====================  第二步:初始化資料、粘貼在命令列執行====================*/declare i number;        v_age number;begin  i:=0;  for i in 1..1000000 loop     --隨機產生1~100的數字     select round(mod(dbms_random.value*100,100)) into v_age from dual;     insert into user_info(user_id,user_name,user_age,create_date,create_order)     values(SEQ_ALL_TABLE.NEXTVAL ,‘翁林‘||i,v_age,sysdate,i);       --每1000行提交一次     if mod(i,1000) = 0 then         commit;     end if;      end loop;end;
/*====================  第三步:具體過程實現  一次性將100萬條記錄全部查詢出來放到遊標中,每1000條寫一個檔案,
   經測試,使用遊標方式,使用該表初始化的資料,整個過程執行時間長度大致40s左右。====================*/create or replace procedure export_to_csv(--1、入口參數部分       p_dir varchar2)is--2、內部變數部分v_errorcode varchar2(30);v_errormsg  varchar2(100);--顯示遊標、一次性將資料全部讀完cursor mycur is select * from user_info order by user_id; --如果不排序,你將發現寫入結果順序將達不到你的期望,該懂得的。--行記錄myrecord user_info%rowtype;csv_output utl_file.file_type;out_file_name varchar2(20);  begin_time number;  end_time number;  count_num number;begin--3、主體部分      begin_time :=dbms_utility.get_time;      open mycur;      for i in 1..1000 loop            out_file_name := ‘output‘||i||‘.csv‘;            csv_output := utl_file.fopen(p_dir,out_file_name,‘W‘);            count_num := 0;          while count_num < 1000 loop --每1000行寫入一個檔案                fetch mycur into myrecord;                utl_file.put_line(csv_output                 ,myrecord.user_id|| ‘,‘ ||                myrecord.user_name||‘,‘||                myrecord.user_age||‘,‘||                to_char(myrecord.create_date,‘YYYY-MM-DD HH24:MI:SS‘)||‘,‘||                myrecord.create_order);                count_num := count_num + 1;          end loop;                  utl_file.fclose(csv_output);      end loop;      close mycur;       end_time := dbms_utility.get_time;         dbms_output.put_line(‘total time=‘ || (end_time-begin_time)*10 || ‘ms.‘);  --4、異常處理   exception    when others then     v_errorcode:=sqlcode;     v_errormsg :=sqlerrm;     rollback;     --輸出異常資訊     dbms_output.put_line(v_errorcode||v_errormsg);          end export_to_csv;
/*====================  第四步:建立輸出目錄,並授權給相關使用者====================*/CREATE or replace DIRECTORY MYDIR AS ‘d:\tmp\‘;GRANT READ,WRITE ON DIRECTORY MYDIR TO wenglin;/*====================  第五步:命令列執行,查看輸出檔案
若想看到命令列列印結果,請執行:set serveroutput on====================*/exec export_to_csv(‘MYDIR‘);
 
其他說明:該樣本參考:http://blog.csdn.net/chjttony/article/details/7466159

使用預存程序將Oracle資料大量匯出為多個csv檔案

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.