2015-11-06 4 views
1

Итак, я пытаюсь заполнить таблицу датами с 1 января 1960 года по декабрь 2020 года. Я попробовал написать запрос, но я совершенно новый для 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. PL/SQL больше используется, когда вы делаете что-то, что вы не можете сделать с 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

Смежные вопросы