我需要在某些时候动态增加时间戳plsql变量。
所以,而不是这样做:
timestamp_ := timestamp_ + INTERVAL '1' DAY;
我想做这样的事情:
timestamp_ := timestamp_ + INTERVAL days_ DAY;
它确实不起作用。 我的最终目标是为具有可变过期日期的某些实体动态创建一些调度程序作业,以避免创建一个经常执行的实体。
答案 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