小さい頃はエラ呼吸

いつのまにやら肺で呼吸をしています。


【初心者向け】VBScriptからOracle Databaseを操作する方法

はじめに

VBScriptからOracle Databaseに接続して、データの操作(insert、update、select、delete)をやってみました。

10日でおぼえる Oracle11g入門教室(DVD付)
井上 賢一郎
翔泳社
売り上げランキング: 228,266

Oracle Databaseに接続する

はじめに、VBScriptからODBCドライバを使ってOracle Databaseに接続するには以下のようなコードを書きます。
CONNECTSTRINGはお使いの環境に合わせて変更する必要があります。Oracle 11g XEであれば、XEを指定します。UIDとPWDには、接続権限のあるユーザ名とパスワードを指定します。

Option Explicit

Call Main()
Sub Main()
  On Error Resume Next

  Dim connect
  Set connect = CreateObject("ADODB.Connection")
  WScript.Echo "OracleDB 接続開始"
  connect.Open "Driver={Microsoft ODBC for Oracle};" & _
              "CONNECTSTRING=XE; UID=xxx; PWD=yyy;"
  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 切断"
  connect.Close
  Set connect = Nothing
End Sub

ユーザ名やパスワードが誤っている場合、以下のエラーが発生します。

-2147217843
Microsoft OLE DB Provider for ODBC Drivers
[Microsoft][ODBC driver for Oracle][Oracle]ORA-01017: invalid username/password;logon denied

接続文字列が誤っている場合、以下のエラーが発生します。

-2147467259
Microsoft OLE DB Provider for ODBC Drivers
[Microsoft][ODBC driver for Oracle][Oracle]ORA-12154: TNS:could not resolve the connect identifier specified

Oracle Databaseにデータを挿入する

データを挿入するには、connect.Execute関数の引数にSQLのinsert文を渡します。

Option Explicit

Call Main()
Sub Main()
  On Error Resume Next

  Dim connect
  Set connect = CreateObject("ADODB.Connection")

  WScript.Echo "OracleDB 接続開始"
  connect.Open "Driver={Microsoft ODBC for Oracle};" & _
              "CONNECTSTRING=XE; UID=xxx; PWD=yyy;"
  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 挿入開始"
  Dim sql
  sql = "INSERT INTO TABLE01 (ID, NAME, FURIGANA) VALUES (1, '山田 太郎', 'やまだ たろう')"
  connect.Execute sql
  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 切断"
  connect.Close
  Set connect = Nothing
End Sub

主キーの項目に同じ値を格納しようとした場合は、以下のエラーが発生します。

-2147217900
Microsoft OLE DB Provider for ODBC Drivers
[Microsoft][ODBC driver for Oracle][Oracle]ORA-00001: 一意制約(xxx.SYS_C007089)に反しています

Oracle Databaseのデータを更新する

Insertと同じような感じで、SQLをUpdate文にします。

Option Explicit

Call Main()
Sub Main()
  On Error Resume Next

  Dim connect
  Set connect = CreateObject("ADODB.Connection")
  WScript.Echo "OracleDB 接続開始"
  connect.Open "Driver={Microsoft ODBC for Oracle};" & _
              "CONNECTSTRING=XE; UID=xxx; PWD=yyy;"
  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 更新開始"
  Dim sql2
  sql2 = "UPDATE TABLE01 SET NAME = '山田 太朗' WHERE NAME = '山田 太郎'"
  connect.Execute sql2
  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 切断"
  connect.Close
  Set connect = Nothing
End Sub
Oracle Databaseを検索する

select文を発行して、戻ってきたレコードセットがEOFになるまで、ぐるぐるとループ処理をします。

Option Explicit

Call Main()
Sub Main()
  On Error Resume Next

  Dim connect
  Set connect = CreateObject("ADODB.Connection")
  WScript.Echo "OracleDB 接続開始"
  connect.Open "Driver={Microsoft ODBC for Oracle};" & _
              "CONNECTSTRING=XE; UID=xxx; PWD=yyy;"
  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 検索開始"
  Dim rs
  Set rs = connect.Execute("select * from TABLE01")
  If Err.Number <> 0 Then
    WScript.Echo Err.Number
    WScript.Echo Err.Source
    WScript.Echo Err.Description
    WScript.Quit(-1)
  End If
  Do Until rs.Eof = True
    WScript.echo "ID:" & rs("ID") & "  名前:" & rs("NAME") & "ふりがな:" & rs("FURIGANA")
    rs.MoveNext
  Loop
  rs.Close
  Set rs = Nothing
              
  WScript.Echo "OracleDB 切断"
  connect.Close
  Set connect = Nothing
End Sub

テーブルが見つからないときは、以下のエラーが発生します。

-2147217865
Microsoft OLE DB Provider for ODBC Drivers
[Microsoft][ODBC driver for Oracle][Oracle]ORA-00942: 表またはビューが存在しません。

Oracle Databaseからデータを削除する

Delete文を発行して任意のデータを削除します。

Option Explicit

Call Main()
Sub Main()
  On Error Resume Next

  Dim connect
  Set connect = CreateObject("ADODB.Connection")
  WScript.Echo "OracleDB 接続開始"
  connect.Open "Driver={Microsoft ODBC for Oracle};" & _
              "CONNECTSTRING=XE; UID=xxx; PWD=yyy;"
  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 削除開始"
  Dim sql
  sql = "Delete FROM TABLE01"
  connect.Execute sql
  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 切断"
  connect.Close
  Set connect = Nothing
End Sub
おわりに

ODBCドライバを使うとSQLServerと同じ感覚でOracleが使えます。ただし、ODBC接続はとても遅いので、実運用で使う場合は性能面での考慮が必要だと思います。