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;