2015-11-06 76 views
1

所以我試圖用從1960年1月1日到2020年12月的日期填充一張表。我嘗試了一個查詢,但是我對plsql很陌生,我害怕我必須搞砸了,因爲這什麼都不做。PLSQL在兩個日期內填充所有日期的表

DECLARE 
    start_date DATE; 
    end_date DATE; 
BEGIN 
    start_date := '01-jan-1960'; 
    end_date := '31-dec-2020'; 

    LOOP 
     INSERT INTO samp VALUES(start_date); 
     start_date := start_date + 1; 
     EXIT WHEN start_date = end_date; 
    END LOOP; 
END; 

任何幫助將不勝感激。

回答

0

PL/SQL是在這種情況下,完全沒有必要,使用簡單的命令:

INSERT INTO samp (start_date) 
SELECT DATE'1959-12-31' + LEVEL "DATE" FROM DUAL CONNECT BY LEVEL <= DATE'2020-12-31' - DATE'1959-12-31' 

UPDATE:

你可以使用SQL數據多得多。當你做一些你無法用SQL做的事情時,PL/SQL更多的被使用,通常只是控制SQL命令的流程。

無論如何,你的實現幾乎沒有問題。

DECLARE 
    start_date DATE; 
    end_date DATE; 
BEGIN 
    start_date := DATE'1960-01-01'; -- Don't rely on implicit conversion! 
    end_date := DATE'2020-12-31'; 

    LOOP 
     INSERT INTO samp /* add column list here */ VALUES (start_date); 
     start_date := start_date + 1; 
     EXIT WHEN start_date = end_date + 1; -- last date should be included 
    END LOOP; 
END; 
+0

其實有沒有辦法用plsql來做到這一點?我還需要用數據做其他事情。 – user3059052

相關問題