2011-12-12 3 views
6


Dinamik olarak bir zaman damgası plsql değişkenini artırmak için bir noktada ihtiyacım var.
Yani, yerine bunu yapmanın:Zaman damgasına dinamik olarak aralık eklemek nasıl?

timestamp_ := timestamp_ + INTERVAL '1' DAY; 

böyle thomething yapmak istiyorum: Gerçekten çalışmıyor

timestamp_ := timestamp_ + INTERVAL days_ DAY; 

. Son hedefim, çoğu zaman çalıştırılacak olan tek bir tane oluşturmaktan kaçınmak için değişken bir son kullanma tarihine sahip bazı varlıklar için dinamik olarak bazı zamanlama işleri oluşturmaktır. Eğer

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

miktar temkinli olacağını istedikleri gibi

cevap

12

Oldukça süresi dolan satırları temizlemek için periyodik çalışır bir işten daha zamanlayıcı binlerce iş oluşturma içerir bir mimari hakkında Ancak duyulur. Tek bir iş, yönetmek ve denetlemek için çok daha kolay bir iştir.

+0

için teşekkür ederiz olduğunu Cevap! Bu işlerle ilgili tavsiye alacağım. – 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

bu deneyin:

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; 

Çıktı olacaktır:
Geçerli Tarih 25 Şubat-16 eksi 1 gün (ler) 'dir 24 Şubat-16