SAK 図書館

SAK Streets メインストリート 図書館・カフェ 一覧 SAK Streets 検索
| VB | SQL | Perl | PHP | ASP | JSP | C | PC | HP | FAQ | フリーソフト |

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 編資料
| VB | SQL | Perl | PHP | ASP | JSP | C | PC | HP | FAQ | フリーソフト |

SAK Streets メインストリート 図書館・カフェ 一覧 SAK Streets 検索



Copyright (C) 1999-2024 Y.SAK