我有以下脚本
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
。我在这里做错了什么?
答案 0 :(得分:1)
为什么你首先使用那个循环?它减慢了速度并在服务器上创建了不必要的资源消耗。
整个PL / SQL脚本可以用一个语句替换:
INSERT INTO new_table
(col1, col2)
SELECT col1, col2
FROM table1;
要从table1仅复制200行,请使用以下命令:
INSERT INTO new_table
(col1, col2)
SELECT col1, col2
FROM table1
WHERE rownum < 200;
请注意,这并不能保证复制哪些行,因为SELECT语句可以按任何顺序返回行。如果您需要200个特定行,则需要按顺序应用订单。