首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle -自动导出/卸载数据

问Oracle -自动导出/卸载数据
EN

Database Administration用户
提问于 2011-06-30 15:48:40
回答 2查看 24.3K关注 0票数 7

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

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

EN

回答 2

Database Administration用户

回答已采纳

发布于 2011-07-02 18:28:45

有许多方法可以从Oracle导出数据并使功能自动化。不过,一定要确切地了解数据导出的用途。如果是为了系统间的互操作,那么以接收系统能够理解的格式导出。如果是为了备份目的,请使用exp/expdp (数据泵)方法,因为数据库备份需要存储的不仅仅是简单的数据。(最好还是用RMAN吧。但是我知道很多DBA也喜欢定期进行完整的db导出。)

你可以使用许多工具来完成这一任务,蟾蜍是脑海中闪现出来的工具。它有一个强大的数据导出工具,支持调度。有一个免费版本可用,但我不确定它是否具有调度功能。不过值得一试。

或者,使用您可以使用的工具: SQL*PLUS、PL/SQL和cron (如果运行Windows,则使用Windows Scheduler )。有关如何编写将表导出到CSV文件的PL/SQL例程的良好示例,请参见http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::p11_问题_id:88212348059。如果使用过程,则可以通过Oracle自己的作业调度程序对其进行调度。

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

SQL*PLUS在创建良好的固定宽度报告方面非常好,但也可以使用HTML和CSV。XML可能需要某种类型的过程,但这里我不是导出程序,所以SQL*PLUS在这里可能并不完美(不过它会输出到HTML,所以这可能足够好)。如果导出到Excel,请记住当前版本使用XML作为它们的文件格式,这使得事情变得简单(在某种程度上),而在其他方面则很痛苦(比如需要事先知道输出文件中有多少行)。

不管怎么说,只要做一点点工作,再加上两个或三个工具的组合,您就应该能够按照您想要的任何时间表以任何格式导出数据。

希望这能帮上忙。

票数 8
EN

Database Administration用户

发布于 2012-01-20 01:11:08

代码语言:javascript
复制
/** **/
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
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/3587

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档