2011-12-12 10 views
6


Ho bisogno ad un certo punto di incrementare dinamicamente una variabile plsql timestamp.
Così, invece di fare questo:Come aggiungere dinamicamente intervallo al timestamp?

timestamp_ := timestamp_ + INTERVAL '1' DAY; 

vorrei fare thomething in questo modo:

timestamp_ := timestamp_ + INTERVAL days_ DAY; 

E 'in realtà non funziona. Il mio obiettivo finale è creare dinamicamente alcuni processi di pianificazione per alcune entità che hanno una data di scadenza variabile, per evitare di crearne una singola che verrebbe spesso eseguita.

risposta

12

Sembra che si desidera

timestamp_ := timestamp + numtodsinterval(days_, 'day'); 

vorrei essere un po 'cauti, tuttavia, circa un'architettura che comporta la creazione di migliaia di posti di lavoro di pianificazione, piuttosto che un lavoro che viene eseguito periodicamente per cancellare le righe scaduti. Un singolo lavoro è molto più facile da gestire e supervisionare.

+0

Grazie per il risposta! Prenderò consigli riguardo a quei lavori. – Michael

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; 
============================= 
1

Prova questo:

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; 

uscita sarà:
data corrente è di 25-FEB-16 meno 1 giorni (s) è 24-FEB-16

Problemi correlati