SAK 図書館
ASP VB Script oo4o + SQL 応用編4 oo4o 更新 - ExecuteSQL
oo4o は、Oracle RDBMS でみ使用可能です。 ■データ更新、レコード更新 (追加、修正、削除) Public Const ORADB_DEFAULT = &H0 dim dbname dim cnuser '** oo4o 接続 dbname = "" '|_ Oracle サービス名(別名)" cnuser = "SAK/SAK" '| |_ パスワード '|_ ユーザ名 if isempty(session("OraSession")) then Set session("OraSession") = Server.CreateObject("OracleInProcServer.XOraSession") end if isempty(session("OraDatabase")) then Set session("OraDatabase") = session("OraSession").OpenDatabase(dbname, cnuser, ORADB_DEFAULT) end '** RDB 処理 session("OraSession").BeginTrans session("OraDatabase").ExecuteSQL "insert into sak.テストm values " _ & "('a001', 10, 20, 30)" session("OraSession").CommitTrans ■補足 ・以上の様に、session("OraDatabase").ExecuteSQL で、SQL 文の insert、 update、delete を発行して、全ての更新が可能となります。 尚、create や drop などの命令も発行できます。 SQL すべてが発行可能ですので、色々と試してみると良いでしょう。 ■トランザクション ・複数の session("OraDatabase").ExecuteSQL で発行したリクエストをひと つのトランザクションとして処理するには、 session("OraSession").BeginTrans (トランザクション開始) session("OraSession").CommitTrans (トランザクション終了) session("OraSession").Rollback (トランザクションキャンセル) を使用します。 ■現実的なコード例 <%@ Language=VBScript %> <% '======================================================================= ' 準備 '======================================================================= Public Const ORADB_DEFAULT = &H0 dim dbname dim cnuser '** エラートラップ開始 on error resume next '** サービス、ユーザ設定 dbname = "" cnuser = "SAK/SAK" '// Oracle サービス名(別名)、ユーザ・パスワード指定 '** oo4o 接続 if isempty(session("OraSession")) then Set session("OraSession") = Server.CreateObject("OracleInProcServer.XOraSession") if err <> 0 then response.write("<P>データベースに接続出来ません。<BR>" _ & "CreateObject - Oracle oo4o エラー</P>") end if end if if isempty(session("OraDatabase")) then Set session("OraDatabase") = session("OraSession").OpenDatabase(dbname, cnuser, ORADB_DEFAULT) if err <> 0 then response.write("<P>データベースに接続出来ません。<BR>" _ & err & ": " & error & "</P>") end if end if '** エラートラップ終了 on error goto 0 '======================================================================= ' 処理 '======================================================================= '** RDB 処理 if RdbShori() then response.write("<P>-- RDB 更新正常終了 --</P>") end if '======================================================================= ' RDB 処理 '======================================================================= function RdbShori() '** エラーセット RdbShori = FALSE '** エラートラップ開始 on error resume next '** oo4o エラーリセット session("OraDatabase").LastServerErrReset '** トランザクション開始 session("OraSession").BeginTrans '** RDB 処理1 session("OraDatabase").ExecuteSQL "insert into sak.テストm values " _ & "('a001', 10, 20, 30)" if err <> 0 or session("OraDatabase").LastServerErr <> 0 then session("OraSession").Rollback response.write("<P>RDB 更新1 に失敗しました。<BR>" _ & err & ": " & error & "<BR>" _ & "oo4o: " & session("OraDatabase").LastServerErrText & "</P>") exit function end if '** RDB 処理2 session("OraDatabase").ExecuteSQL "insert into sak.テストm values " _ & "('b002', 100, 200, 300)" if err <> 0 or session("OraDatabase").LastServerErr <> 0 then session("OraSession").Rollback response.write("<P>RDB 更新2 に失敗しました。<BR>" _ & err & ": " & error & "<BR>" _ & "oo4o: " & session("OraDatabase").LastServerErrText & "</P>") exit function end if '** トランザクション終了 session("OraSession").CommitTrans '** エラートラップ終了 on error goto 0 '** 正常セット RdbShori = TRUE end function %> ■説明 ・以上で、おわかりのように、RDB 処理1 と 2 がどちらも正常に終了した場 合のみ更新結果が本当に反映され、どちらかがエラーになったときは、 何ひとつ更新がなかった状態に戻されます。 ■ASP VB Script oo4o + SQL 応用編資料
■ASP VB Script ADO + SQL 応用編資料
■ASP VB Script 基礎実地編資料
■ASP VB Script 基礎編資料
■SQL 基礎編資料
■SQL 基礎実地編資料
■SQL チューニング編資料
■Oracle PL/SQL 編資料
■PostgreSQL 編、JAVA Servlet、JSP 編資料
■MySQL 編資料