Oracle(へたれな)コネタ PL/SQL

PL/SQLは奥が深いね。弊社のSQL職人が忙しかったので、久しぶりにPL/SQLのコーディングを行ないました。VBと違って、プラクティスがまとまってない感じです。これは、弊社社内でもネット上の情報でも同じですね。ベンダー独自に言語ですから仕方がない部分もありますね。また、クエリなどの作成は、通常のプログラミングに使用する考え方に加えて、集合論的な考えを必要とするため、頭がなれないとかなりつらいですね。データ関連や抽出のされ方が頭の中でイメージできるようになるのには鍛錬が必要ですね。
そこで、一度使用しても、しばらく利用しないとすぐ忘れる、基本的なTips

  • 更新対象のある列の値の条件で別のテーブルを参照して別テーブルの内容で対象行を一気に更新する。

例)

+-----------------------+         +-------------------------+ 
| テーブル:TBL更新対象 |         |テーブル:TBL更新データ  | 
+-----------------------+         +-------------------------+ 
| 更新対象列            |<--------| 更新データ              | 
| 更新条件列            |---------| 更新条件                | 
+-----------------------+      +-------------------------+
UPDATE TBL更新対象 SET 
  TBL更新対象.更新対象列 = ( 
        SELECT TBL更新データ.更新データ列 
        FROM TBL更新データ 
        WHERE TBL更新データ.更新条件列 = TBL更新対象.更新条件列); 

  • 簡単なカーソル処理(FOR文)

カーソル名のOPENやFETCHなどを自動的にやってくれますので楽チンです。
例)

DECLARE
  CURSOR cur IS 
   SELECT FIELD1, FIELD2 
  FROM REFTBL; 
BEGIN 
  FOR rec IN cur LOOP 
    IF rec.FIELD1 = xxx THEN 
     INSERT INTO TEMP VALUES( rec.FIELD2 ); 
  COMMIT; 
    END IF; 
  END LOOP; 
END;