PLSQL填充一个表,其中包含两个日期内的所有日期

时间:2015-11-06 02:27:54

标签: oracle plsql

所以我试图填写1960年1月1日到2020年12月的日期表。我尝试写一个查询但是我对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;

非常感谢任何帮助。

1 个答案:

答案 0 :(得分: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'

更新:

您可以使用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;