PLSQLでFETCH INTOとFORALL文を使って複数行を1回で処理する
FETCH INTOを使うと結果セットのレコード数を変数に一括で代入することができます。
FETCH カーソル名 BULK COLLECT INTO 変数名 (LIMIT 1000);
「LIMIT レコード数」と指定することができます。これはセレクト結果が10000件だった場合、1000件ずつフェッチするという意味です。省略することも可能です。
LIMIT句を指定する場合はFOR文でループする必要があります。
OPEN カーソル名; LOOP FETCH カーソル名 BULK COLLECT INTO 変数名 LIMIT 1000; ~ EXIT WHEN カーソル名%NOTFOUND; END LOOP;
このようにFETCH INTOを使うと10000件あるデータを1000件ずつ処理したりすることができ、非常に便利です。
このFOR文の中でFORALLすることにより、1000件ずつ処理することができます。
OPEN カーソル名; LOOP FETCH カーソル名 BULK COLLECT INTO 変数名 LIMIT 1000; FORALL i IN 1..変数名.COUNT UPDATE テーブル名 SET カラム名1 = 変数名(i).フィールド名1 WHERE カラム名2 = 変数名(i).フィールド名2; COMMIT; EXIT WHEN カーソル名%NOTFOUND; END LOOP;
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント