0

据我所知,我可以在不使用 CURSOR 的情况下在 PL/SQL 中进行更新。例如:

CREATE OR REPLACE PROCEDURE update_my_table (id NUMBER)
AS
   ...
BEGIN
   ...
   UPDATE my_table SET column=NULL WHERE my_id = id;
   ...
END

我猜只有当你想获取更新的行时才需要游标,对吗?

4

1 回答 1

1

Oracle 在后台使用游标进行更新和选择,这超出了您的要求。但是不,您不必在可见的显式或隐式游标中选择要更新的行。

不过,您甚至不必使用光标来选择行。你可以做一个select ... into

CREATE ... AS
    my_row my_table%rowtype;
BEGIN
    select * into my_row from my_table where my_id = id;
    -- do something with the row data
    dbms_output.put_line(my_row.my_col);
END;

或者,您可以将单个列选择到单独的变量中,而不是选择到rowtype变量中。但是您必须从查询中准确获取一行(或一行的列);如果没有匹配,你会得到一个no data found错误,如果超过一个,那么too many rows. 您还可以在 PL/SQL 表中选择多行并在那里操作数据,但仍然没有可见游标。

但是,如果您想选择更新行,您可能确实需要一个带有select ... for update子句的游标,然后update ... where current of ...防止其他人修改 和 之间的select数据update

无论您是更新一行还是数百万行,您现在所拥有的简单更新将是最有效的方式。

于 2013-05-18T23:12:02.777 回答