2011-12-12 5 views
6


동적으로 시간 소인 plsql 변수를 늘리려면 어느 시점이 필요합니다.
그래서, 대신이 일을 :타임 스탬프에 간격을 동적으로 추가하는 방법은 무엇입니까?

timestamp_ := timestamp_ + INTERVAL '1' DAY; 

나는이 같은 thomething 할 싶습니다 : 정말 작동하지 않습니다

timestamp_ := timestamp_ + INTERVAL days_ DAY; 

. 최종 목표는 변수 만료일이있는 일부 엔티티에 대해 일부 스케줄러 작업을 동적으로 작성하여 자주 실행되는 단일 엔티티 작성을 피하는 것입니다. 당신이

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

내가 다소 신중한 것 원하는 것처럼

답변

12

그것은 오히려 만료 된 행을 취소 주기적으로 실행되는 하나의 작업보다 스케줄러 수천 개의 일자리를 만드는 작업이 포함됩니다 아키텍처에 대해, 그러나 소리. 단일 직무는 관리하고 감독하기가 훨씬 쉽습니다.

+0

가 주셔서 감사하다 대답! 나는 그 일들에 관해 조언을 구할 것이다. – 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

이 시도 :

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 월 16 일자 마이너스 일일 (들) 것은 24 2 월 16

관련 문제