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 編資料