SAK 図書館
ASP VB Script oo4o + SQL 応用編6 oo4o 更新 - CreateSql
oo4o は、Oracle RDBMS でみ使用可能です。 ■CreateSql での更新 ・CreateSql でもバインド変数を使用した更新ができる。 ■session("OraSQLStmt") メソッド session("OraSQLStmt").Refresh (リクエリ) Set session("OraSQLStmt") = Nothing (session("OraSQLStmt") 破棄) ■session("OraSQLStmt") プロパティ session("OraSQLStmt").RecordCount (処理件数) ■CreateSql 定数 Public Const ORASQL_DEFAULT = &H0 Public Const ORASQL_NO_AUTOBIND = &H1 Public Const ORASQL_FAILEXEC = &H2 ■現実的なコード例 <%@ Language=VBScript %> <% '======================================================================= ' 準備 '======================================================================= Public Const ORADB_DEFAULT = &H0 Public Const ORASQL_DEFAULT = &H0 Public Const ORASQL_NO_AUTOBIND = &H1 Public Const ORASQL_FAILEXEC = &H2 Public Const ORAPARM_INPUT = 1 Public Const ORAPARM_OUTPUT = 2 Public Const ORAPARM_BOTH = 3 Public Const ORATYPE_VARCHAR2 = 1 Public Const ORATYPE_NUMBER = 2 Public Const ORATYPE_SINT = 3 Public Const ORATYPE_FLOAT = 4 Public Const ORATYPE_STRING = 5 Public Const ORATYPE_VARCHAR = 9 Public Const ORATYPE_DATE = 12 Public Const ORATYPE_UINT = 68 Public Const ORATYPE_CHAR = 96 Public Const ORATYPE_CHARZ = 97 Public Const ORATYPE_CURSOR = 102 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 '** SQL 作成 if isobject(session("OraSQLStmt")) = false then Set session("OraSQLStmt") = session("OraDatabase").CreateSql("insert into sak.テストm " _ & "(キー, データ1, データ2, データ3) values " _ & "(:キー, :データ1, :データ2, :データ3)", ORASQL_DEFAULT) if session("OraDatabase").LastServerErr = 1008 then session("OraDatabase").LastServerErrReset if err <> 0 or session("OraDatabase").LastServerErr <> 0 then response.write("<P>SQL 作成に失敗しました。<BR>" _ & err & ": " & error & "<BR>" _ & "oo4o: " & session("OraDatabase").LastServerErrText & "</P>") end if end if '** パラメタ追加 session("OraDatabase").LastServerErrReset if isempty(session("Pkey")) then session("OraDatabase").Parameters.Add "キー", 0, ORAPARM_INPUT session("OraDatabase").Parameters("キー").ServerType = ORATYPE_CHAR set session("Pkey") = session("OraDatabase").Parameters("キー") end if if isempty(session("Pdata1")) then session("OraDatabase").Parameters.Add "データ1", 0, ORAPARM_INPUT session("OraDatabase").Parameters("データ1").ServerType = ORATYPE_NUMBER set session("Pdata1") = session("OraDatabase").Parameters("データ1") end if if isempty(session("Pdata2")) then session("OraDatabase").Parameters.Add "データ2", 0, ORAPARM_INPUT session("OraDatabase").Parameters("データ2").ServerType = ORATYPE_NUMBER set session("Pdata2") = session("OraDatabase").Parameters("データ2") end if if isempty(session("Pdata3")) then session("OraDatabase").Parameters.Add "データ3", 0, ORAPARM_INPUT session("OraDatabase").Parameters("データ3").ServerType = ORATYPE_NUMBER set session("Pdata3") = session("OraDatabase").Parameters("データ3") end if if err <> 0 or session("OraDatabase").LastServerErr <> 0 then response.write("<P>パラメタ追加に失敗しました。<BR>" _ & err & ": " & error & "<BR>" _ & "oo4o: " & session("OraDatabase").LastServerErrText & "</P>") 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("Pkey").Value = "a001" session("Pdata1").Value = 10 session("Pdata2").Value = 20 session("Pdata3").Value = 30 session("OraSQLStmt").Refresh 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("Pkey").Value = "b002" session("Pdata1").Value = 100 session("Pdata2").Value = 200 session("Pdata3").Value = 300 session("OraSQLStmt").Refresh 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 %> ■説明 ・if session("OraDatabase").LastServerErr = 1008 then session("OraDatabase").LastServerErrReset は、SQL を作るだけに使用した CreateSQL のバインドエラーをリセット。 先にパラメタを追加するとエラーにならないが、SQL が実行されてしまう。 ・CreateSql の session("OraSQLStmt") は、isempty() が set 後も true で ある。従って、if isobject(session("OraSQLStmt")) = false then で、 初期創成を判定している。 ■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 編資料