はじめに
VBScriptからOracle Databaseに接続して、データの操作(insert、update、select、delete)をやってみました。
翔泳社
売り上げランキング: 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接続はとても遅いので、実運用で使う場合は性能面での考慮が必要だと思います。