【问题标题】:how to create a export table job in oracle 12c如何在 oracle 12c 中创建导出表作业
【发布时间】:2022-01-15 18:49:00
【问题描述】:

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

我的桌子是部门

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. 执行任务

谢谢

【问题讨论】:

    标签: oracle plsql oracle12c dbms-scheduler


    【解决方案1】:

    我按照下面的步骤,成功了……

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

    【讨论】:

      【解决方案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 点重复。

      【讨论】:

        猜你喜欢
        • 2019-03-17
        • 2020-02-23
        • 2018-06-24
        • 2010-11-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-25
        • 1970-01-01
        相关资源
        最近更新 更多