婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 抽取oracle數據到mysql數據庫的實現過程

抽取oracle數據到mysql數據庫的實現過程

熱門標簽:淄博400電話申請 南昌高頻外呼系統哪家公司做的好 俄國地圖標注app 百度地圖標注后不顯示 溫州瑞安400電話怎么申請 電話機器人市場趨勢 電銷機器人 行業 昆明電信400電話辦理 電銷機器人各個細節介紹

在oracle數據庫遷移至mysql數據庫,除了oracle數據庫模型移到mysql外,還一個重要環節就是要將oracle數據庫的數據移到mysql數據庫,本人嘗試用過多款數據遷移程序,性能都不是很好的,于是自己動手寫一個針對于oracle數據庫數據遷移到mysql數據程序,其具體過程如下:

1、要抽取mysql表、字段及過濾條件的配制文件imp_data.sql

2、建立一個目錄ETL_DIR

3、運行oracle數據庫程序P_ETL_ORA_DATA,生成各表的csv數據文件,同時也生成一個導入mysql的腳本文件imp_data.sql

4、導入mysql數據,文件內容如下

load data infile "alarm_hist_inc.csv" into table alarm_hist_inc fields terminated by "," enclosed by "^" lines terminated by "\r\n";
load data infile "button_authority.csv" into table button_authority fields terminated by "," enclosed by "^" lines terminated by "\r\n";
load data infile "c3_sms_hist_inc.csv" into table c3_sms_hist_inc fields terminated by "," enclosed by "^" lines terminated by "\r\n";
load data infile "datapermisson.csv" into table datapermisson fields terminated by "," enclosed by "^" lines terminated by "\r\n";

附:數據庫腳本P_ETL_ORA_DATA

CREATE OR REPLACE PROCEDURE P_ETL_ORA_DATA
(
  P_ORA_DIR  VARCHAR2,
  P_DATA_PATH VARCHAR2
) IS
  TYPE T_REC IS RECORD(
    TBN VARCHAR2(40),
    WHR VARCHAR2(4000));
  TYPE T_TABS IS TABLE OF T_REC;
  V_TABS   T_TABS := T_TABS();
  V_ETL_DIR  VARCHAR2(40) := P_ORA_DIR;
  V_LOAD_FILE UTL_FILE.FILE_TYPE;
  PROCEDURE ETL_DATA
  (
    P_SQL_STMT VARCHAR2,
    P_DATA_PATH VARCHAR2,
    P_TB_NAME  VARCHAR2
  ) IS
  BEGIN
    DECLARE
      V_VAR_COL  VARCHAR2(32767);
      V_NUM_COL  NUMBER;
      V_DATE_COL DATE;
      V_TMZ    TIMESTAMP;
      V_COLS   NUMBER;
      V_COLS_DESC DBMS_SQL.DESC_TAB;
      V_ROW_STR  VARCHAR2(32767);
      V_COL_STR  VARCHAR2(32767);
      V_SQL_ID  NUMBER;
      V_SQL_REF  SYS_REFCURSOR;
      V_EXP_FILE UTL_FILE.FILE_TYPE;
      V_DATA_PATH VARCHAR2(200);
    BEGIN
      V_DATA_PATH := P_DATA_PATH;
      IF REGEXP_SUBSTR(V_DATA_PATH, '\\$') IS NULL
      THEN
        V_DATA_PATH := V_DATA_PATH || '\';
      END IF;
      V_DATA_PATH := REPLACE(V_DATA_PATH, '', '\\');
      OPEN V_SQL_REF FOR P_SQL_STMT;
      V_SQL_ID := DBMS_SQL.TO_CURSOR_NUMBER(V_SQL_REF);
      DBMS_SQL.DESCRIBE_COLUMNS(V_SQL_ID, V_COLS, V_COLS_DESC);
      FOR I IN V_COLS_DESC.FIRST .. V_COLS_DESC.LAST
      LOOP
        CASE
          WHEN V_COLS_DESC(I).COL_TYPE IN (1, 9, 96) THEN
            DBMS_SQL.DEFINE_COLUMN(V_SQL_ID, I, V_VAR_COL, 32767);
          WHEN V_COLS_DESC(I).COL_TYPE = 2 THEN
            DBMS_SQL.DEFINE_COLUMN(V_SQL_ID, I, V_NUM_COL);
          WHEN V_COLS_DESC(I).COL_TYPE = 12 THEN
            DBMS_SQL.DEFINE_COLUMN(V_SQL_ID, I, V_DATE_COL);
          WHEN V_COLS_DESC(I).COL_TYPE = 180 THEN
            DBMS_SQL.DEFINE_COLUMN(V_SQL_ID, I, V_TMZ);
        END CASE;
      END LOOP;
      DECLARE
        V_FLUSH_OVER PLS_INTEGER := 1;
        V_FILE_OVER PLS_INTEGER := 1;
        V_FILE_NO  PLS_INTEGER := 1;
        V_FILE_NAME VARCHAR2(200);
        V_LINE    VARCHAR2(400);
      BEGIN
        WHILE DBMS_SQL.FETCH_ROWS(V_SQL_ID) > 0
        LOOP
          IF V_FILE_OVER = 1
          THEN
            V_FILE_NAME := P_TB_NAME || '_' || V_FILE_NO || '.csv';
            V_EXP_FILE := UTL_FILE.FOPEN(V_ETL_DIR, V_FILE_NAME, OPEN_MODE => 'w', MAX_LINESIZE => 32767);
          END IF;
          V_ROW_STR := '';
          FOR I IN 1 .. V_COLS
          LOOP
            V_COL_STR := '\N';
            BEGIN
              CASE
                WHEN V_COLS_DESC(I).COL_TYPE IN (1, 9, 96) THEN
                  DBMS_SQL.COLUMN_VALUE(V_SQL_ID, I, V_VAR_COL);
                  IF V_VAR_COL IS NOT NULL
                  THEN
                    V_COL_STR := '^' || V_VAR_COL || '^';
                  END IF;
                WHEN V_COLS_DESC(I).COL_TYPE = 2 THEN
                  DBMS_SQL.COLUMN_VALUE(V_SQL_ID, I, V_NUM_COL);
                  IF V_NUM_COL IS NOT NULL
                  THEN
                    V_COL_STR := V_NUM_COL;
                  END IF;
                WHEN V_COLS_DESC(I).COL_TYPE = 12 THEN
                  DBMS_SQL.COLUMN_VALUE(V_SQL_ID, I, V_DATE_COL);
                  IF V_DATE_COL IS NOT NULL
                  THEN
                    V_COL_STR := '^' || TO_CHAR(V_DATE_COL, 'yyyy-mm-dd hh24:mi:ss') || '^';
                  END IF;
                WHEN V_COLS_DESC(I).COL_TYPE IN (180, 181, 231) THEN
                  DBMS_SQL.COLUMN_VALUE(V_SQL_ID, I, V_TMZ);
                  IF V_TMZ IS NOT NULL
                  THEN
                    V_COL_STR := '^' || TO_CHAR(V_TMZ, 'yyyy-mm-dd hh24:mi:ss.ff6') || '^';
                  END IF;
              END CASE;
              IF I = 1
              THEN
                V_ROW_STR := V_COL_STR;
              ELSE
                V_ROW_STR := V_ROW_STR || ',' || V_COL_STR;
              END IF;
            END;
          END LOOP;
          UTL_FILE.PUT_LINE(V_EXP_FILE, CONVERT(V_ROW_STR, 'UTF8'));
          IF V_FILE_OVER > 200000 /*每200000條記錄就產生一個新的文件*/
          THEN
            V_FILE_OVER := 1;
            V_FLUSH_OVER := 1;
            V_FILE_NO  := V_FILE_NO + 1;
            UTL_FILE.FCLOSE(V_EXP_FILE);
            V_LINE := 'load data infile "' || V_DATA_PATH || V_FILE_NAME || '" into table ' || P_TB_NAME;
            V_LINE := V_LINE || ' fields terminated by "," enclosed by "^" lines terminated by "\r\n";';
            UTL_FILE.PUT_LINE(V_LOAD_FILE, V_LINE);
            UTL_FILE.FFLUSH(V_LOAD_FILE);
            CONTINUE;
          END IF;
          V_FILE_OVER := V_FILE_OVER + 1;
          IF V_FLUSH_OVER > 2000 /*每2000條記錄就刷新緩存,寫到文件中 */
          THEN
            UTL_FILE.FFLUSH(V_EXP_FILE);
            V_FLUSH_OVER := 1;
          ELSE
            V_FLUSH_OVER := V_FLUSH_OVER + 1;
          END IF;
        END LOOP;
        DBMS_SQL.CLOSE_CURSOR(V_SQL_ID);
        IF UTL_FILE.IS_OPEN(V_EXP_FILE)
        THEN
          UTL_FILE.FCLOSE(V_EXP_FILE);
          V_LINE := 'load data infile "' || V_DATA_PATH || V_FILE_NAME || '" into table ' || P_TB_NAME;
          V_LINE := V_LINE || ' fields terminated by "," enclosed by "^" lines terminated by "\r\n";';
          UTL_FILE.PUT_LINE(V_LOAD_FILE, V_LINE);
          UTL_FILE.FFLUSH(V_LOAD_FILE);
        END IF;
      END;
    EXCEPTION
      WHEN OTHERS THEN
        IF DBMS_SQL.IS_OPEN(V_SQL_ID)
        THEN
          DBMS_SQL.CLOSE_CURSOR(V_SQL_ID);
        END IF;
        IF UTL_FILE.IS_OPEN(V_EXP_FILE)
        THEN
          UTL_FILE.FCLOSE(V_EXP_FILE);
        END IF;
        DBMS_OUTPUT.PUT_LINE(SQLERRM);
        DBMS_OUTPUT.PUT_LINE(P_SQL_STMT);
    END;
  END;
BEGIN
  BEGIN
    EXECUTE IMMEDIATE 'create table mysql_etl_tbs(tn varchar2(40),cn varchar2(40),ci number) ';
  EXCEPTION
    WHEN OTHERS THEN
      NULL;
  END;
  EXECUTE IMMEDIATE 'truncate table mysql_etl_tbs';
  DECLARE
    V_CI    PLS_INTEGER;
    V_CN    VARCHAR2(40);
    V_ETL_COLS VARCHAR2(32767);
    V_TBN   VARCHAR2(30);
    V_ETL_CFG VARCHAR2(32767);
    V_CNF_FILE UTL_FILE.FILE_TYPE;
    V_FROM_POS PLS_INTEGER;
  BEGIN
    V_CNF_FILE := UTL_FILE.FOPEN(V_ETL_DIR, 'ETL_TABS.CNF', 'r', 32767);
    LOOP
      UTL_FILE.GET_LINE(V_CNF_FILE, V_ETL_CFG, 32767);
      V_FROM_POS := REGEXP_INSTR(V_ETL_CFG, 'from', 1, 1, 0, 'i');
      V_ETL_COLS := SUBSTR(V_ETL_CFG, 1, V_FROM_POS - 1);
      V_ETL_COLS := REGEXP_SUBSTR(V_ETL_COLS, '(select)(.+)', 1, 1, 'i', 2);
      V_TBN   := REGEXP_SUBSTR(V_ETL_CFG, '(\s+from\s+)(\w+)(\s*)', 1, 1, 'i', 2);
      V_TBN   := UPPER(V_TBN);
      V_TABS.EXTEND();
      V_TABS(V_TABS.LAST).TBN := V_TBN;
      V_TABS(V_TABS.LAST).WHR := REGEXP_SUBSTR(V_ETL_CFG, '\s+where .+', 1, 1, 'i');
      V_CI := 1;
      LOOP
        V_CN := REGEXP_SUBSTR(V_ETL_COLS, '\S+', 1, V_CI);
        EXIT WHEN V_CN IS NULL;
        V_CN := UPPER(V_CN);
        EXECUTE IMMEDIATE 'insert into mysql_etl_tbs(tn,cn,ci) values(:1,:2,:3)'
          USING V_TBN, V_CN, V_CI;
        COMMIT;
        V_CI := V_CI + 1;
      END LOOP;
    END LOOP;
  EXCEPTION
    WHEN UTL_FILE.INVALID_PATH THEN
      DBMS_OUTPUT.PUT_LINE('指定的目錄:ETL_DIR"' || '"無效!');
      RETURN;
    WHEN UTL_FILE.INVALID_FILENAME THEN
      DBMS_OUTPUT.PUT_LINE('指定的文件:" ETL_TABS.CNF' || '"無效!');
      RETURN;
    WHEN NO_DATA_FOUND THEN
      UTL_FILE.FCLOSE(V_CNF_FILE);
    WHEN OTHERS THEN
      DBMS_OUTPUT.PUT_LINE(SQLERRM);
      RETURN;
  END;
  DECLARE
    V_CUR_MATCH  SYS_REFCURSOR;
    V_SQL_SMT   VARCHAR2(32767);
    V_TN     VARCHAR2(40);
    V_CN     VARCHAR2(40);
    V_CI     PLS_INTEGER;
    V_COLUMN_NAME VARCHAR2(40);
    V_ETL_COLS  VARCHAR2(32767);
    V_LINE    VARCHAR2(4000);
    V_TBN     VARCHAR2(40);
  BEGIN
    V_LOAD_FILE := UTL_FILE.FOPEN(V_ETL_DIR, 'load_data.sql', OPEN_MODE => 'w', MAX_LINESIZE => 32767);
    FOR T_IX IN V_TABS.FIRST .. V_TABS.LAST
    LOOP
      V_SQL_SMT := 'select tn,cn,column_name,ci from ( select * from mysql_etl_tbs where tn='':tbn:'' ) l left join user_tab_columns r on l.tn = r.table_name and l.cn= r.column_name order by ci';
      V_TBN   := V_TABS(T_IX).TBN;
      V_SQL_SMT := REPLACE(V_SQL_SMT, ':tbn:', V_TBN);
      V_ETL_COLS := NULL;
      OPEN V_CUR_MATCH FOR V_SQL_SMT;
      LOOP
        FETCH V_CUR_MATCH
          INTO V_TN, V_CN, V_COLUMN_NAME, V_CI;
        EXIT WHEN V_CUR_MATCH%NOTFOUND;
        IF V_CI > 1
        THEN
          V_ETL_COLS := V_ETL_COLS || ' , ';
        END IF;
        IF V_COLUMN_NAME IS NULL
        THEN
          V_ETL_COLS := V_ETL_COLS || ' cast(null as number) ' || V_CN;
        ELSE
          V_ETL_COLS := V_ETL_COLS || V_CN;
        END IF;
      END LOOP;
      CLOSE V_CUR_MATCH;
      V_TBN   := LOWER(V_TBN);
      V_SQL_SMT := 'select ' || V_ETL_COLS || ' from ' || V_TBN || V_TABS(T_IX).WHR;
      ETL_DATA(V_SQL_SMT, P_DATA_PATH, V_TBN);
    END LOOP;
    IF UTL_FILE.IS_OPEN(V_LOAD_FILE)
    THEN
      UTL_FILE.FCLOSE(V_LOAD_FILE);
    END IF;
  END;
END P_ETL_ORA_DATA;

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。如果你想了解更多相關內容請查看下面相關鏈接

您可能感興趣的文章:
  • 詳解MySQL實時同步到Oracle解決方案
  • Mysql、Oracle中常用的多表修改語句總結
  • mysql和oracle的區別小結(功能性能、選擇、使用它們時的sql等對比)
  • mysql數據庫和oracle數據庫之間互相導入備份
  • MySQL實現類似Oracle序列的方案
  • Oracle和MySQL的高可用方案對比分析
  • MySQL與Oracle 差異比較之六觸發器
  • MySQL與Oracle差異比較之五存儲過程&Function
  • MySQL與Oracle差異比較之三 函數
  • 詳解Mysql和Oracle之間的誤區

標簽:海口 安徽 嘉峪關 吐魯番 拉薩 甘南 葫蘆島 洛陽

巨人網絡通訊聲明:本文標題《抽取oracle數據到mysql數據庫的實現過程》,本文關鍵詞  抽取,oracle,數據,到,mysql,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《抽取oracle數據到mysql數據庫的實現過程》相關的同類信息!
  • 本頁收集關于抽取oracle數據到mysql數據庫的實現過程的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    欧美激情一区二区三区| av资源站一区| 久久蜜桃一区二区| 色欧美片视频在线观看在线视频| 精品一区二区三区在线视频| 亚洲精品免费在线播放| 国产精品美女久久久久久久| 久久亚洲一区二区三区四区| 欧美一卡二卡三卡| 欧美日韩中字一区| 欧美性色黄大片| 欧美亚洲自拍偷拍| 欧美视频在线一区| 欧美亚洲综合久久| 在线成人免费视频| 欧美区一区二区三区| 欧美日韩一区二区三区在线| 欧美日韩一区二区三区在线看 | 欧美视频精品在线观看| 色猫猫国产区一区二在线视频| www.久久精品| 欧美综合天天夜夜久久| 欧美三级韩国三级日本三斤| 欧美精品日日鲁夜夜添| 91精品婷婷国产综合久久性色| 日韩一级片网站| 国产亚洲视频系列| 国产精品三级电影| 亚洲综合成人网| 日本不卡一二三| 国产一区二区网址| www.欧美日韩| 欧美日本视频在线| 精品国产一区二区精华| 久久久久久9999| 中文字幕一区二区三区在线播放 | 大桥未久av一区二区三区中文| 成人免费三级在线| 在线精品观看国产| 欧美一区二区视频网站| 精品国产一区二区国模嫣然| 中文字幕欧美激情一区| 亚洲天堂2016| 美女视频一区二区| 99久久精品国产毛片| 欧美午夜精品一区二区三区| 日韩欧美亚洲国产另类| 国产精品超碰97尤物18| 精品久久久久久久久久久久包黑料| 色哟哟国产精品| 亚洲欧美日韩中文字幕一区二区三区 | 精品午夜一区二区三区在线观看| 婷婷一区二区三区| 成人综合在线网站| 亚洲精品一线二线三线 | 欧美美女一区二区三区| 成人av在线网| 91在线视频免费观看| 欧美精品丝袜久久久中文字幕| 精品999在线播放| 日韩在线一区二区三区| 天天av天天翘天天综合网色鬼国产| 国产日韩v精品一区二区| 欧美视频在线一区二区三区| 国产精品系列在线播放| 一区二区三区在线看| 欧美日韩五月天| 亚洲精品中文在线| 免费观看一级特黄欧美大片| 欧美在线影院一区二区| 日日欢夜夜爽一区| 久久久三级国产网站| jiyouzz国产精品久久| 精品久久国产老人久久综合| 国产精品素人一区二区| 久久综合久久鬼色| 亚洲一区在线播放| 成人毛片在线观看| 日韩精品在线一区二区| 亚洲午夜激情av| 91丨porny丨在线| 久久久美女艺术照精彩视频福利播放| 亚洲成人免费在线| 99re6这里只有精品视频在线观看| 精品国产亚洲一区二区三区在线观看| 最新国产の精品合集bt伙计| 国产成人亚洲综合a∨猫咪| 欧美精品欧美精品系列| 亚洲精品日日夜夜| 91亚洲国产成人精品一区二区三| 国产日韩影视精品| 亚洲不卡在线观看| 色悠悠亚洲一区二区| 日韩理论电影院| 色综合夜色一区| 国产一区二区三区蝌蚪| 丝袜美腿亚洲一区| 亚洲一区二区四区蜜桃| 国产精品国产三级国产普通话三级| 91精品久久久久久久久99蜜臂| 日本一区二区三区在线观看| 成人污视频在线观看| 美女视频网站久久| 一二三四社区欧美黄| 国产精品国产馆在线真实露脸| 亚洲精品一区二区三区四区高清| 欧美剧情片在线观看| av不卡在线观看| 色综合久久综合网| 日韩无一区二区| 欧美一区二区免费观在线| 亚洲精品欧美二区三区中文字幕| 国产福利精品一区二区| 国产福利视频一区二区三区| 日本高清不卡视频| 国产精品一二三四| 99久久精品费精品国产一区二区| 亚洲欧美色一区| 日本欧美加勒比视频| 国产亚洲欧美在线| 亚洲国产欧美在线| 国产成人综合精品三级| 国产精品私人影院| 欧美在线不卡视频| 日韩电影一二三区| 国产欧美日韩另类视频免费观看| av网站免费线看精品| 亚洲va欧美va国产va天堂影院| 美女国产一区二区三区| 亚洲精品一区二区在线观看| 99视频在线精品| 国产色产综合色产在线视频| 久久久久久久久久久久久久久99 | 99精品欧美一区二区蜜桃免费 | 日韩欧美中文一区二区| 麻豆国产欧美日韩综合精品二区| 国产精品一区二区久久不卡| 日本一区二区三区四区在线视频| 色哟哟一区二区| 免费久久99精品国产| 中文字幕乱码久久午夜不卡| 99久久99精品久久久久久 | 4438成人网| eeuss鲁片一区二区三区在线观看| 午夜久久久久久久久 | 亚洲午夜在线视频| 国产欧美日韩亚州综合| 天天色天天操综合| 136国产福利精品导航| 精品国产网站在线观看| 在线观看视频一区二区| 国产成人8x视频一区二区| 免费成人在线影院| 一个色在线综合| 国产精品电影一区二区| 精品成人佐山爱一区二区| 欧美日韩中文字幕一区二区| av男人天堂一区| 国产高清不卡一区| 蜜桃久久av一区| 手机精品视频在线观看| 亚洲成a人片在线不卡一二三区| 国产日韩在线不卡| 久久久精品国产免大香伊| 91精品久久久久久久99蜜桃| 欧美性受极品xxxx喷水| 91亚洲精品一区二区乱码| 成人一区二区三区中文字幕| 国产在线一区观看| 麻豆91精品视频| 免费在线一区观看| 蜜桃av一区二区三区电影| 美女国产一区二区三区| 久久国产尿小便嘘嘘| 韩国一区二区在线观看| 久久99国产乱子伦精品免费| 青青国产91久久久久久| 久久丁香综合五月国产三级网站| 免费观看成人鲁鲁鲁鲁鲁视频| 久久精品久久综合| 国产高清在线精品| 99国产欧美另类久久久精品| 国产精品综合久久| 亚洲国产精品久久久久秋霞影院| 欧美精品一区二| 日韩欧美国产小视频| 91精品国产福利| 欧美二区在线观看| 91精品国产高清一区二区三区 | 亚洲精品午夜久久久| 日韩限制级电影在线观看| 色综合久久久网| 一本到高清视频免费精品| av激情综合网| 欧美日韩国产综合视频在线观看| 美女诱惑一区二区| 欧美日韩久久一区二区| 色爱区综合激月婷婷| 欧美精品一区视频| 国产精品一区二区三区网站|