AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 3587
Accepted
tgxiii
tgxiii
Asked: 2011-07-01 07:48:40 +0800 CST2011-07-01 07:48:40 +0800 CST 2011-07-01 07:48:40 +0800 CST

Oracle - 自动导出/卸载数据

  • 772

Oracle SQL Developer 可以选择将查询结果的内容导出为各种格式(CSV/固定宽度/Excel/XML)。有没有办法让它自动化?

如果没有,有哪些免费工具可以让我自动导出为 SQL Developer 能够导出的相同格式?

oracle export
  • 2 2 个回答
  • 24049 Views

2 个回答

  • Voted
  1. Best Answer
    Kerri Shotts
    2011-07-03T10:28:45+08:002011-07-03T10:28:45+08:00

    有许多方法可以从 Oracle 导出数据并自动执行功能。不过,请务必准确了解数据导出的用途。如果是用于系统间的互操作,则以您的接收系统可以理解的格式导出。如果是出于备份目的,请使用 exp/expdp(数据泵)方法,因为数据库备份需要存储的不仅仅是数据。(更好的是,只使用 RMAN。但我知道许多 DBA 也喜欢定期进行完整的数据库导出。)

    您可以使用多种工具来完成此操作,TOAD 就是您想到的工具。它有一个强大的数据导出工具,支持调度。有一个免费版本,但我不确定它是否具有调度功能。不过值得一试。

    或者,使用您已经可以使用的工具:SQL*PLUS、PL/SQL 和 cron(如果您运行 Windows,则使用 Windows 调度程序)。有关如何编写将表导出到 CSV 文件的 PL/SQL 例程的一个很好的示例,请参见http://asktom.oracle.com/pls/asktom/f?p=100:11:0:::: p11_question_id:88212348059。如果你使用一个过程,你可以从 Oracle 自己的作业调度器中调度它。

    您也可以纯粹使用 SQL*PLUS 来做类似的事情(无需编写过程),但它不够灵活,但对于您想要的,它可能正是您所需要的。SQL*PLUS 也很容易编写脚本,因此您可以随时通过 cron/Windows 调度程序调用它。

    SQL*PLUS 本身可以很好地创建良好的固定宽度报告,但也可以创建 HTML 和 CSV。XML 可能需要某种程序,但我不是这里的出口,所以 SQL*PLUS 在这里可能并不完美(不过,它会输出到 HTML,所以这可能已经足够好了)。如果导出到 Excel,请记住当前版本使用 XML 作为其文件格式,这使事情变得容易(以一种方式)但在其他方式(例如需要事先知道输出文件中将有多少行) )。

    无论如何,通过一些工作和两个或三个工具的组合,您应该能够按照您想要的任何时间表以您希望的任何格式导出数据。

    希望有帮助。

    • 8
  2. Serge
    2012-01-20T17:11:08+08:002012-01-20T17:11:08+08:00
    /** **/
    DECLARE
       lfFilelog UTL_FILE.FILE_TYPE;
    
       lspath varchar2(50) := 'c:\';
       lsfile varchar2(50) := 'file';
    BEGIN
       lfFilelog := UTL_FILE.FOPEN(lspath,lsfile||'.txt','w');
    
       FOR r IN (SELECT FROM table) LOOP
          UTL_FILE.PUT_LINE(lfFilelog ,r.row);
       END LOOP;
    
       UTL_FILE.FCLOSE_ALL;
    EXCEPTION
       WHEN UTL_FILE.INVALID_OPERATION THEN
          UTL_FILE.PUT_LINE(lfFilelog,SQLERRM);
          UTL_FILE.PUT_LINE(lfFilelog,' Invalid File open Operation');
          UTL_FILE.FCLOSE_ALL;
          RAISE_APPLICATION_ERROR(-20051,'Invalid File open Operation');
    
       WHEN UTL_FILE.INVALID_FILEHANDLE THEN
          UTL_FILE.PUT_LINE(lfFilelog,SQLERRM);
          UTL_FILE.PUT_LINE(lfFilelog,' Invalid File Name');
          UTL_FILE.FCLOSE_ALL;
          RAISE_APPLICATION_ERROR(-20052,'Invalid File Name');
    
       WHEN UTL_FILE.READ_ERROR THEN
          UTL_FILE.PUT_LINE(lfFilelog,SQLERRM);
          UTL_FILE.PUT_LINE(lfFilelog,' Read Error');
          UTL_FILE.FCLOSE_ALL;
          RAISE_APPLICATION_ERROR(-20053,'Read Error');
    
       WHEN OTHERS THEN
          UTL_FILE.PUT_LINE(lfFilelog,SQLERRM);
          UTL_FILE.FCLOSE_ALL;
          DBMS_OUTPUT.PUT_LINE(SQLERRM);
          ROLLBACK;
    END;
    
    • -1

相关问题

  • Oracle 中的数据库备份 - 导出数据库还是使用其他工具?

  • ORDER BY 使用文本列的自定义优先级

  • 舒服的sqlplus界面?[关闭]

  • 如何在数据库中找到最新的 SQL 语句?

  • 如何使用正则表达式查询名称?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    您如何显示在 Oracle 数据库上执行的 SQL?

    • 2 个回答
  • Marko Smith

    如何选择每组的第一行?

    • 6 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    我可以查看在 SQL Server 数据库上运行的历史查询吗?

    • 6 个回答
  • Marko Smith

    如何在 PostgreSQL 中使用 currval() 来获取最后插入的 id?

    • 10 个回答
  • Marko Smith

    如何在 Mac OS X 上运行 psql?

    • 11 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Marko Smith

    将数组参数传递给存储过程

    • 12 个回答
  • Martin Hope
    Manuel Leduc PostgreSQL 多列唯一约束和 NULL 值 2011-12-28 01:10:21 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Stuart Blackler 什么时候应该将主键声明为非聚集的? 2011-11-11 13:31:59 +0800 CST
  • Martin Hope
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    BrunoLM Guid vs INT - 哪个更好作为主键? 2011-01-05 23:46:34 +0800 CST
  • Martin Hope
    bernd_k 什么时候应该使用唯一约束而不是唯一索引? 2011-01-05 02:32:27 +0800 CST
  • Martin Hope
    Patrick 如何优化大型数据库的 mysqldump? 2011-01-04 13:13:48 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve