Мой вопрос заключается в том, как oracle обрабатывает транзакцию INSERT перед выполнением команды COMMIT.
Во время выполнения транзакции INSERT оракул будет ждать, пока я не вставлю все свои записи в эту процедуру, а затем, когда я выполню инструкцию COMMIT, будут ли записи сохранены в последовательности для этой транзакции?
В следующем коде первой вставкой является количество строк (метаданных), а затем курсор зацикливается и начинает вставлять фактические данные.
Существует ли возможность, что в одной транзакции, когда я вызываю эту процедуру, сначала вставляется моя запись метаданных, а затем вставляются некоторые другие данные (не относящиеся к этой транзакции), а затем остальные мои данные. Таким образом, первая запись и остальные записи из цикла не вставляются в последовательность.
-- This code belongs to proecdure when ever a user clicks on insert
-- button from the front end form
DECLARE
rowcnt NUMBER;
CURSOR c_get_employ IS
SELECT EMP.EMPLOYER_ID, EMP.EMPLOYER_NAME, EMP.EMPLOYER_LOCATION
FROM EMP
WHERE EMP.EMPLOYER_COUNTRY = 'USA'
ORDER BY EMP.EMPLOYER_ID;
BEGIN
Select count(*)
INTO rowcnt
FROM EMP
WHERE EMP.EMPLOYER_COUNTRY = 'USA'
ORDER BY EMP.EMPLOYER_ID;
-- I want to insert the 'number of employee records' that will be inserted (metadata)
INSERT INTO EMP_OUTPUT
(EMPID, EMPNAME, EMPLOC, ECOUNT)
VALUES
(,,,rowcnt);
-- Then loop through the cursor and start inserting the data
FOR c_post_employ IN c_get_employ LOOP
INSERT INTO EMP_OUTPUT
(EMPID, EMPNAME, EMPLOC)
VALUES
(c_post_employ.EMPLOYER_ID,c_post_employ.EMPLOYER_NAME,c_post_employ.EMPLOYER_LOCATION);
END LOOP;
COMMIT;
END;