Массовый сбор пропусков Вставка на большие столы - PullRequest
0 голосов
/ 23 ноября 2018

У меня есть процедура, из которой я вставляю в 6 таблиц, используя BULK COLLECT.Это работает на основе интервала дат.Процедура вставляется в 3 таблицы, но пропускает вставку на 3 больших таблицы.Моя процедура такова:

CREATE OR REPLACE PROCEDURE MULTI_INSERT 
IS

--Variable for rowtype (I assigned only one for all tables, because they have same construction - size and columns - just different names)
TYPE aa IS TABLE OF Table1%ROWTYPE INDEX BY PLS_INTEGER;
my_insert aa;

--Dates
first_day DATE;
this_day DATE := SYSDATE;

--Variable for deleting tables & checking if table has rows
No_of_records NUMBER; 
Delete_tables VARCHAR(5):=  to_char(SYSDATE, 'dd.mm');

BEGIN

--Delete tables in January
IF Delete_tables = '10.01' THEN

EXECUTE IMMEDIATE 'TRUNCATE TABLE Table1';
EXECUTE IMMEDIATE 'TRUNCATE TABLE Table2';
EXECUTE IMMEDIATE 'TRUNCATE TABLE Table3';
EXECUTE IMMEDIATE 'TRUNCATE TABLE Table4';
EXECUTE IMMEDIATE 'TRUNCATE TABLE Table5';
EXECUTE IMMEDIATE 'TRUNCATE TABLE Table6';

END IF;

BEGIN --Insert of 1st table

--check number of records - function
 No_of_records :=empty_table('Table1');

  IF No_of_records = 1 then

      SELECT MAX(DATUM) +1 into first_day FROM Table1;
  ELSIF No_of_records = 0 then

     SELECT TRUNC(SYSDATE,'YEAR') "First Day" INTO first_day FROM Dual ;
  END IF;

SELECT... --queries are different in each BEGIN END block !

FORALL i IN 1..my_insert.LAST
INSERT INTO Table1  (Name,Surname,Address,Join_Year,Start_Date)
VALUES(my_insert(i).Name,my_insert(i).Surname,my_insert(i).Address,my_insert(i).join_Year,my_insert(i).Start_Date);

COMMIT;
END;

BEGIN

--...And so on...Same code, just different queries for inserts into different tables...

COMMIT;
END;

END MULTI_INSERT;
/

Что может быть причиной пропуска вставок?... Как вы, наверное, заметили, я не присваиваю null my_insert после каждой вставки, но я читал, что BULK COLLECT делает это автоматически перед извлечением данных.И я также написал BEGIN END блок для каждой вставки, с желанием не останавливать другие вставки, если одна из них выходит из строя (но я не совсем уверен, если это так).

...