この書き方の目的は、更新対象の行が存在しなかった場合に自動的に行を追加して、集計更新の処理を継続する事です。 一回目の UPDATE でもし対象行が無ければ、暗黙のカーソルによって条件が設定されるので、INSERT 文で初期レコードを作成してループ処理でもう一度 UPDATE 文が実行されます。その場合は必ず対象行が存在するので、初回の集計がなされた後、ループを抜ける事になります。 もし、既に行が存在する場合は UPDATE 後には即ループを抜けます
LOOP UPDATE 集計用テーブル SET "現物数量" = "現物数量" - PM_数量, "更新日" = sysdate WHERE "組織" = V組織 AND "大分類" = V大分類 AND "商品コード" = V商品コード; IF SQL%NOTFOUND THEN INSERT INTO 集計用テーブル VALUES (V組織,V大分類,V商品コード,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,NULL,NULL,NULL,NULL,NULL,NULL,sysdate,NULL,sysdate,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0); ELSE EXIT; END IF; END LOOP;
|
【Oracle : PL/SQLの最新記事】
- PL/SQL : 最も簡単な CSV 出力 の記述
- PL/SQL : Function と Procedure の簡単なサンプル
- Oracle : PL/SQL Function の使用方法
- Oracle : PL/SQL : SELECT 〜 INTO 構文の一般的な使用方法
- Oracle : PL/SQL : カーソルを使った一般的なループ処理を行うプロシージャ
- Oracle : PL/SQL : Function のサンプルと使い方
- PL/SQL : OUT タイプのパラメータを持つストアードプロシージャの処理
- PL/SQL : プロシージャの呼び出し
- PL/SQL : Function 雛形