2015-11-06 51 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

相关问题