テーブルをCSV形式にエキスポート


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