设为首页 加入收藏

TOP

批量生成sqlldr文件,高速卸载数据(二)
2014-11-23 23:37:29 来源: 作者: 【 】 浏览:28
Tags:批量 生成 sqlldr 文件 高速 卸载 数据
-使用下面的匿名pl/sql块可以实现批量卸载数据,此处不演示 DECLARE l_rows NUMBER; v_sql VARCHAR2 (200); CURSOR cur_tab IS SELECT table_name FROM user_tables;-->这里定义需要卸载的表,可以单独指定一个表用于存放需要卸载的对象,此处直接查询数据字典 BEGIN FOR tab_name IN cur_tab LOOP v_sql := 'select * from ' || tab_name.table_name; l_rows := unloader.run (p_query => v_sql, p_tname => tab_name.table_name, p_mode => 'replace', p_dir => 'DB_DUMP_DIR', p_filename => tab_name.table_name, p_separator => ',', p_enclosure => '"', p_terminator => '~'); -- Author : Leshami -- Blog : http://blog.csdn.net/leshami DBMS_OUTPUT.put_line (TO_CHAR (l_rows) || ' rows extracted to ascii file'); END LOOP; END; /

3、卸载数据原始脚本

robin@SZDB:~/dba_scripts/custom/tom> more unloader_pkg.sql 
CREATE OR REPLACE PACKAGE unloader
   AUTHID CURRENT_USER
AS
   /* Function run -- unloads data from any query into a file
   and creates a control file to reload that
   data into another table
   --注释信息给出了比较详细的描述
   p_query = SQL query to "unload". May be virtually any query.
   p_tname = Table to load into. Will be put into control file.
    p_mode = REPLACE|APPEND|TRUNCATE -- how to reload the data
    p_dir = directory we will write the ctl and dat file to.
    p_filename = name of file to write to. I will add .ctl and .dat
    to this name
    p_separator = field delimiter. I default this to a comma.
    p_enclosure = what each field will be wrapped in
    p_terminator = end of line character. We use this so we can unload
    and reload data with newlines in it. I default to
    "|\n" (a pipe and a newline together) and "|\r\n" on NT.
    You need only to override this if you believe your
    data will have that sequence in it. I ALWAYS add the
    OS "end of line" marker to this sequence, you should not
    */
   FUNCTION run (p_query        IN VARCHAR2,
                 p_tname        IN VARCHAR2,
                 p_mode         IN VARCHAR2 DEFAULT 'REPLACE',
                 p_dir          IN VARCHAR2,
                 p_filename     IN VARCHAR2,
                 p_separator    IN VARCHAR2 DEFAULT ',',
                 p_enclosure    IN VARCHAR2 DEFAULT '"',
                 p_terminator   IN VARCHAR2 DEFAULT '|')
      RETURN NUMBER;
END;
/

CREATE OR REPLACE PACKAGE BODY unloader
AS
   g_thecursor   INTEGER DEFAULT DBMS_SQL.open_cursor;
   g_desctbl     DBMS_SQL.desc_tab;
   g_nl          VARCHAR2 (2) DEFAULT CHR (10);

   FUNCTION to_hex (p_str IN VARCHAR2)
      RETURN VARCHAR2
   IS
   BEGIN
      RETURN TO_CHAR (ASCII (p_str), 'fm0x');
   END;

   FUNCTION is_windows
      RETURN BOOLEAN
   IS
      l_cfiles   VARCHAR2 (4000);
      l_dummy    NUMBER;
   BEGIN
      IF (DBMS_UTILITY.get_parameter_value ('control_files', l_dummy, l_cfiles) > 0)
      THEN
         RETURN INSTR (l_cfiles, '\') > 0;
      ELSE
         RETURN FALSE;
      END IF;
   END;

   PROCEDURE dump_ctl (p_dir          IN VARCHAR2,
                       p_filename     IN VARCHAR2,
                       p_tname        IN VARCHAR2,
                       p_mode         IN VARCHAR2,
                       p_separator    IN VARCHAR2,
                       p_enclosure    IN VARCHAR2,
                       p_terminator   IN VARCHAR2)
   IS
      l_output   UTL_FILE.file_type;
      l_sep      VARCHAR2 (5);
      l_str      VARCHAR2 (5) := CHR (10);
   BEGIN
      IF (is_windows)
      THEN
         l_str := CHR (13) || CHR (10);
      END IF;

      l_output := UTL_FILE.fopen (p_dir, p_filename || '.ctl', 'w');

      UTL_FILE.put_line (l_output, 'load data');
      UTL_FILE.put_line (l_output, 'infile ''' || p_filename || '.dat'' "str x''' || UTL_RAW.cast_to_raw (p_terminator || l_str) || '''"');
      UTL_FILE.put_line (l_output, 'into table ' || p_tname);
      UTL_FILE.put_line (l_output, p_mode);
      UTL_FILE.put_line (l_output, 'fields terminated by X''' || to_hex (p_separator) || ''' enclosed by X''' || to_hex (p_enclosure) || ''' ');
      UTL_
首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇MongoDB添加用户认证-增/删/改/查.. 下一篇MYSQL5.1 WINDOWS环境下导出查询..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: