私が見る限り、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
更新された行のフェッチを実行したい場合にのみカーソルが必要だと思いますよね?
私が見る限り、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
更新された行のフェッチを実行したい場合にのみカーソルが必要だと思いますよね?
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 update
句update ... where current of ...
を含むカーソルが必要であり、他の誰かがselect
と の間でデータを変更するのを防ぐ必要がありupdate
ます。
更新する行が 1 行であろうと何百万行であろうと、今のような簡単な更新が最も効率的な方法です。