今日、相変わらずの糞プログラムを解析していたわけですが
どうにもこうにも稚拙で嫌になりました
でもまぁ、明日は我が身ということで、お勉強
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";
って感じで () の関係をわかりやすく書くべきなんですが
(個人的にはもう少しインデントを多様するんですが、あくまでも例ということで)
もう、ソース全体直しちまおうかという欲求を抑えるのが大変でした
人にそう思われないプログラムを組みたい