PL / SQL Block Issue - PullRequest
       6

PL / SQL Block Issue

0 голосов
/ 03 марта 2020

Я пытаюсь получить данные кусками и вставить в таблицу для бизнес-требований.


declare
  i_start_date  date := date '2019-01-01'; --start date set
  i_end_date    date := date '2019-12-31'; --end date set
begin

for i_start_date<=i_end_date --condition to fetch data & insert
  (for cur_r in (select a.id, b.status
                from table1 a join table2 b on a.msg_id = b.msg_id
                where b.t_date = i_start_date
               )
  loop
    insert into test_table (id, status)
      values (cur_r.id, cur_r.status);
  end loop;)

  i_start_date+1 -- increment start date


end;
/

Не могли бы вы помочь мне исправить вышеуказанный блок?

Спасибо,

1 Ответ

5 голосов
/ 03 марта 2020

Есть некоторые проблемы с вашим кодом.

  1. вместо вместо
  2. , использующего для l oop для выполнения одиночных вставок вместо массовой вставки
  3. Увеличение +1 неправильно
  4. Другие синтаксические ошибки

Так что ваш код должен работать лучше (не проверено) при изменении на

declare
    i_start_date  date := date '2019-01-01'; --start date set
    i_end_date    date := date '2019-12-31'; --end date set
begin

    while i_start_date<=i_end_date --condition to fetch data & insert
    loop
        insert into test_table (id, status)
        select a.id, b.status
        from table1 a 
        join table2 b on a.msg_id = b.msg_id
        where b.t_date = i_start_date;
        i_start_date := i_start_date+1; -- increment start date
    end loop;
end;
/

Возможно, вам следует прочитать документацию https://docs.oracle.com/en/database/oracle/oracle-database/19/lnpls/index.html или попробуйте несколько учебных пособий.

...