ORACLE擷取DML(Insert into)的方法

來源:互聯網
上載者:User

 from: 把Oracle表裡的資料導成insert語句

 有些時候我們需要把oracle裡的資料匯入其他資料庫裡。產生insert into 表名 .... 是一種很簡單直接的方法。 今年六月份從www.arikaplan.com/oracle.html看到一個可以產生insert into 表名 ....語句的預存程序genins_output。按中文習慣的時間格式YYYY-MM-DD HH24:MI:SS改了改,並新寫了一個預存程序genins_file.sql。 它可以把小於16383條記錄表裡的資料導成(insert into 表名 ....)OS下檔案。 調用它之前,DBA要看看資料庫的初始化參數 UTL_FILE_DIR 是否已經正確地設定: SQL> show parameters utl_file_dir; 可以看到該參數的當前設定。 如果沒有值,必須修改資料庫的initsid.ora檔案,將utl_file_dir 指向一個你想用PL/SQL file I/O 的路徑。重新啟動資料庫。此參數才生效。 調用它,可以把表裡的資料產生(insert into 表名 ....)OS下檔案的過程genins_file方法: SQL>exec genins_file('emp','/oracle/logs','insert_emp.sql');                |    |      |           表名,可變 |   產生OS下檔案名稱,可變                 |       utl_file_dir路徑名,不變(我設定的是/oracle/logs) 可以在OS目錄/oracle/logs下看到insert_emp.sql檔案。 注意事項: 產生(insert into 表名 ....)OS下檔案最多32767行。因為我一條insert分成兩行,所以最多處理16383條記錄的表。 附:genins_file.sql

code:
CREATE OR REPLACE PROCEDURE genins_file(     p_table     IN varchar2,     p_output_folder IN VARCHAR2,     p_output_file   IN VARCHAR2) IS --   l_column_list       VARCHAR2(32767);   l_value_list        VARCHAR2(32767);   l_query             VARCHAR2(32767);   l_cursor            NUMBER;   ignore         NUMBER;   l_insertline1          varchar2(32767);   l_insertline2          varchar2(32767);     cmn_file_handle       UTL_FILE.file_type;   --   FUNCTION get_cols(p_table VARCHAR2)   RETURN VARCHAR2   IS     l_cols VARCHAR2(32767);     CURSOR l_col_cur(c_table VARCHAR2) IS             SELECT column_name             FROM   user_tab_columns             WHERE  table_name = upper(c_table)             ORDER BY column_id;   BEGIN     l_cols := null;     FOR rec IN l_col_cur(p_table)     LOOP       l_cols := l_cols || rec.column_name || ',';     END LOOP;     RETURN substr(l_cols,1,length(l_cols)-1);   END;   --   FUNCTION get_query(p_table IN VARCHAR2)   RETURN VARCHAR2   IS     l_query VARCHAR2(32767);       CURSOR l_query_cur(c_table VARCHAR2) IS         SELECT 'decode('||column_name||',null,''null'','||                decode(data_type,'VARCHAR2','''''''''||'||column_name ||'||'''''''''                ,'DATE','''''''''||to_char('||column_name||',''YYYY-MM-DD HH24:MI:SS'')||'''''''''                ,column_name                ) || ')' column_query           FROM user_tab_columns          WHERE table_name = upper(c_table)         ORDER BY column_id;   BEGIN     l_query := 'SELECT ';     FOR rec IN l_query_cur(p_table)     LOOP       l_query := l_query || rec.column_query || '||'',''||';     END LOOP;     l_query := substr(l_query,1,length(l_query)-7);     RETURN l_query || ' FROM ' || p_table;   END;   -- BEGIN   l_column_list  := get_cols(p_table);   l_query        := get_query(p_table);   l_cursor := dbms_sql.open_cursor;   DBMS_SQL.PARSE(l_cursor, l_query, DBMS_SQL.native);   DBMS_SQL.DEFINE_COLUMN(l_cursor, 1, l_value_list, 32767);   ignore := DBMS_SQL.EXECUTE(l_cursor);   --   IF NOT UTL_FILE.IS_OPEN(cmn_file_handle) THEN         cmn_file_handle := UTL_FILE.FOPEN (p_output_folder, p_output_file, 'a',32767);   END IF;      LOOP     IF DBMS_SQL.FETCH_ROWS(l_cursor)>0 THEN       DBMS_SQL.COLUMN_VALUE(l_cursor, 1, l_value_list);       l_insertline1:='INSERT INTO '||p_table||' ('||l_column_list||')';       l_insertline2:=' VALUES ('||l_value_list||');';       UTL_FILE.put_line (cmn_file_handle, l_insertline1);       UTL_FILE.put_line (cmn_file_handle, l_insertline2);     ELSE       EXIT;     END IF;   END LOOP;   IF NOT UTL_FILE.IS_OPEN(cmn_file_handle) THEN      UTL_FILE.FCLOSE (cmn_file_handle);   END IF;    END; /
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.