PL/SQL无法删除多行

1 oracle plsql oracle11g

我已经使用PL/SQL编写了简单的代码来删除表中的多行,但是下面的代码只会在每次触发它时删除一行.

DECLARE
    i number(2);
BEGIN
    FOR i IN 1..4 LOOP
        DELETE FROM table_name WHERE rownum = i;
        dbms_output.put_line('i is: '|| i);
    END LOOP;
END;
Run Code Online (Sandbox Code Playgroud)

有人可以建议代码有什么问题吗?

Tho*_*ner 5

ROWNUM 是第n行读.

select * from table_name where rownum = 1;
Run Code Online (Sandbox Code Playgroud)

让你获得第一排.

select * from table_name where rownum <= 2;
Run Code Online (Sandbox Code Playgroud)

获得前两行.

select * from table_name where rownum = 2;
Run Code Online (Sandbox Code Playgroud)

没有行,因为你没有阅读第一行就无法读取第二行.

这说,你必须更换

DELETE FROM table_name WHERE rownum = i;
Run Code Online (Sandbox Code Playgroud)

DELETE FROM table_name WHERE rownum = 1;
Run Code Online (Sandbox Code Playgroud)

但是你为什么要这样做呢?为什么要删除任意选择的记录?为什么要使用PL/SQL,而不仅仅是DELETE FROM table_name WHERE rownum <= 4;