Скрипт 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 конкретных строк, вам нужно применить порядок по.

Другие вопросы по тегам