GetOracleClobForUpdate(int, int)
This method returns an updatable OracleClob object of the specified CLOB column using a WAIT clause.
Declaration
// C# public OracleClob GetOracleClobForUpdate(int index, int wait);
Parameters
-
indexThe zero-based column index.
-
waitThe number of seconds the method waits to acquire a lock.
Return Value
An updatable OracleClob.
Exceptions
InvalidOperationException - The connection is closed, the reader is closed, Read() has not been called, or all rows have been read.
IndexOutOfRangeException - The column index is invalid.
InvalidCastException - The accessor method is invalid for this column type or the column value is NULL.
Remarks
When the OracleCommand's ExecuteReader() method is invoked, all the data fetched by the OracleDataReader is from a particular snapshot. Therefore, calling an accessor method on the same column always returns the same value. However, the GetOracleClobForUpdate() method incurs a database round-trip to obtain a reference to the current CLOB data while also locking the row using the FOR UPDATE clause. This means that the OracleClob obtained from GetOracleClob() can have a different value than the OracleClob obtained from GetOracleClobForUpdate() since it is not obtained from the original snapshot.
Invoking this method internally executes a SELECT..FOR UPDATE statement which locks the row.
The returned OracleClob object can be used to safely update the CLOB because the CLOB column is locked after a call to this method.
Different WAIT clauses are appended to the statement, depending on the wait value. If the wait value is:
-
0"
NOWAIT" is appended at the end of aSELECT..FOR UPDATEstatement. The statement executes immediately whether the lock is acquired or not. If the lock is not acquired, an exception is thrown. -
n"
WAITn" is appended at the end of aSELECT..FOR UPDATEstatement. The statement executes as soon as the lock is acquired. However, if the lock cannot be acquired bynseconds, this method call throws an exception.The
WAITn" feature is only available for Oracle9i or later. For any version lower than Oracle9i,nis implicitly treated as-1and nothing is appended at the end of aSELECT..FORUPDATEstatement. -
-1Nothing is appended at the end of the
SELECT..FOR UPDATE. The statement execution waits indefinitely until a lock can be acquired.
IsDBNull should be called to check for NULL values before calling this method.
Example
The GetOracleClobForUpdate methods are comparable. See "Example" for a code example demonstrating usage.