在PL / SQL中使用UPDATE游标

时间:2013-05-18 22:35:57

标签: oracle cursor sql-update sqlplus

据我所知,我可以在不使用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

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

1 个答案:

答案 0 :(得分: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表中选择多行并在那里操作数据,但仍然没有可见光标。

但是,如果要选择更新行,您可能需要使用游标with a select ... for update clause, and then update ... where current of ...来阻止其他人修改select和{之间的数据{1}}。

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