如何动态添加时间戳的时间间隔?

时间:2011-12-12 21:05:49

标签: oracle plsql


我需要在某些时候动态增加时间戳plsql变量。
所以,而不是这样做:

timestamp_ := timestamp_ + INTERVAL '1' DAY;

我想做这样的事情:

timestamp_ := timestamp_ + INTERVAL days_ DAY;

它确实不起作用。 我的最终目标是为具有可变过期日期的某些实体动态创建一些调度程序作业,以避免创建一个经常执行的实体。

3 个答案:

答案 0 :(得分:15)

这听起来像你想要的

timestamp_ := timestamp + numtodsinterval( days_, 'day' );
但是,对于一个涉及创建数千个调度程序作业而不是一个定期运行以清除过期行的作业的架构,我会有点谨慎。一份工作很容易管理和监督。

答案 1 :(得分:1)

Special note: 
1. INTERVAL YEAR TO MONTH and
2. INTERVAL DAY TO SECOND 

are the only two valid interval datatypes;

Sample Example: 
=============================
DECLARE
    l_time                       INTERVAL YEAR TO MONTH;
    l_newtime                    TIMESTAMP;
    l_year                       PLS_INTEGER := 5;
    l_month                      PLS_INTEGER := 11;
BEGIN
    --  Notes :
    --  1.  format is using "-" to connect year and month
    -- 2.  No need to mention any other keyword ;  Implicit conversion takes place to set interval

    l_time := l_year || '-' || l_month;

    DBMS_OUTPUT.put_line ( l_time );

    SELECT SYSTIMESTAMP + l_time INTO l_newtime FROM DUAL;

    DBMS_OUTPUT.put_line ( 'System Timestamp :' || SYSTIMESTAMP );
    DBMS_OUTPUT.put_line ( 'New Timestamp After Addition :' || l_newtime );
END;
=============================

答案 2 :(得分:1)

试试这个:

    DECLARE
   l_val      NUMBER;
   l_result   VARCHAR2( 20 );
BEGIN
   l_val := 1;

   SELECT SYSDATE - INTERVAL '1' DAY * l_val INTO l_result FROM DUAL;

   DBMS_OUTPUT.put_line( 'Current Date is ' || SYSDATE || ' minus ' || l_val || ' day(s) is ' || l_result );
END;

输出将是:
当前日期是25-FEB-16减去1天是24-FEB-16