【问题标题】:Scheduling a query to run on a schedule that exports a CSV in SQL Developer调度查询以在 SQL Developer 中导出 CSV 的调度运行
【发布时间】:2019-07-29 12:06:52
【问题描述】:

早上好,

我对 SQL 相当陌生,我已经在互联网上搜索了试图找到解决我的问题的方法,但无济于事。我已经尝试通过 SQL Developer 界面创建过程、作业、程序、凭据和时间表,并按照我能找到的关于该主题的每篇文章的指示对其进行修改,但我似乎无法使其正常工作。

我想从周一到周五的 0600 到 1700 每 30 分钟运行一次以下 SQL 脚本,以便它每 30 分钟导出一个 CSV 文件。

当我在 SQL 开发人员中执行脚本时,它会查询数据库并按预期保存文件,但无论我尝试多少次让它按计划工作,我似乎都无法正确.

提前感谢您的帮助!

SPOOL C:\Users\X\Documents\SQL\Uploads\X.CSV
SET SQLFORMAT CSV


    SELECT

    NAME_OF_PERSON

    FROM DATABASE;

【问题讨论】:

    标签: sql oracle oracle-sqldeveloper oracle12c


    【解决方案1】:

    您还可以将 SQLcl 与 Oracle 12c 一起使用。

    1) 使用您的假脱机设置、导出位置和 sql 命令创建 .sql 文件

    2) 使用 SQLcl 命令创建一个 .bat 文件:

    '>>cd C:\oracle\product\64bit_12.1.0.2client\sqldeveloper\sqldeveloper\bin  <--or wherever your sql.exe file is-->
    
    '>>SQL username/password@server:port/pid @C:/users/.../myjob.sql
    

    3) 在 Windows 任务计划程序中创建一个基本作业以触发 .bat 文件

    【讨论】:

      【解决方案2】:

      在低于 12c 的版本中,Oracle 的 DBMS_JOB 和/或 DBMS_SCHEDULER 将安排存储过程的执行。它可以创建一个文件,但您必须使用UTL_FILE 包来执行此操作,而不是SPOOL

      当您使用 Oracle 12c 时,它的 DBMS_SCHEDULER 现在提供了一种新的作业类型 - SQL_SCRIPT,它允许您安排一个 .SQL 脚本。这意味着您发布的代码应存储为文件。我无法在我的 11gXE 上创建示例,但这里有一个指向 ORACLE-BASE 站点的链接:https://oracle-base.com/articles/12c/scheduler-enhancements-12cr1 和从中复制的脚本,其中显示了如何执行此操作:

      CONN test/test@pdb1
      
      -- Create a job with a SQL*Plus script defined in-line,
      -- including an explicit connect.
      SET SERVEROUTPUT ON
      DECLARE
        l_job_name VARCHAR2(30);
        l_script   VARCHAR2(32767);
      BEGIN
        l_job_name := DBMS_SCHEDULER.generate_job_name;
        DBMS_OUTPUT.put_line('JOB_NAME=' || l_job_name);
      
        -- Notice the explicit database connection in the script.
        l_script := 'CONN test/test@pdb1
      SPOOL /tmp/test.lst
      SELECT SYSDATE, USER FROM dual;
      SPOOL OFF';
      
        DBMS_SCHEDULER.create_job(
          job_name        => l_job_name,
          job_type        => 'SQL_SCRIPT',
          job_action      => l_script,
          credential_name => 'oracle_ol6_121',
          enabled         => TRUE
        );
      END;
      /
      

      或者,您可以使用操作系统的调度程序(MS Windows 上的任务调度程序)并告诉它运行一个 .BAT 脚本,该脚本将建立 SQL*Plus 连接并运行一个包含SPOOL 命令的 .SQL 脚本,并且SELECT 声明。

      忘了说:我不会让 SQL Developer 参与其中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-11
        • 2021-08-09
        相关资源
        最近更新 更多