書き方 | 江木町の牛舎

江木町の牛舎

~ 田舎者プログラマの日常 ~

今日、相変わらずの糞プログラムを解析していたわけですが
どうにもこうにも稚拙で嫌になりました

でもまぁ、明日は我が身ということで、お勉強

SwingでJDBCでOracle

今回に限れば SQL 文の書き方なんですが
必ずしも SQL 文にかぎらず、コーディングの考え方関わるので
全般テーマにしてみました

プログラムで SQL 文を記述する際、
条件により SQL 文を変形させることはよくあることですが
個人的には , や and や or は行頭に書くことにしています
行末に書く人はなぜなんだろう?といつも疑問に思います

まぁ、好みなんでしょうけど

同じ事は Java でいえば、 + で文字列を結合する場合にも当てはまります
なんで + を行末に書く人がいるんだろうと疑問に思います

それはさておき、今回の件ですが

サブクエリを使用する場合、()で閉じて見やすくするなんてのはよくある手ですが
そこから発展して条件文を分岐させるとか、まぁ、色々と改定し続けると
悲惨な状況になったりします

単純な例だと

SELECT * FROM (SELECT * FROM DUAL) WHERE 1=1

としましょうか

今日、嫌になったのはこのようなSQL文を

String wsql = "SELECT * FROM(";

wsql = wsql + "SELECT *";

wsql = wsql + " FROM DUAL"
+ ") WHERE 1=1";

みたいな感じで、その ( はどこで閉じてるんだよ? 的なものでした

この例だと () 1組みですが、多様すればいくつでも増える () の組み合わせ

メンテナンスを考えれば

String wsql = "SELECT *"
+ " FROM DUAL";

wsql = "SELECT *"
+ " FROM ("
+ wsql
+ ") WHERE 1=1";

って感じで () の関係をわかりやすく書くべきなんですが
(個人的にはもう少しインデントを多様するんですが、あくまでも例ということで)
もう、ソース全体直しちまおうかという欲求を抑えるのが大変でした

人にそう思われないプログラムを組みたい