適用対象
説明
SnapshotIDを戻します。
実行時は読取り/書込みができます。
使用方法
SnapshotID = OraDynaset.Snapshot
備考
SnapshotIDは、このダイナセットが作成されたスナップショットを示します。これはタイムスタンプのように考えられます。これを他のCreateDynasetメソッドのコールに使用して、元のダイナセットと同じ時点のデータを使用するコールを作成できます。
Snapshotプロパティには、別のSnapshot値を設定できます。この新しいスナップショットは、次回のRefresh操作時、問合せが再実行されるときに使用されます。Snapshotプロパティは、(snapshotプロパティを介して設定されたその他のSnapshotIDではなく)このOraDynasetオブジェクトが基づくSnapshotIDを常に戻します。
SnapshotIDは、実行量とデータベースの構成に従って、ある時間が経過すると無効になります。これが起こると、Snapshot too oldエラー・メッセージが戻ります。スナップショットの詳細は、『Oracle Database概要』を参照してください。
このSnapshotIDは、このダイナセットが作成された時点を示します。このSnapshotIDを使用して追加作成されたダイナセットには、その時点以降に元のダイナセットに行われた変更(Edit、DeleteおよびAddNew操作)は反映されません。
SnapshotIDオブジェクトは、SELECT文の参照する表が、DUALなどの疑似表ではなく実際のデータベース表である場合にのみ意味があります。
SnapshotIDの有効な使用目的の1つは、すべての行をフェッチするRecordCountプロパティを使用せずに、表の行数を計算することです。「例: ダイナセットの行数の計算」を参照してください。
データ型
Object
例
例: SnapShotプロパティの使用方法
この例では、SnapShotプロパティの使用方法を示します。
Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim OraDynaset1 As OraDynaset
Dim OraDynaset2 As OraDynaset
Dim SnapshotID as SnapshotID
'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")
'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)
'ALLEN's JOB is initially SALESMAN
OraDatabase.ExecuteSql("Update EMP set JOB = 'SALESMAN' where ENAME = 'ALLEN'")
'Create initial OraDynaset Object.
Set OraDynaset1 = OraDatabase.CreateDynaset("select empno, ename," & _
"job from emp", 0&)
MsgBox "OraDynaset1 -- Value of JOB is " & OraDynaset1.Fields("JOB").Value
'Change Allen's JOB
OraDatabase.ExecuteSql("Update EMP set JOB = 'CLERK' where ENAME = 'ALLEN'")
'This SnapshotID represents the point in time in which OraDynaset1 was created
Set SnapshotID = OraDynaset1.Snapshot
'Create OraDynaset2 from the same point in time as OraDynaset1
Set OraDynaset2 = OraDatabase.CreateDynaset("select JOB from EMP" & _
"where ENAME = 'ALLEN'", 0&, SnapshotID)
MsgBox "OraDynaset2 -- Value of JOB from point of time of OraDynaset1 is " & _
OraDynaset2.Fields("JOB").Value
'We set the snapshot to NULL which will get us current point in time.
OraDynaset2.Snapshot = Null
'We refresh it and it will get us the data from the current point in time
OraDynaset2.Refresh
MsgBox "OraDynaset2 -- Value of JOB from current point of time is " & _
OraDynaset2.Fields("JOB").Value
'And back again to the old point in time --
OraDynaset2.Snapshot = SnapshotID
OraDynaset2.Refresh
MsgBox "OraDynaset2 -- Value of JOB from point of time of OraDynaset1 is " & _
OraDynaset2.Fields("JOB").Value
例: ダイナセットの行数の計算
この例では、すべての行をフェッチするRecordCountプロパティを使用せずに、ダイナセットの行数を計算します。この例で戻されるレコード数にはAddNewまたはDelete操作が考慮されず、情報は、ダイナセットが作成された直後の状態であることに注意してください。
Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim OraDynaset As OraDynaset
Dim OraDynCount As OraDynaset
Dim SnapshotID as SnapshotID
'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")
'Create the OraDatabase Object by opening a connection to Oracle.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)
'Create the Dynaset
Set OraDynaset = OraDatabase.CreateDynaset("select * from emp", 0&)
Set SnapshotID = OraDynaset.Snapshot
'Use the snapshot for count query to guarantee the same point in time
Set OraDynCount = OraDatabase.CreateDynaset("select count(*) NUMROWS" & _
"from emp", 0&, SnapshotID)
MsgBox "Number of rows in the table is " & OraDynCount.Fields("NUMROWS").Value