如何在 oracle 12c 中创建导出表作业
Posted
技术标签:
【中文标题】如何在 oracle 12c 中创建导出表作业【英文标题】:how to create a export table job in oracle 12c 【发布时间】:2022-01-15 18:49:00 【问题描述】:我想创建一个导出表作业,但我不明白为什么它不起作用。
我的桌子是部门
create table department (id number, name varchar2(200));
我想在每天晚上 9:00 导出一个 csv 文件。我需要创建它。
我只知道: 0.创建目录
-
创建一个
PROCEDURE
创建一个DBMS_SCHEDULER.CREATE_PROGRAM
创建一个DBMS_SCHEDULER.CREATE_SCHEDULE
创建一个DBMS_SCHEDULER.CREATE_JOB
执行任务
谢谢
【问题讨论】:
【参考方案1】:我按照下面的步骤,成功了……
-
创建目录(导出文件的路径):
CREATE OR REPLACE DIRECTORY CSVDIR AS 'D:\';
-
创建过程:
Create Or Replace Procedure exp_emp_data Is
today varchar2(200);
fileName varchar2(200);
n_file utl_file.file_type;
v_string Varchar2(4000);
Cursor c_emp Is
Select
id, name
From
department;
Begin
select to_char(sysdate,'yyyymmdd','nls_calendar=persian') into today from dual;
fileName := 'empdata' || today || '.csv';
n_file := utl_file.fopen('CSVDIR', fileName, 'w', 4000);
v_string := 'ID, Name';
utl_file.put_line(n_file, v_string);
-- open the cursor and concatenate fields using comma
For cur In c_emp Loop
v_string := cur.id
|| ','
|| cur.name;
-- write each row
utl_file.put_line(n_file, v_string);
End Loop;
-- close the file
utl_file.fclose(n_file);
Exception
When Others Then
-- on error, close the file if open
If utl_file.is_open(n_file) Then
utl_file.fclose(n_file);
End If;
End;
/
-------- Test
Begin
exp_emp_data;
End;
/
-
创建程序:
BEGIN
DBMS_SCHEDULER.CREATE_PROGRAM (
program_name => 'PROG_EXPORT_TABLE',
program_action => 'exp_emp_data',
program_type => 'STORED_PROCEDURE');
END;
/
-
创建工作:
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name => 'JOB_EXPORT_TABLE',
job_type => 'STORED_PROCEDURE',
job_action => 'PROG_EXPORT_TABLE',
start_date => '16-nov-2021 11:50:00 pm',
repeat_interval => 'FREQ=DAILY;BYHOUR=23;BYMINUTE=59',
enabled => true
);
END;
/
-
并启用它:
exec dbms_scheduler.enable('JOB_EXPORT_TABLE');
【讨论】:
【参考方案2】:是的,您可以通过这种方式创建使用DBMS_SCHEDULER
DECLARE
v_job_name VARCHAR2(32) := 'jb_exp_emp_data';
BEGIN
DBMS_SCHEDULER.CREATE_JOB(job_name => v_job_name,
job_type => 'STORED_PROCEDURE',
job_action => 'exp_emp_data',
start_date => TO_DATE('11-12-2021 21:00:10',
'DD-MM-YYYY HH24:MI:SS'),
repeat_interval => 'FREQ=DAILY; BYHOUR=21;',
auto_drop => false,
comments => 'Exports the content of the department table every day at 9:00PM o''clock ');
DBMS_SCHEDULER.ENABLE(v_job_name);
END;
/
从 start_date
参数定义的时间开始,然后在未来的每个未来几天晚上 9 点重复。
【讨论】:
以上是关于如何在 oracle 12c 中创建导出表作业的主要内容,如果未能解决你的问题,请参考以下文章