【Oracle】そう言えばそんな機能があったわね

f:id:kisokoji:20170209184353j:plain

データベースなんてみんな同じでしょ?

プログラマにとってデータベースなんてどれも同じでしょと思ってたりします。

プログラマに求められていることは、データベースにデータを格納し、検索しをするくらい。

それでも面接のときに「Oracleのバージョンは?」と聞かれます。

バージョン必要?

バージョンでSELECT文が変わったことはこの20年来ないのですが、変わるのでしょうか?

SQL Serverが一番多かったしぃ〜

そう、思い起こせば、私が使ったデータベースソフトと言えば、SQLServerくらい。そのくらいこじんまりとした環境での開発が多かったってことです。

自分でテーブル作って、Index張ってとか自由に出来るようなそんな感じですね。

さて、Oracleがある現場というのはたいがい、ちゃんとした現場です。

私ごときが勝手にテーブル作るだ、Indexだなんて容易に出来るわけもない。だからバージョンなんて意識するわけもないわけです。

ひどいところ?というかちゃんとしたところは、SELECT文さえも書きません。

必要なテーブルとフィールドと検索条件を所定の形式で渡したら、返してくれます。

そんなところでは技術は伸びません。

だから小さくて、フレームワーク?何それ?的にガシガシコードを直ガキしている現場が好きです。

今のところも会社規模は大きいですが、伏魔殿のようなコードが転がってます。

ASP.netだから15年前くらいにホスト系とかのシステムを移行したのか、新規で作ったのかはわかりませんが、同じテーブル構造のIndexキーなのに、型が違う。

UNIONで繋いだら、型が一致しないって。

何が?ってかなり謎めいたものがありました。

え?テーブル変えただけでフィールドあるよね?

そう、フィールドがありませんじゃない。

キーの型が違うなんてあり得ないことがあって、それを教えてくれようとしてくれる人間もいなくて、半日くらい悩みました。

型が違う・・・最悪です。

検索でも片方はnumberなのにもう一方はVarchar2。キャラ変換をしなきゃです。

GridViewに表示。一片に全部を取り出さなきゃです。しかも、CSVにも書き出すしで日付のフォーマット変換やら金額のフォーマット変換やら。

Nullの場合は怒られるし。

SQLServerだとConvert?まぁこんなのあまりないからSELECTで頑張ることはそうそうないか。

ってことで、CASE文やらDECODE文やらを記憶の片隅から呼び戻しました。

今日になってまた問題。そのキーで紐付いてる別テーブルの金額を下2桁で抽出して下2桁以外でグループ化して合計を出せとな。

実は見落としてました。

めんどくさって瞬間的に思ったのか、ほんとに忘れてて設計書書いてて、「あれ?Sumだって。してないけど」って。

そこからまぁ自分のSQL文が悪かったのでしょうが、レスが戻ってこない。。。

何を間違えてる???

ちょっとご相談して、ひらめいた。

で、うまくいったと思ったら、1対他だわ。でSumしたらだめじゃん。。。

これは全然出てこなくてまたご相談。

だったらDISTINCTしたら。

そうよ。そんな便利機能がOracleにはあるのよ。

ってことでSELECTテーブルの中にまたSELECTテーブルを作って終了〜。

うーん、いつの時代にやったんだろう?