首页 > 解决方案 > 如何在plsql中搜索30分钟间隔?

问题描述

我想编写一个看起来特定表的 PL/SQL 作业,并将一些适合某些条件的特定条目插入到另一个表中。

在特定列中,我的意思是,在状态列中可能有“正在进行”。我想搜索这些包含“正在进行”条目的列,sysdate 之间的时间间隔最多为 1 小时。

我有这个代码,

begin
    SYS.DBMS_JOB.CHANGE
      ( job        => 121313
       ,what       =>  q'#
                          DECLARE
                            v_say         NUMBER;
                          BEGIN
                            select rowid, a.* 
                            from project_situation a 
                            WHERE a.STATUS like '%ONGOING%' 
                              and (a.CREATION_DATE) >= '?????' 
                            order by a.creation_date desc;

                            COMMIT;  
                          END;                   
                       #'
       ,next_date  =>  TRUNC(SYSDATE + 1) + 7/24
       ,interval   => 'TRUNC(SYSDATE + 1) + 7/24'
    );
    commit;    
end;
/

表中可能有很多条目。我想获取创建时间大于 1 小时的条目。创建时间格式为 '22/09/2018 11:52:20'

我也想每 30 分钟运行一次这项工作。

标签: sqldatabaseoracleplsql

解决方案


为了获得更好的性能,请使用以下代码计算 1 小时

PERSISTED_DATE<SYSDATE-60/1440. 

其中 PERSISTED_DATE 是您的日期列 60 是分钟数。60/1440 是 1 小时时间。

对于您的示例,假设您已经给出了表和列以下代码应该获取您所需的结果

select rowid, a.* from project_situation a 
         WHERE a.STATUS like '%ONGOING%' 
                and a.CREATION_DATE< SYSDATE-60/1440';

如果您有固定状态而不是使用 = 而不是 like'%status%' 运算符。


推荐阅读