Skip Headers
Oracle® Objects for OLE C++ Class Library Developer's Guide
10g Release 2 (10.2)

Part Number B14308-01
Go to Documentation Home
Home
Go to Book List
Book List
Go to Table of Contents
Contents
Go to Index
Index
Go to Master Index
Master Index
Go to Feedback page
Contact Us

Error Handling

The simplest kind of error handling is to know whether a method succeeded in its operation or not. This level of error handling is accomplished by looking at the return value of the method. Most methods in the library return a result of type oresult. An oresult will either have the value OSUCCESS, which indicates that the method worked, or OFAILURE, which indicates that some error occurred during the method's execution.

Note: Beginning with this release, newly introduced methods may throw an OException object in the case of an error.

After an error has occurred, you will often want more information about exactly what went wrong. There are two broad categories of problems:

The two categories of problems are reported in different ways.

The Oracle errors are reported through the ServerErrorNumber and GetServerErrorText methods of OSession and ODatabase. Errors that occur when connecting to the database, or in the execution of transaction operations, will be reported through OSession. Errors that occur while processing an SQL statement, for instance when opening a dynaset or using ExecuteSQL, will be reported through ODatabase. The number returned by ServerErrorNumber is a standard Oracle error number. An error number of 0 indicates no error. The text returned by GetServerErrorText is the standard Oracle error message. For more information about Oracle errors consult your Oracle documentation.

The class library errors are reported through the ErrorNumber and GetErrorText methods that are supported by most of the objects (all those that inherit these methods from OOracleObject). Each object will have available the most recent state of that object. The object's error state is cleared at the beginning of executing each method. GetErrorText will not have explanatory text available for all errors.

Because error reporting is done through additional calls rather than through returns of error codes it is possible to obtain error information about the execution of methods that cannot have error return values such as constructors and overloaded assignment operators. After using a constructor, especially a "construct and open" constructor or an assignment operator you should check an object's error state by calling ErrorNumber.

The following table lists all possible error codes returned by ErrorNumber and a brief explanation of each:

Error Codes Returned by ErrorNumber

Constant
Value
Description
OERROR_NONE
0
No error
OERROR_NOINTER
11
Internal Error
OERROR_MEMORY
12
Couldn't allocate necessary memory.
OERROR_BADERR
13
Internal Error
OERROR_INVPARENT
14
An attempt was made to get an object from an unopened object.
OERROR_SYSTEM
15
Internal Error
OERROR_NOTOPEN
16
An attempt was made to use an unopened object
OERROR_BADARG
17
One of the arguments to the method is invalid.
OERROR_INVRECORD
18
The current record is not valid.
OERROR_ADVISEULINK
4096
Internal error: Invalid advisory connection.
OERROR_POSITION
4098
An attempt was made to retrieve a field value from an empty dynaset.
OERROR_NOFIELDNAME
4099
An invalid field name was specified.
OERROR_TRANSIP
4101
A BeginTransaction was specified while a transaction is already in progress
OERROR_TRANSNIPC
4104
A CommitTransaction was specified without first executing BeginTrans.
OERROR_TRANSNIPR
4105
A Rollback was specified without first executing BeginTrans.
OERROR_NODSET
4106
Internal error: System attempted to destroy non-existent dynaset.
OERROR_INVROWNUM
4108
An attempt was made to reference an invalid row. This will happen when IsEOF or IsBOF is True or when the current row has been deleted and no record movement has occurred.
OERROR_TEMPFILE
4109
An error occurred while trying to create a temporary file for data caching.
OERROR_DUPSESSION
4110
An attempt was made to create a named session that already exists.
OERROR_NOSESSION
4111
Internal error: System attempted to destroy non-existent session.
OERROR_NOOBJECTN
4112
An attempt was made to reference a named object of a collection (other than the fields collection) that does not exist.
OERROR_DUPCONN
4113
Internal error: Duplicate connection name.
OERROR_NOCONN
4114
Internal error: System attempted to destroy non-existent connection.
OERROR_BFINDEX
4115
An invalid field index was specified. The range of indexes is 0 to Count -1.
OERROR_CURNREADY
4116
Internal error: System attempted to move to row in invalid dynaset.
OERROR_NOUPDATES
4117
An attempt was made to change the data of a non-updatable dynaset.
OERROR_NOTEDITING
4118
An attempt was made to change a fields value without first executing StartEdit.
OERROR_DATACHANGE
4119
An attempt was made to Edit data in the local cache, but the data on the Oracle server has been changed.
OERROR_NOBUFMEM
4120
Out of memory for data binding buffers.
OERROR_INVBKMRK
4121
An invalid bookmark was specified.
OERROR_BNDVNOEN
4122
Internal error: Bind variable not enabled.
OERROR_DUPPARAM
4123
An attempt was made to create a named parameter using Add, but that name already exists.
OERROR_INVARGVAL
4124
An invalid offset or length parameters was passed to GetChunk or an internal error has occurred using AppendChunk.
OERROR_INVFLDTYPE
4125
An attempt was made to use GetChunk or Append Chunk on a field that was not of the type Long or Long Raw.
OERROR_TRANSFORUP
4127
A SELECT ... FOR UPDATE was specified without first executing BeginTransaction
OERROR_NOTUPFORUP
4128
A SELECT ... FOR UPDATE was specified but the query is non-updatable.
OERROR_TRANSLOCK
4129
A Commit or Rollback was executed while a SELECT ... FOR UPDATE is in progress.
OERROR_CACHEPARM
4130
An invalid cache parameter was specified.
OERROR_FLDRQROWID
4131
An attempt was made to reference a field that requires a ROWID (Long or Long Raw), but the ROWID was not available.
OERROR_OUTOFMEMORY
4132
Internal Error
OERROR_MAXSIZE
4135
Element size specified in AddTable exceeds the maximum allowed size for that variable type. See AddTable Method for more details.
OERROR_INVDIMENSION
4136
Dimension specified in AddTable is invalid (negative). See AddTable Method for more details.
OERROR_MAXBUFFER
4137
Buffer size for parameter array variable exceeds 32512 bytes (OCI limit).
OERROR_ARRAYSIZ
4138
Dimensions of array parameters used in insert/update/delete statements are not equal.
OERROR_ARRAYFAILP
4139
Error processing arrays. For details refer to OO4OERR.LOG in the windows directory.
OERROR_NONBLKINPROGRESS
4153
Non-blocking operation in progress
OERROR_NONONBLKINPROGRESS
4154
Operation is valid only when non-block is in progress

These values can be found in the oraconst.txt file.

Find Method Parser Errors

Find method parser errors occur when the parser cannot parse the expression (find clause) in a Find method. These errors specify what part of the expression caused the error.

Find Method Parser Errors

Constant
Value
Description
OERROR_STOVER
4496
Stack overflow.
OERROR_SYNTAX
4497
Syntax error
OERROR_MISPLC
4498
Misplaced parenthesis
OERROR_MISQTE
4499
Misplaced quotation marks
OERROR_MISPAR
4500
WARNING: Missing closing parenthesis
OERROR_EXPCTD
4501
Usually open parentheses expected
OERROR_PRSERR
4502
Unknown parser error condition
OERROR_DUMMY
4503
Syntax not supported
OERROR_INVCOL
4504
Invalid column name
OERROR_TOKEN
4505
Maximum token size exceed in token.
OERROR_COLTYPE
4506
Unsupported data type
OERROR_UNXPTD
4507
Unexpected token found.

Find Method Runtime Errors

Find method runtime errors occur when the system cannot evaluate a find expression. Such errors are rare. When one occurs, the parser might have generated incorrect code.

Find Method Runtime Errors

Constant
Value
Description
OERROR_INSTR
4516
Internal error: Invalid instruction
OERROR_STACK
4517
Internal error: Stack over/under-flow
OERROR_CONVERT
4518
Invalid type conversion
OERROR_DATA
4519
Invalid datatype
OERROR_SQLFUNC
4520
SQL function missing argument
OERROR_COMP
4521
Invalid comparison
OERROR_SQLEXEC
4522
Select from dual failed
OERROR_SQLTYPE
4523
Invalid datatype in Select from dual