我需要在某些時候動態增加一個時間戳plsql變量。
所以,與其這樣:如何動態添加時間間隔到時間戳?
timestamp_ := timestamp_ + INTERVAL '1' DAY;
我想這樣做thomething這樣的:
timestamp_ := timestamp_ + INTERVAL days_ DAY;
它並沒有真正的工作。 我的最終目標是爲一些具有變量過期日期的實體動態創建一些調度程序作業,以避免創建一個經常執行的單個作業。
我需要在某些時候動態增加一個時間戳plsql變量。
所以,與其這樣:如何動態添加時間間隔到時間戳?
timestamp_ := timestamp_ + INTERVAL '1' DAY;
我想這樣做thomething這樣的:
timestamp_ := timestamp_ + INTERVAL days_ DAY;
它並沒有真正的工作。 我的最終目標是爲一些具有變量過期日期的實體動態創建一些調度程序作業,以避免創建一個經常執行的單個作業。
這聽起來像你想
timestamp_ := timestamp + numtodsinterval(days_, 'day');
我會有些拘謹,但是,關於涉及創建數千個就業機會的調度,而不是定期運行,以清除過期行一個作業的架構。單一的工作對於管理和監督來說更容易。
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;
=============================
試試這個:
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天(s)爲24 FEB-16
謝謝你的回答!我會就這些工作提出建議。 – Michael