繁体   English   中英

如何在 oracle 12c 中创建导出表作业

[英]how to create a export table job in oracle 12c

我想创建一个导出表作业,但我不明白为什么它不起作用。

我的桌子是部门

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');

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM