我对SQL相当陌生,我的团队负责运行需要SQL数据的每日报告。是否有办法每天使用Oracle SQL Developer自动将查询导出到csv/excel?
发布于 2022-06-28 16:27:02
本身不会将其自动化,但是有很多选项可以完成。
基本上,有些计算机需要有一个调度程序,可以唤醒它并完成工作。有些人为此使用自己的计算机,使用windows计划的任务、cron作业或第三方程序。
但是,您的计算机将运行哪些“任务”?任务基本上是连接到数据库,进行身份验证,发送查询文本,检索内存中的结果,然后将其导出为文件。很多人会为此使用python,因为它可以处理所有这些步骤。
你会注意到,我们已经有两个外部的“事情”可能会失败。(1)您的计算机,(2)您的python代码。
一个更简单的选择是oracle数据库本身。它是否总是运行在远程服务器上?如果是这样的话,你可以利用这一点,让它来做所有的工作。
您正在研究几个步骤,但我认为它们更容易(不过,您可能需要从管理员那里获得权限)。
指定文件位置-记住,这是在服务器上,而不是您的计算机上。
create or replace directory csv_dir as '/destination/for/results';创建一个存储过程-类似于您的SQL逻辑的容器。
create or replace procedure write_file is
file_handle UTL_FILE.file_type;
begin
file_handle := utl_file.fopen('CSV_DIR', 'csv_filename.csv', 'w', 32767);
for rws in (
select * from t -- your query here
) loop
utl_file.put_line(file_handle,
rws.c1 || ',' || rws.c2 || ',' || rws.c3 -- your columns here
);
end loop;
utl_file.fclose(file_handle);
end write_file;创建调度程序作业-运行存储过程。这是Oracle服务器的一个特性。
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name => 'EXPORT_CSV_J',
job_type => 'PLSQL_BLOCK',
job_action => 'begin write_file; end;',
number_of_arguments => 0,
start_date => NULL,
repeat_interval => 'FREQ=DAILY',
end_date => NULL,
enabled => FALSE,
auto_drop => FALSE);
DBMS_SCHEDULER.SET_ATTRIBUTE(
name => 'EXPORT_CSV_J',
attribute => 'logging_level',
value => DBMS_SCHEDULER.LOGGING_RUNS);
DBMS_SCHEDULER.enable(
name => 'EXPORT_CSV_J');
END;我从本网站那里借用了这段代码,因为我已经有一段时间没有这么做了。
如果由于某种原因,您的数据库实际上不是Oracle (我知道有些人使用Oracle SQL Developer,尽管他们的实际数据库有所不同),那么这些步骤将是相似的,但代码会有所不同。
https://stackoverflow.com/questions/72788963
复制相似问题