SQLログ+引数→SQL生成エクセルマクロ
Javaのspringで開発していると、実行したSQLをコンソールで確認することができます。これは、プリペアドステートメントを利用していて、SQLと引数が分離されログ(コンソール)に出力されるからです。ですが、このSQLをそのまま、実行することはできず、SQLと引数をミックスする必要があります。このミックスする作業が面倒で、これを効率化するために、以下のマクロを作成しました。これを共有したいと思います。
エクセルのイメージ
A1にSQL、A2に引数、A5にミックスしたSQL(期待するもの)です。G9~G14までは、SQLと引数を解析するための情報です。ボタン1に次項のエクセルマクロを紐づけします。G14は、SQLの引数を「’」で囲む必要がある場合、設定してください。Timestampを設定して正しく動作するのかは、未検証です。最低、Stringは必要ですよね。これは引数の後の文字「5(Integer)」と一致するかどうかを確認するためのものです。
エクセルマクロ
コメントが少ないかもしれませんが、雰囲気で解読して自身の思うように修正してみてください。変数の名前をつけるセンスほんまないわー(ごめんちゃい)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
Sub makesql() Dim org_sql As String Dim org_param As String org_sql = Cells(1, 1).Value org_param = Cells(2, 1).Value Dim divid_sql As String Dim divid_param As String Dim divid_one_param As String Dim divid_remove_str As String Dim replace_str As String Dim str_moji_part As String Dim str_moji As Variant divid_sql = Cells(9, 7).Value divid_param = Cells(10, 7).Value divid_one_param = Cells(11, 7).Value divid_remove_str = Cells(12, 7).Value replace_str = Cells(13, 7).Value str_moji_part = Cells(14, 7).Value str_moji = Split(str_moji_part, divid_one_param) Dim w_sql As String Dim w_param As String w_sql = Mid(org_sql, InStr(org_sql, divid_sql) + Len(divid_sql)) w_param = Mid(org_param, InStr(org_param, divid_param) + Len(divid_param)) 'SQLのパラメータの配列化 Dim w_params As Variant w_params = Split(w_param, divid_one_param) 'SQLのパラメータを置換していく For i = LBound(w_params) To UBound(w_params) Dim w_one_param As Variant w_one_param = w_params(i) Dim varResult As Variant Dim strTarget As String strTarget = Mid(w_one_param, InStrRev(w_one_param, divid_remove_str)) varResult = Filter(str_moji, strTarget) If UBound(varResult) <> -1 Then w_sql = Replace(w_sql, replace_str, "'" & Mid(w_one_param, 1, InStrRev(w_one_param, divid_remove_str) - 1) & "'", 1, 1) Else w_sql = Replace(w_sql, replace_str, Mid(w_one_param, 1, InStrRev(w_one_param, divid_remove_str) - 1), 1, 1) End If Next i Cells(5, 1).Value = w_sql & ";" End Sub |
まとめ
ちょっとしたツールですが、insertや検索条件の多いselectなど引数が多いSQLをそのまま実行したい時、非常にありがたいツールになると思います。作成したエクエルをダウンロードできる様にしようと思いましたがセキュリティー的によろしくないと思いコードを張り付けました。自身で張り付けたりして作成してみてください。それでは!!