如何在 Oracle 12c 中创建导出 table 作业
how to create a export table job in oracle 12c
我想创建导出 table 作业,但我不明白为什么它不起作用。
我的table是部门
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
- 执行任务
谢谢
是的,可以这样创建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 点重复。
我按照下面的步骤操作成功了...
- 创建目录(导出文件路径):
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');
我想创建导出 table 作业,但我不明白为什么它不起作用。
我的table是部门
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
- 执行任务
谢谢
是的,可以这样创建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 点重复。
我按照下面的步骤操作成功了...
- 创建目录(导出文件路径):
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');