Скрипт Oracle Bulk Collection для вставки данных
У меня есть следующий скрипт
DECLARE
CURSOR cursor1 IS
SELECT *
FROM table1;
TYPE cursor_aat IS TABLE OF cursor1%ROWTYPE;
l_cursor cursor_aat;
BEGIN
OPEN cursor1;
LOOP
FETCH cursor1
BULK COLLECT INTO l_cursor LIMIT 200;
FOR INDX IN 1 .. l_cursor.COUNT LOOP
INSERT INTO new_table
(col1, col2)
values
(l_cursor(INDX).col1, l_cursor(INDX).col2);
END LOOP;
EXIT WHEN l_cursor.COUNT < 200;
END LOOP;
END;
Но он жалуется, что не признает l_cursor(INDX).col1
, Что я здесь не так делаю?
1 ответ
Почему вы используете этот цикл в первую очередь? Это замедляет работу и создает ненужное потребление ресурсов на сервере.
Весь скрипт PL/SQL можно заменить одним оператором:
INSERT INTO new_table
(col1, col2)
SELECT col1, col2
FROM table1;
Чтобы скопировать только 200 строк из таблицы1, используйте следующее:
INSERT INTO new_table
(col1, col2)
SELECT col1, col2
FROM table1
WHERE rownum < 200;
Обратите внимание, что это не гарантирует, какие строки копируются, поскольку строки могут быть возвращены в любом порядке оператором SELECT. Если вы хотите 200 конкретных строк, вам нужно применить порядок по.