Skip to content

Instantly share code, notes, and snippets.

@fornext1119
Created June 1, 2012 06:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fornext1119/2849484 to your computer and use it in GitHub Desktop.
Save fornext1119/2849484 to your computer and use it in GitHub Desktop.
VBScriptでフォルダ内のSQLを読んで実行結果をTAB区切りファイルに出力する
Option Explicit
Private fs
Private conn
'結果出力
Private Sub writeResult(rs, sqlFile)
'上書きか、追加書き込みか
Dim mode: mode = "2" '2:ForWriting
If WScript.Arguments.Count > 2 Then
If WScript.Arguments(2) = "1" Then
mode = "8" '8:ForAppend
End If
End If
'出力フォルダ
Dim outFolder: outFolder = WScript.Arguments(1)
If Right(outFolder, 1) <> "\" Then
outFolder = outFolder & "\"
End If
'出力ファイル
Dim tsv: Set tsv = fs.OpenTextFile(outFolder & Replace(UCase(sqlFile.Name), ".SQL", ".tsv"), mode, True)
'項目名 出力
Dim iCol
If mode = "2" Then '2:ForWriting
For iCol = 1 To rs.Fields.Count
tsv.Write rs.Fields(iCol - 1).Name & vbTab
Next
End If
tsv.WriteLine
'値 出力
Do Until rs.EOF
For iCol = 1 To rs.Fields.Count
tsv.Write rs.Fields(iCol - 1).Value & vbTab
Next
tsv.WriteLine
rs.MoveNext
Loop
tsv.Close
Set tsv = Nothing
End Sub
'SQL 読み込み
Private Function getSql(sqlFile)
' WScript.Echo sqlFile.Path
WScript.Echo sqlFile.Name
Dim tsSql: Set tsSql = fs.OpenTextFile(sqlFile.Path)
Dim sqlText: sqlText = tsSql.ReadAll
' WScript.Echo sqlText
tsSql.Close
Set tsSql = Nothing
getSql = sqlText
End Function
'SQL 実行
Private Function openRecordSet(sqlText)
Dim rs: Set rs = CreateObject("ADODB.Recordset")
With rs
.ActiveConnection = conn
.CursorType = 0 'adOpenForwardOnly
.LockType = 1 'adLockReadOnly
.Source = sqlText
.Open
End With
Set openRecordSet = rs
End Function
'DB接続
Private Sub openDB()
Set conn = CreateObject("ADODB.Connection")
conn.Open "aaa","bbb","ccc"
End Sub
'DB切断
Private Sub closeDB()
conn.Close
Set conn = Nothing
End Sub
'主処理
Private Sub Main()
Set fs = CreateObject("Scripting.FileSystemObject")
'DB接続
openDB
'指定フォルダ内の全SQLファイルに対して処理を繰り返す
Dim sqlFolder: Set sqlFolder = fs.GetFolder(WScript.Arguments(0))
Dim sqlFile
For Each sqlFile In sqlFolder.Files
'SQL 読み込み
Dim sqlText: sqlText = getSql(sqlFile)
'SQL 実行
Dim rs: Set rs = openRecordSet(sqlText)
'結果出力
Call writeResult(rs, sqlFile)
rs.Close
Set rs = Nothing
Next
Set sqlFile = Nothing
Set sqlFolder = Nothing
'DB切断
closeDB
Set fs = Nothing
End Sub
'主処理 呼び出し
Call Main()
'実行形式
'cscript //nologo OracleToTsv.vbs "c:\sql_folder" "c:\result\"
'cscript //nologo OracleToTsv.vbs "c:\sql_folder" "c:\result\" 1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment