暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle DBMS_SCHEDULER作业只插入行一次

askTom 2017-03-01
300

问题描述

我已经使用dbms_scheduler创建了一个作业。以下是我创建计划,程序和作业的代码:

begin
dbms_scheduler.create_schedule (
  Schedule_Name => 'test_schedule1',
  Repeat_interval => 'FREQ=MINUTELY; INTERVAL=2',
  Comments  => 'This is test schedule which will run every 2 minutes'
);
end;

begin
dbms_scheduler.create_program
(program_name => 'test_program1',
Program_type => 'STORED_PROCEDURE',
Program_action => 'update_table',
Enabled => TRUE,
Comments => 'This creates a program.');
end;

begin
dbms_scheduler.create_job
(Job_name => 'test_job1',
Program_name => 'test_program1',
Schedule_name => 'test_schedule1',
Enabled => TRUE,
Comments => 'This test job');
end;
复制


下面是我的 “更新表” 过程:
create or replace procedure update_table
is
begin
insert into psft_gal_data(emplid, first_name, last_name, created_dt, flag, updated_dt, update_flag)
SELECT emplid, first_name, last_name, created_dt, flag, updated_dt, update_flag FROM psft_gal_data@mssql_dblink
WHERE updated_dt NOT IN
    (SELECT updated_dt 
     FROM psft_gal_data);
end;
复制


在此过程中,我将从远程数据库 “psft_gal_data @ mssql_dblink” 中的另一个表插入表 “psft_gal_data” 中的新记录,其中mssql_dblink是我们已设置的异构数据库链接。当远程数据库更新新记录时,将使用此过程在我的表中复制其他记录。

如果我运行此过程,它会完成在我的表中插入新记录的所需任务。

当我运行此作业时,作业会更新,并且新记录仅在第一次添加到我们的表中。

按照计划2分钟后,该作业已成功运行,但未在我的表中添加新记录。检查了远程数据库,并观察到其中存在新记录。

作业每2分钟运行一次,但不添加新记录。

验证作业是否运行成功:

select * from ALL_SCHEDULER_JOB_RUN_DETAILS where job_name='TEST_JOB1';
复制


LOG_ID LOG_DATE所有者作业 _name作业 _subname状态错误 # REQ_START_DATE ACTUAL_START_DATE RUN_DURATION INSTANCE_ID SESSION_ID SLAVE_PID cpu_二手凭据 _ 所有者凭据 _ 名称目的地 _ 所有者目的地附加 _ 信息错误输出二进制 _ 错误二进制 _ 输出
21550 01-3月17日上午11.29.30.497000000 05:30 WANOC1测试工作1成功0 01-3月17日上午11.29.30.103000000亚洲/加尔各答01-3月17日上午11.29.30.180000000亚洲/加尔各答0 0:0.0 1 138,38398 14360 0 0:0.0
21554 01-3月17日上午11.31.34.283000000 05:30 WANOC1测试工作1成功0 01-3月17日上午11.31.30.103000000亚洲/加尔各答01-3月17日上午11.31.34.087000000亚洲/加尔各答0 0:0.0 1 138,36115 18952 0 0:0.02
21556 01-MAR-17 11.33.30.308000000 AM 05:30 WANOC1测试工作1成功0 01-MAR-17 11.33.30.000000000 AM亚洲/加尔各答01-MAR-17 11.33.30.082000000 AM亚洲/加尔各答0 0:0.0 1 138,41199 15692 0:0.02
21560 01-MAR-17 11.35.30.420000000 AM 05:30 WANOC1测试工作1成功0 01-MAR-17 11.35.30.000000000 AM亚洲/加尔各答01-MAR-17 11.35.30.081000000 AM亚洲/加尔各答0 0:0.0 1 138,40382 28076 0:0.02

请检查并建议为什么即使作业成功执行,也没有使用新记录更新表。

谢谢你。

专家解答

您的查询有一个不在,这打开了几个可能性:

SELECT emplid, first_name, last_name, created_dt, flag, updated_dt, update_flag FROM psft_gal_data@mssql_dblink
WHERE updated_dt NOT IN
    (SELECT updated_dt 
     FROM psft_gal_data)
复制


-任何行的update_dt是否为NULL?

如果是这样,你不会得到任何结果:

https://asktom.oracle.com/pls/apex/f?p=100:11:0::NO::P11_QUESTION_ID:442029737684

-如果没有,您确定您还没有在表中获得updated_dt的值吗?即您存储的日期时间包括小时,分钟和秒。不是午夜 (00:00:00)?
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论