Oracleの全テーブルをCSV形式のテキストに出力するvbs。
使うときは★の箇所を書き換えること。
また、データ量の多いテーブルにアクセスする場合は注意すること
(テーブル名でのフィルタの機能などをうまく活用すること)
Option Explicit '******************************************************** '接続先 Dim conUser Dim conPass Dim conStr Dim sFilter conUser="hoge_user" 'ユーザ★ conPass="hoge_pass" 'パスワード★ conStr="tns_hoge" 'TNS★ sFilter="tbl_hoge" 'テーブル名のフィルタ★ '出力先パス★ Dim outPath outPath ="P:\OUTPUT" 'メイン処理開始 Call Main() '******************************************************** Sub Main() On Error Resume Next Dim objFso Dim objFile Dim i Dim sVal Dim sColumnsql Dim sColumn Dim rsTab Dim rsCol Dim rs Dim connect Set connect = CreateObject("ADODB.Connection") '******************************************************** ' 接続 '******************************************************** WScript.Echo "OracleDB 接続開始" connect.Open "Driver={Microsoft ODBC for Oracle};" & _ "CONNECTSTRING=" & conStr & "; UID=" & conUser & "; PWD=" & conPass & ";" If Err.Number <> 0 Then WScript.Echo Err.Number WScript.Echo Err.Source WScript.Echo Err.Description WScript.Quit(-1) End If WScript.Echo "OracleDB 検索開始" '******************************************************** ' テーブル一覧取得 '******************************************************** Set rsTab = connect.Execute("select * from USER_TABLES WHERE TABLE_NAME LIKE '" & sFilter & "%' ") If Err.Number <> 0 Then WScript.Echo Err.Number WScript.Echo Err.Source WScript.Echo Err.Description WScript.Quit(-1) End If Do Until rsTab.Eof = True '******************************************************** ' カラム一覧を取得 '******************************************************** sColumnsql = " " sColumnsql = sColumnsql & " select COLUMN_NAME" sColumnsql = sColumnsql & " from USER_TAB_COLUMNS" sColumnsql = sColumnsql & " where TABLE_NAME = '" & TRIM(rsTab("TABLE_NAME").value) & "'" sColumnsql = sColumnsql & " and DATA_TYPE NOT LIKE 'TIMESTAMP%'" '--タイムスタンプ型はADODBがサポートしてないでこける sColumnsql = sColumnsql & " order by COLUMN_ID" Set rsCol = connect.Execute(sColumnsql) If Err.Number <> 0 Then WScript.Echo Err.Number WScript.Echo Err.Source WScript.Echo Err.Description WScript.Quit(-1) End If sColumn = "" Do Until rsCol.Eof = True 'SELECT句のカラムを取得 sColumn = sColumn & rsCol("COLUMN_NAME").VALUE & "," rsCol.MoveNext Loop '最後のカンマを除去 sColumn = LEFT(sColumn,Len(sColumn)-1) rsCol.Close Set rsCol = Nothing '******************************************************** ' テーブルのデータ取得 '******************************************************** Set rs = connect.Execute(" select " & sColumn & " from " & TRIM(rsTab("TABLE_NAME").value) & "") If Err.Number <> 0 Then WScript.Echo Err.Number WScript.Echo Err.Source WScript.Echo Err.Description WScript.Quit(-1) End If 'テキストファイルオープン Set objFso = CreateObject("Scripting.FileSystemObject") Set objFile = objFso.OpenTextFile(outPath & "\" & TRIM(rsTab("TABLE_NAME").value) & ".txt", 2, True) '******************************************************** ' テーブルのデータをテキストに出力 '******************************************************** Do Until rs.Eof = True sVal ="" 'フィールドの数ループ For i = 0 to rs.fields.count -1 sVal = sVal & rs(i).value & "," Next 'テキスト出力 objFile.writeline sVal rs.MoveNext Loop rs.Close Set rs = Nothing 'テキストファイルクローズ objFile.Close Set objFile = Nothing Set objFso = Nothing rsTab.MoveNext Loop '******************************************************** ' 切断 '******************************************************** rsTab.Close Set rsTab = Nothing WScript.Echo "OracleDB 切断" connect.Close Set connect = Nothing End Sub
動作確認環境:Oracle 10g