【问题标题】:Oracle Scheduled Job Succeeded, but Stored Procedure isn't executedOracle 计划作业成功,但未执行存储过程
【发布时间】:2018-10-20 00:35:58
【问题描述】:

我遇到过几篇几乎和我有同样问题的帖子,但我没有找到适合我情况的答案。

我有一个存储过程,当通过 SQL Developer 手动运行时,该过程运行并成功完成,我看到更新的数据表明提交正在工作。

  • 我有一个计划每天运行的作业,而且确实如此。
  • 我可以手动运行作业,即 SQL Developer 中的匿名块 执行它。
  • 我可以“右键单击”-->“运行作业”

这些方法中的每一个都有效,并且它们在运行日志中报告“成功”状态。但是,执行时间始终是 00:00:00;并且数据库中没有数据更新。

这是我创建作业时 SQL Developer 创建的匿名块。

DBMS_SCHEDULER.CREATE_JOB (
    job_name => '"OWNER"."GSS"',
    job_type => 'STORED_PROCEDURE',
    job_action => 'OWNER.PKG_GSS.GENERATE_GSS_DATA',
    number_of_arguments => 2,
    start_date => TO_TIMESTAMP_TZ('2018-05-09 11:47:15.000000000 AMERICA/NEW_YORK','YYYY-MM-DD HH24:MI:SS.FF TZR'),
    repeat_interval => 'FREQ=DAILY;BYDAY=MON,TUE,WED,THU,FRI;BYHOUR=6',
    end_date => NULL,
    enabled => TRUE,
    auto_drop => FALSE,
    comments => '');

2个参数也设置好了,我这里没加。

任何建议将不胜感激!!!!!!

【问题讨论】:

  • 您的 GENERATE_GSS_DATA 是否启用了任何日志记录?如果有异常,是否会写入回溯信息,您可以在事后阅读?
  • 如果在执行过程中发生错误,则会记录下来。我没有回溯,只有错误消息。我已经对此进行了测试,当我自己执行该程序时它工作正常,但又一次;当作业调用该过程时,什么也没有发生。不过,我也会添加回溯。谢谢!!!
  • 我们不知道您的程序做了什么,如果有条件,根据作业的运行时环境与您的桌面/终端会话,它可能是 eval 为 false。我还会添加大量调试消息。

标签: oracle11g oracle-sqldeveloper dbms-job


【解决方案1】:

我有同样的问题,我的问题通过每天授予程序权限并重新创建作业调度程序来解决

下面是我写的程序:

create or replace PROCEDURE dist_auto_eod AS
    v_sp_code     VARCHAR2(100);
    v_count_eod   NUMBER;
    v_count_atn   NUMBER;

BEGIN
    FOR data IN (
        SELECT
            sp_code,
            company_code,
            branch_code
        FROM
            dist_login_user
        WHERE
            is_mobile = 'Y'
    ) LOOP
        BEGIN
            SELECT
                COUNT(track_type)
            INTO
                v_count_eod
            FROM
                dist_lm_location_tracking
            WHERE
                    track_type = 'EOD'
                AND
                    TO_DATE(submit_date) = trunc(SYSDATE)
                AND
                    sp_code = data.sp_code;

        END;

        BEGIN
            SELECT
                COUNT(track_type)
            INTO
                v_count_atn
            FROM
                dist_lm_location_tracking
            WHERE
                    track_type = 'ATN'
                AND
                    TO_DATE(submit_date) = trunc(SYSDATE)
                AND
                    sp_code = data.sp_code;

            IF
                v_count_eod = 0 AND v_count_atn = 1
            THEN
                INSERT INTO dist_lm_location_tracking (
                    sp_code,
                    submit_date,
                    latitude,
                    longitude,
                    track_type,
                    company_code,
                    branch_code,
                    remarks
                ) VALUES (
                    data.sp_code,
                    TO_DATE(
                        trunc(SYSDATE) || ' 07:22 PM',
                        'dd-mon-yy hh:mi AM'
                    ),
                    '',
                    '',
                    'EOD',
                    data.company_code,
                    data.branch_code,
                    'Automatic EOD'
                );

            END IF;

        END;

    END LOOP;

    COMMIT;
END;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-05
    • 2016-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-18
    • 2019-02-28
    相关资源
    最近更新 更多