0

私が見る限り、CURSOR を使用せずに PL/SQL で UPDATE を作成できます。例えば:

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。ただし、クエリから正確に 1 行 (または 1 行分の列) を取得する必要があります。一致するものがない場合はno data foundエラーが発生し、複数ある場合はtoo many rows. 複数の行を選択して PL/SQL テーブルに入れ、そこでカーソルを表示せずにデータを操作することもできます。

ただし、行を選択して更新する場合は、select ... for updateupdate ... where current of ...を含むカーソルが必要であり、他の誰かがselectと の間でデータを変更するのを防ぐ必要がありupdateます。

更新する行が 1 行であろうと何百万行であろうと、今のような簡単な更新が最も効率的な方法です。

于 2013-05-18T23:12:02.777 に答える