如何在 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. 创建目录

  1. 创建 PROCEDURE
  2. 创建 DBMS_SCHEDULER.CREATE_PROGRAM
  3. 创建 DBMS_SCHEDULER.CREATE_SCHEDULE
  4. 创建 DBMS_SCHEDULER.CREATE_JOB
  5. 执行任务

谢谢

是的,可以这样创建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 点重复。

我按照下面的步骤操作成功了...

  1. 创建目录(导出文件路径):
    CREATE OR REPLACE DIRECTORY CSVDIR AS 'D:\';
  1. 创建过程:
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;
/
  1. 创建程序:
    BEGIN
    DBMS_SCHEDULER.CREATE_PROGRAM (
     program_name      => 'PROG_EXPORT_TABLE',
     program_action     => 'exp_emp_data',
     program_type      => 'STORED_PROCEDURE');
    END; 
    /
  1. 创建工作:
     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;
     /
  1. 并启用它:
    exec dbms_scheduler.enable('JOB_EXPORT_TABLE');