0

我有以下脚本

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。我在这里做错了什么?

4

1 回答 1

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 个特定行,则需要应用 order by。

于 2012-09-19T19:13:25.503 回答