Oracle 在PL/SQL中使用更新游标

Oracle 在PL/SQL中使用更新游标,oracle,cursor,sql-update,sqlplus,Oracle,Cursor,Sql Update,Sqlplus,就我所见,我可以在PL/SQL中进行更新,而无需使用游标。 例如: CREATE OR REPLACE PROCEDURE update_my_table (id NUMBER) AS ... BEGIN ... UPDATE my_table SET column=NULL WHERE my_id = id; ... END 我猜只有在您想要获取更新的行时才需要游标,对吗?Oracle在引擎盖下使用游标进行更新和选择,这比您要求的要多一些。但是,不必在可见的显式或隐式

就我所见,我可以在PL/SQL中进行更新,而无需使用游标。 例如:

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

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

Oracle在引擎盖下使用游标进行更新和选择,这比您要求的要多一些。但是,不必在可见的显式或隐式光标中选择要更新的行

不过,您甚至不必使用光标来选择行。您可以执行以下操作:

或者,您可以将各个列选择到单独的变量中,而不是选择到
rowtype
变量中。但是您必须从查询中精确地获得一行(或相当于一行的列);如果没有匹配项,则会出现
未找到数据
错误,如果有多行,则
行太多
。您还可以在PL/SQL表中选择多行,并在没有可见光标的情况下操作其中的数据

但是,如果要选择并更新行,可能需要一个光标,以防止其他人修改
select
update
之间的数据


无论是更新一行还是数百万行,现在的简单更新都将是最有效的方法。

谢谢。因此,如果我理解正确的话:使用更新光标将阻止所选行,直到更新操作完成。@cortezthekiller-如果您
选择进行更新
,则行将被锁定,直到您提交或回滚事务;不管你是否真的更新了它们。
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;