12月 262013
 

PL/SQL
で業務コードを書くという仕事があり、元々は俺の部署に仕事の依頼を流すということだったので、どうやったら運用保守も楽になるのか考えていたんだけど。結局、別部署の人たちがうんこなコードを書いて、俺にレビューを通さずに作って「ソースコードの管理をお願います」とか言ってきてる。

仕様書もコードをちら見したけどダメダメっぽいし、レビューすらしないで常に負債を作り続けるのなら、この業界引退してくれんかな。
インタビューで聞いた大雑把な要件はこんな感じ。

要件

  • 今まで各業務でバラバラだった送信先データの取得する PL/SQL をつくる
  • 仕様統一するつもりだが、部署によって違う可能性がある
    数テーブルから、A にデータが無ければ B、B に無ければ C
    というようになっているらしい。この順序が各業務によってバラバラで、且つ、何らかの条件に寄ってもテーブルの順序が変わるらしい。
  • 各業務から呼ぶ PL/SQL は一つで統一する
    各業務のデータの取得する仕様は違うが、各業務呼び出す PL/SQL
    は一つにする。

結果

ハッキリは見てないが、これを引数 9 ~ 11 個の冗長的な PL/SQL
を作ってやがった…
だれがその物凄いパターンのテストを行い、今後の保守をするんだ。

俺ならこうする

  • 各業務で共通的な仕様を決定し、その PL/SQL を作る
  • 共通仕様に則れない業務は業務固有の PL/SQL を作る
  • これらの PL/SQL をラップする PL/SQL を作る

こうすることでのメリットは次の通り。

  • 共通仕様が明確になる
  • 共通仕様から外れている業務が明確になる
  • 各 PL/SQL のバグが影響を及ぼすスコープの範囲が縮まる
  • 単体テストがやりやすい
  • 共通仕様から外れている業務が共通仕様に移る時の修正が他業務に影響を及ぼさない。逆も又然り

よーし、ちょっと久々に ORACLE やってみるかー!

sqlplus でログイン

misono 好きすぎてすみませんすみません。

共通仕様の関数を作成する

hoge 業務の関数を作成する

各関数をラップする関数を作成する

実際に試してみるとこんな感じで、hoge 業務以外は default に落ちている

12月 262013
 

SQL*Plusに次のコマンドを入力すると表示されるようになります。

ドキュメントには次の記述がありました。

SET SERVEROUTPUT ONを入力すると、次のコマンドが実行されます。
DBMS_OUTPUT.ENABLE (buffer_size => NULL);
この場合、出力に制限はありません。

ORACLE 10g R1 までは制限があったようですが、10g R2 からは制限がなくなったようです。

■参考リンク\
Oracle Database
PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス 10g
リリース2(10.2)

12月 252013
 

misono が引退らしいですよ。 あの無邪気な笑顔がテレビで見れなくなるの? 歌が聞けなくなるの? 寂しいな。

とりあえず気を取り直して、PL/SQL を試して見るためにユーザー作成から行ってみる。

sqlplus に接続。

ユーザー名「misono」、パスワード「misono」…
好きすぎてすみませんすみません!

これで PL/SQL を試す準備は整った。はず。