是否有可能使用任何PL / SQL过程将具有数百万条记录的单个架构中的大约300个表中的数据导出到CSV或TXT?
您提出什么建议,这是最快的方法?目前,我不需要将这些导出的文件导入任何其他架构...
我尝试用Toad手动逐表导出...
答案 0 :(得分:0)
您可以尝试执行以下步骤。
这是一个非常高级的解决方案。但是我确信它会起作用。
答案 1 :(得分:0)
我创建了一个实用程序,您可以通过该实用程序生成PL / SQL过程以从表中导出数据。它将采用以下参数,表名称,列名称,目录名称和定界符。您可以立即为50个表生成50个过程,以从Oracle导出数据。检查此链接Generate PL/SQL Procedure to export data into CSV
答案 2 :(得分:0)
我设法动态遍历所有表并获取列名并写入文件。我在努力执行即时查询时如何动态地从表中获取数据行?我应该如何保存数据行,而不是读取并写入文件? 这是代码:
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;
答案 3 :(得分:0)
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;
/