如何将数据从ORACLE DB中的大约300个表导出到CSV或txt文件

pepwfjgg  于 12个月前  发布在  Oracle
关注(0)|答案(4)|浏览(208)

是否有可能使用任何PL/SQL过程将数据从单个模式中的大约300个表中导出数百万条记录到CSV或TXT?
你有什么建议,这是最快的方法来做到这一点?目前我不需要导入这些导出的文件到任何其他模式.
我试着用蟾蜍手动导出表的表.

oaxa6hgo

oaxa6hgo1#

我已经创建了一个实用程序,您可以通过它生成PL/SQL过程从表中导出数据。它将采用以下参数,表名,列名,目录名和目录名。您可以立即为50个表生成50个过程从Oracle导出数据。检查此链接Generate PL/SQL Procedure to export data into CSV

jm2pwxwz

jm2pwxwz2#

您可以尝试以下步骤。
1.编写一个循环来获取表名
1.使用游标从每个表中获取数据
1.使用.UTL_FILE实用程序以任何所需格式将数据写入文件。
这是一个非常高层次的解决方案。但我相信它会工作。

gc0ot86w

gc0ot86w3#

我设法动态地通过所有表,并获得列名和写入一个文件。我挣扎到部分如何从表中动态获取数据行时,执行即时查询?我应该如何保存数据行,然后获取它并写入文件?下面是代码:

DECLARE p_table        VARCHAR2 (100);
l_file UTL_FILE.FILE_TYPE;
l_string       VARCHAR2 (10000);
query_string   VARCHAR2 (4000);
BEGIN
FOR tab IN (SELECT *
             FROM dba_tables
            WHERE owner = 'XYZ' AND table_name LIKE 'XYZ%')
LOOP
  p_table := tab.table_name;

  l_file :=
     UTL_FILE.FOPEN ('my_path',
                     tab.table_name || '.txt',
                     'w',
                     10000);
  l_string := NULL;

  FOR col_he IN (SELECT *
                   FROM dba_tab_columns
                  WHERE owner = 'DWHCO' AND table_name = p_table)
  LOOP
     CASE
        WHEN l_string IS NULL
        THEN
           l_string := col_he.column_name;
        ELSE
           l_string := l_string || ',' || col_he.column_name;
     END CASE;
  END LOOP;

  UTL_FILE.PUT_LINE (l_file, l_string);            --Printng table columns

  query_string := 'select ' || l_string || ' from DWHCO.' || p_table      
  --Execute immediate query_string into ??????????;
        --??????
  UTL_FILE.FCLOSE (l_file);  END LOOP;END;

字符串

bxpogfeg

bxpogfeg4#

Data Dump过程有助于以编程方式将许多表导出为CSV等简单格式。
首先,使用上面的链接安装软件包。下面的代码创建一个目录,循环遍历表,并将每个表导出为CSV。

create or replace directory temp_dir as 'C:\temp';

begin
    for tables in
    (
        select
            owner||'_'||table_name||'.csv' file_name,
            'select * from "'||owner||'"."'||table_name||'"' v_sql
        from dba_tables
        where owner = 'XYZ'
            and table_name like 'XYZ%'
        order by 1
    ) loop
        data_dump
        (
            query_in        => tables.v_sql,
            file_in         => tables.file_name,
            directory_in    => 'TEMP_DIR',
            delimiter_in    => ',',
            header_row_in   => true
        );
    end loop;
end;
/

字符串

相关问题