Oracle SQL Developer可以选择将查询结果的内容导出为各种格式(CSV/固定宽度/Excel/XML)。有什么办法让它自动化吗?
如果没有,有哪些免费工具可以让我自动化导出到SQL Developer能够导出到的相同格式?
发布于 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作为它们的文件格式,这使得事情变得简单(在某种程度上),而在其他方面则很痛苦(比如需要事先知道输出文件中有多少行)。
不管怎么说,只要做一点点工作,再加上两个或三个工具的组合,您就应该能够按照您想要的任何时间表以任何格式导出数据。
希望这能帮上忙。
发布于 2012-01-20 01:11:08
/** **/
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;https://dba.stackexchange.com/questions/3587
复制相似问题