Annotation of win32/sql/oracle/include/oci/ociap.h, revision 1.1

1.1     ! parser      1: /*
        !             2:  * $Header: /var/lib/cvsroot/parser3/parser3/src/sql/oracle/oracle32/include/oci/ociap.h,v 1.1 2001/08/22 14:02:18 parser Exp $
        !             3:  */
        !             4: 
        !             5: /* Copyright (c) Oracle Corporation 1996, 1997, 1998, 1999. 
        !             6: All Rights Reserved. */ 
        !             7:  
        !             8: /* NOTE:  See 'header_template.doc' in the 'doc' dve under the 'forms' 
        !             9:       directory for the header file template that includes instructions. 
        !            10: */
        !            11:  
        !            12: /* 
        !            13:    NAME 
        !            14:      ociap.h - Oracle Call Interface - Ansi Prototypes
        !            15: 
        !            16:    DESCRIPTION 
        !            17:      <short description of component this file declares/defines> 
        !            18: 
        !            19:    RELATED DOCUMENTS 
        !            20:  
        !            21:    INSPECTION STATUS 
        !            22:      Inspection date: 
        !            23:      Inspection status: 
        !            24:      Estimated increasing cost defects per page: 
        !            25:      Rule sets: 
        !            26:  
        !            27:    ACCEPTANCE REVIEW STATUS 
        !            28:      Review date: 
        !            29:      Review status: 
        !            30:      Reviewers: 
        !            31:  
        !            32:    PUBLIC FUNCTION(S) 
        !            33:      <list of external functions declared/defined - with one-line descriptions>
        !            34: 
        !            35:    PRIVATE FUNCTION(S)
        !            36:      <list of static functions defined in .c file - with one-line descriptions>
        !            37: 
        !            38:    EXAMPLES
        !            39: 
        !            40:    NOTES
        !            41:      <other useful comments, qualifications, etc.>
        !            42: 
        !            43:    MODIFIED   (MM/DD/YY)
        !            44:    porangas    09/22/99 - fix lines that exceed 80 chars:bug#974710
        !            45:    slari       09/01/99 - remove OCIEnvCallback
        !            46:    slari       08/23/99 - add OCIUcb in user callback functions
        !            47:    dsaha       07/07/99 - Add OCIFEnvCreate for forms
        !            48:    vyanaman    06/21/99 - Change OCI DateTime/Interval APIs.
        !            49:    esoyleme    07/01/99 - expose MTS performance enhancements                  
        !            50:    whe         06/14/99 - bug727872:add CONST to match definitions
        !            51:    kkarun      02/23/99 - Fix OCIDateTime APIs
        !            52:    jiyang      12/07/98 - Add comments for OCI_NLS_DUAL_CURRENCY
        !            53:    aroy        12/01/98 - add OCIEnvCreate
        !            54:    slari       11/23/98 - use ORASTDARG
        !            55:    slari       11/21/98 - replace ellipsis by arglist in OCIUserCallback
        !            56:    thchang     10/20/98 - correct comment on OCILobCreateTemporary
        !            57:    slari       09/08/98 - allow envh to receive error info also in CallbackReg/
        !            58:    kkarun      09/02/98 - Change const to CONST
        !            59:    aroy        08/04/98 - add OCITerminate calls                               
        !            60:    nramakri    06/25/98 - remove CONST from some OCIPickler APIs
        !            61:    jiyang      06/22/98 - Fix a lint error
        !            62:    nmallava    06/08/98 - ociistemporary -> envhp
        !            63:    jhasenbe    05/27/98 - Remove definitions for U-Calls (Unicode)
        !            64:    nmallava    05/18/98 - add comments
        !            65:    sgollapu    05/19/98 - Change text to OraText
        !            66:    aroy        04/20/98 - merge forward 8.0.5 -> 8.1.3
        !            67:    nbhatt      05/14/98 -  aq listen call
        !            68:    lchidamb    03/02/98 - Client Notification prototypes
        !            69:    vyanaman    04/19/98 - System Timestamp
        !            70:    kkarun      04/17/98 - Add more Interval functions
        !            71:    vyanaman    04/17/98 - Fix min (proc error)
        !            72:    vyanaman    04/16/98 - Add get/set TZ
        !            73:    kkarun      04/13/98 - Add Datetime prototypes
        !            74:    rkasamse    04/13/98 - change OCIEnv* to dvoid* for context/memory cart serv
        !            75:    rkasamse    04/15/98 - chage pickler cart interface
        !            76:    slari       03/20/98 - change proto of OCIUserCallback
        !            77:    slari       02/17/98 - add OCIUserCallback
        !            78:    jiyang      04/02/98 - Accept both env and user handles for NLS
        !            79:    rkasamse    03/20/98 - remove prototypes for OCIMemoryDuration* functions.
        !            80:    tsaulys     03/20/98 - use environment or session handle
        !            81:    nmallava    04/09/98 - OCILobLocatorAssign
        !            82:    nmallava    04/07/98 - lobgetchunksize and writeappend apis
        !            83:    jhasenbe    04/06/98 - Add new interfaces for Unicode support
        !            84:    nmallava    03/17/98 - add interfaces
        !            85:    nmallava    03/16/98 - add open/close apis
        !            86:    nmallava    03/10/98 - add temporary lobs apis
        !            87:    sgollapu    07/10/97 - Add OCIReset
        !            88:    sgollapu    02/09/98 - OCI non-blocking
        !            89:    nramakri    01/16/98 - remove #ifdef NEVER clause for OCIExtract
        !            90:    rmurthy     01/08/98 - OCIContextGenerateKey: change ub1 to ub4
        !            91:    ewaugh      12/18/97 - Turn type wrappers into functions.
        !            92:    skabraha    12/02/97 - adding OCIFile functions
        !            93:    rhwu        12/02/97 - add OCI Thread
        !            94:    nramakri    12/15/97 - move to core4
        !            95:    nramakri    12/11/97 - modify OCIExtract prototype
        !            96:    ewaugh      12/10/97 - add OCIFormat prototypes
        !            97:    nmallava    12/17/97 - Add ilob open and close apis
        !            98:    rkasamse    12/03/97 - Change some of the function names for pickler cartrid
        !            99:    nramakri    11/12/97 - add OCIExtract prototypes
        !           100:    rkasamse    11/21/97 - add prototypes for memory cartridge services and cont
        !           101:    rkasamse    11/03/97 - Add pickler cartridge interfaces.
        !           102:    jiyang      11/11/97 - Add NLS service for cartridge
        !           103:    tanguyen    08/19/97 -
        !           104:    cxcheng     07/30/97 - replace OCISvcCtx with OCISvcCtx
        !           105:    schandra    06/25/97 - AQ OCI interface
        !           106:    bnainani    07/21/97 - add prototypes for Oracle XA extensions
        !           107:    esoyleme    05/13/97 - move failover callback prototype
        !           108:    skmishra    05/06/97 - stdc compiler fixes
        !           109:    skmishra    04/24/97 - C++ Compatibility changes
        !           110:    skotsovo    04/21/97 - make lob parameter names consistent
        !           111:    rwhitman    04/16/97 - Fix LOB prototypes - Olint OCI 8.0.3
        !           112:    ramkrish    04/15/97 - Add free flag to OCILobFlushBuffer
        !           113:    dchatter    04/10/97 - add nzt.h inclusion
        !           114:    cxcheng     04/09/97 - change objnamp from CONST text* to dvoid*
        !           115:    cxcheng     04/08/97 - fix prototype of OCIDescribeAny()
        !           116:    skotsovo    03/31/97 - remove OCILobLocatorSize
        !           117:    skotsovo    03/27/97 - add OCILobLoadFromFile
        !           118:    bcchang     02/18/97 - Fix syntax error
        !           119:    dchatter    01/13/97 - fix comments on LOB calls
        !           120:    aroy        01/10/97 - remove ocilobfilecreate delete
        !           121:    sgollapu    12/27/96 - Correct OCILogon prototype
        !           122:    dchatter    01/04/97 - comments to describe the functions
        !           123:    sgollapu    11/25/96 - Change OCILobFileIsExistent
        !           124:    schandra    11/18/96 - Remove xa.h include
        !           125:    sgollapu    11/09/96 - Change prototype of OCIDescribeAny
        !           126:    dchatter    10/31/96 - delete CONST from lob write cb fn
        !           127:    dchatter    10/30/96 - more changes
        !           128:    dchatter    10/26/96 - lob/file long name corrections
        !           129:    slari       10/16/96 - delete unused calls
        !           130:    rwessman    10/29/96 - Fixed OCISecurityGetIdentity prototype
        !           131:    bcchang     10/25/96 - Fix syntax error
        !           132:    sgollapu    10/22/96 - Add OCILogon and OCILogoff
        !           133:    rwessman    10/16/96 - Added cryptographic and digital signature functions
        !           134:    sgollapu    10/10/96 - Add ocibdp and ocibdn
        !           135:    rxgovind    10/07/96 - add oci file calls
        !           136:    skotsovo    10/01/96 - move orl lob fnts to oci
        !           137:    skotsovo    09/20/96 - in OCILobGetLength(), remove the 'isnull' parameter.
        !           138:    aroy        08/29/96 - change prototype for Nchar Lob support
        !           139:    dchatter    08/21/96 - OCIResultSetToStmt prototype change
        !           140:    sthakur     08/14/96 - add OCIParamSet
        !           141:    schandra    07/26/96 - TX OCI return values - sb4->sword
        !           142:    aroy        07/17/96 - terminology change: OCILobLocator => OCILobLocator
        !           143:    dchatter    07/01/96 - create ANSI prototypes
        !           144:    dchatter    07/01/96 - Creation
        !           145: 
        !           146: */
        !           147: 
        !           148:  
        !           149: #ifndef OCIAP_ORACLE
        !           150: # define OCIAP_ORACLE
        !           151: 
        !           152: # ifndef ORATYPES 
        !           153: #  include <oratypes.h> 
        !           154: # endif 
        !           155:  
        !           156: #ifndef ORASTDARG
        !           157: #include <stdarg.h>
        !           158: #define ORASTDARG
        !           159: #endif
        !           160: 
        !           161: #ifndef OCIDFN
        !           162: #include <ocidfn.h>
        !           163: #endif
        !           164: 
        !           165: #ifndef NZT_ORACLE
        !           166: #include <nzt.h>
        !           167: #endif /* NZT_ORACLE */
        !           168:  
        !           169: #ifndef OCI_ORACLE
        !           170: #include <oci.h>
        !           171: #endif
        !           172: 
        !           173: #ifndef ORT_ORACLE
        !           174: #include <ort.h>
        !           175: #endif
        !           176: 
        !           177: 
        !           178: 
        !           179: /*---------------------------------------------------------------------------
        !           180:                      PUBLIC TYPES AND CONSTANTS
        !           181:   ---------------------------------------------------------------------------*/
        !           182: 
        !           183: 
        !           184: /*---------------------------------------------------------------------------
        !           185:                      PRIVATE TYPES AND CONSTANTS
        !           186:   ---------------------------------------------------------------------------*/
        !           187: 
        !           188: 
        !           189: /*---------------------------------------------------------------------------
        !           190:                            PUBLIC FUNCTIONS
        !           191:   ---------------------------------------------------------------------------*/
        !           192: 
        !           193: /*****************************************************************************
        !           194:                               DESCRIPTION
        !           195: ******************************************************************************
        !           196: Note: the descriptions of the functions are alphabetically arranged. Please 
        !           197: maintain the arrangement when adding a new function description. The actual 
        !           198: prototypes are below this comment section and donot follow any alphabetical 
        !           199: ordering. 
        !           200: 
        !           201: 
        !           202: --------------------------------OCIAttrGet------------------------------------
        !           203: 
        !           204: OCIAttrGet()
        !           205: Name
        !           206: OCI Attribute Get
        !           207: Purpose
        !           208: This call is used to get a particular attribute of a handle. 
        !           209: Syntax
        !           210: sword OCIAttrGet ( CONST dvoid    *trgthndlp,
        !           211:                  ub4            trghndltyp,
        !           212:                  dvoid          *attributep,
        !           213:                  ub4            *sizep,
        !           214:                  ub4            attrtype,
        !           215:                  OCIError       *errhp );
        !           216: Comments
        !           217: This call is used to get a particular attribute of a handle.
        !           218: See Appendix B,  "Handle Attributes",  for a list of handle types and their 
        !           219: readable attributes.
        !           220: Parameters
        !           221: trgthndlp (IN) - is the pointer to a handle type. 
        !           222: trghndltyp (IN) - is the handle type. 
        !           223: attributep (OUT) - is a pointer to the storage for an attribute value. The 
        !           224: attribute value is filled in. 
        !           225: sizep (OUT) - is the size of the attribute value. 
        !           226: This can be passed in as NULL for most parameters as the size is well known. 
        !           227: For text* parameters, a pointer to a ub4 must be passed in to get the length 
        !           228: of the string. 
        !           229: attrtype (IN) - is the type of attribute.
        !           230: errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for 
        !           231: diagnostic information in the event of an error.
        !           232: Related Functions
        !           233: OCIAttrSet()
        !           234: 
        !           235: --------------------------------OCIAttrSet------------------------------------
        !           236: 
        !           237: 
        !           238: OCIAttrSet()
        !           239: Name
        !           240: OCI Attribute Set
        !           241: Purpose
        !           242: This call is used to set a particular attribute of a handle or a descriptor. 
        !           243: Syntax
        !           244: sword OCIAttrSet ( dvoid       *trgthndlp,
        !           245:                  ub4         trghndltyp,
        !           246:                  dvoid       *attributep,
        !           247:                  ub4         size,
        !           248:                  ub4         attrtype,
        !           249:                  OCIError    *errhp );
        !           250: Comments
        !           251: This call is used to set a particular attribute of a handle or a descriptor. 
        !           252: See Appendix B for a list of handle types and their writeable attributes.
        !           253: Parameters
        !           254: trghndlp (IN/OUT) - the pointer to a handle type whose attribute gets 
        !           255: modified. 
        !           256: trghndltyp (IN/OUT) - is the handle type. 
        !           257: attributep (IN) - a pointer to an attribute value. 
        !           258: The attribute value is copied into the target handle. If the attribute value 
        !           259: is a pointer, then only the pointer is copied, not the contents of the pointer.
        !           260: size (IN) - is the size of an attribute value. This can be passed in as 0 for 
        !           261: most attributes as the size is already known by the OCI library. For text*
        !           262: attributes, a ub4 must be passed in set to the length of the string. 
        !           263: attrtype (IN) - the type of attribute being set.
        !           264: errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for 
        !           265: diagnostic information in the event of an error. 
        !           266: Related Functions
        !           267: OCIAttrGet()
        !           268: 
        !           269: 
        !           270: 
        !           271: --------------------------------OCIBindArrayOfStruct--------------------------
        !           272: 
        !           273: 
        !           274: 
        !           275: OCIBindArrayOfStruct()
        !           276: Name
        !           277: OCI Bind for Array of Structures
        !           278: Purpose
        !           279: This call sets up the skip parameters for a static array bind.
        !           280: Syntax
        !           281: sword OCIBindArrayOfStruct ( OCIBind     *bindp,
        !           282:                            OCIError    *errhp,
        !           283:                            ub4         pvskip, 
        !           284:                            ub4         indskip, 
        !           285:                            ub4         alskip, 
        !           286:                            ub4         rcskip );
        !           287: Comments
        !           288: This call sets up the skip parameters necessary for a static array bind.
        !           289: This call follows a call to OCIBindByName() or OCIBindByPos(). The bind 
        !           290: handle returned by that initial bind call is used as a parameter for the 
        !           291: OCIBindArrayOfStruct() call.
        !           292: For information about skip parameters, see the section "Arrays of Structures" 
        !           293: on page 4-16.
        !           294: Parameters
        !           295: bindp (IN) - the handle to a bind structure. 
        !           296: errhp (IN) - an error handle which can be passed to OCIErrorGet() for 
        !           297: diagnostic information in the event of an error.
        !           298: pvskip (IN) - skip parameter for the next data value. 
        !           299: indskip (IN) - skip parameter for the next indicator value or structure. 
        !           300: alskip (IN) - skip parameter for the next actual length value. 
        !           301: rcskip (IN) - skip parameter for the next column-level return code value. 
        !           302: Related Functions
        !           303: OCIAttrGet()
        !           304: 
        !           305: 
        !           306: --------------------------------OCIBindByName---------------------------------
        !           307: 
        !           308: OCIBindByName()
        !           309: Name
        !           310: OCI Bind by Name
        !           311: Purpose
        !           312: Creates an association between a program variable and a placeholder in a SQL 
        !           313: statement or PL/SQL block.
        !           314: Syntax
        !           315: sword OCIBindByName (
        !           316:               OCIStmt       *stmtp, 
        !           317:               OCIBind       **bindp,
        !           318:               OCIError      *errhp,
        !           319:               CONST OraText    *placeholder,
        !           320:               sb4           placeh_len,
        !           321:               dvoid         *valuep,
        !           322:               sb4           value_sz,
        !           323:               ub2           dty,
        !           324:               dvoid         *indp,
        !           325:               ub2           *alenp,
        !           326:               ub2           *rcodep,
        !           327:               ub4           maxarr_len,
        !           328:               ub4           *curelep, 
        !           329:               ub4           mode ); 
        !           330: Description
        !           331: This call is used to perform a basic bind operation. The bind creates an 
        !           332: association between the address of a program variable and a placeholder in a 
        !           333: SQL statement or PL/SQL block. The bind call also specifies the type of data 
        !           334: which is being bound, and may also indicate the method by which data will be 
        !           335: provided at runtime.
        !           336: This function also implicitly allocates the bind handle indicated by the bindp 
        !           337: parameter.
        !           338: Data in an OCI application can be bound to placeholders statically or 
        !           339: dynamically. Binding is static when all the IN bind data and the OUT bind 
        !           340: buffers are well-defined just before the execute. Binding is dynamic when the 
        !           341: IN bind data and the OUT bind buffers are provided by the application on 
        !           342: demand at execute time to the client library. Dynamic binding is indicated by 
        !           343: setting the mode parameter of this call to OCI_DATA_AT_EXEC.
        !           344: Related Functions: For more information about dynamic binding, see 
        !           345: the section "Runtime Data Allocation and Piecewise Operations" on 
        !           346: page 5-16.
        !           347: Both OCIBindByName() and OCIBindByPos() take as a parameter a bind handle, 
        !           348: which is implicitly allocated by the bind call A separate bind handle is 
        !           349: allocated for each placeholder the application is binding.
        !           350: Additional bind calls may be required to specify particular attributes 
        !           351: necessary when binding certain data types or handling input data in certain 
        !           352: ways:
        !           353: If arrays of structures are being utilized, OCIBindArrayOfStruct() must 
        !           354: be called to set up the necessary skip parameters.
        !           355: If data is being provided dynamically at runtime, and the application 
        !           356: will be using user-defined callback functions, OCIBindDynamic() must 
        !           357: be called to register the callbacks.
        !           358: If a named data type is being bound, OCIBindObject() must be called to 
        !           359: specify additional necessary information.
        !           360: Parameters
        !           361: stmth (IN/OUT) - the statement handle to the SQL or PL/SQL statement 
        !           362: being processed.
        !           363: bindp (IN/OUT) - a pointer to a pointer to a bind handle which is implicitly 
        !           364: allocated by this call.  The bind handle  maintains all the bind information for 
        !           365: this particular input value. The handle is feed implicitly when the statement 
        !           366: handle is deallocated.
        !           367: errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for 
        !           368: diagnostic information in the event of an error. 
        !           369: placeholder (IN) - the placeholder attributes are specified by name if ocibindn() 
        !           370: is being called.
        !           371: placeh_len (IN) - the length of the placeholder name specified in placeholder.
        !           372: valuep (IN/OUT) - a pointer to a data value or an array of data values of the 
        !           373: type specified in the dty parameter. An array of data values can be specified 
        !           374: for mapping into a PL/SQL table or for providing data for SQL multiple-row 
        !           375: operations. When an array of bind values is provided, this is called an array 
        !           376: bind in OCI terms. Additional attributes of the array bind (not bind to a 
        !           377: column of ARRAY type) are set up in OCIBindArrayOfStruct() call. 
        !           378: For a REF, named data type  bind, the valuep parameter is used only for IN 
        !           379: bind data. The pointers to OUT buffers are set in the pgvpp parameter 
        !           380: initialized by OCIBindObject(). For named data type and REF binds, the bind 
        !           381: values are unpickled into the Object Cache. The OCI object navigational calls 
        !           382: can then be used to navigate the objects and the refs in the Object Cache.
        !           383: If the OCI_DATA_AT_EXEC mode is specified in the mode parameter, valuep 
        !           384: is ignored for all data types. OCIBindArrayOfStruct() cannot be used and 
        !           385: OCIBindDynamic() must be invoked to provide callback functions if desired. 
        !           386: value_sz (IN) - the size of a data value. In the case of an array bind, this is the 
        !           387: maximum size of any element possible with the actual sizes being specified in 
        !           388: the alenp parameter. 
        !           389: If the OCI_DATA_AT_EXEC mode is specified, valuesz defines the maximum 
        !           390: size of the data that can be ever provided at runtime for data types other than 
        !           391: named data types or REFs. 
        !           392: dty (IN) - the data type of the value(s) being bound. Named data types 
        !           393: (SQLT_NTY) and REFs (SQLT_REF) are valid only if the application has been 
        !           394: initialized in object mode. For named data types, or REFs, additional calls 
        !           395: must be made with the bind handle to set up the datatype-specific attributes.
        !           396: indp (IN/OUT) - pointer to an indicator variable or array. For scalar data 
        !           397: types, this is a pointer to sb2 or an array of sb2s. For named data types, 
        !           398: this pointer is ignored and the actual pointer to the indicator structure or 
        !           399: an array of indicator structures is initialized by OCIBindObject(). 
        !           400: Ignored for dynamic binds.
        !           401: See the section "Indicator Variables" on page 2-43 for more information about 
        !           402: indicator variables.
        !           403: alenp (IN/OUT) - pointer to array of actual lengths of array elements. Each 
        !           404: element in alenp is the length of the data in the corresponding element in the 
        !           405: bind value array before and after the execute. This parameter is ignored for 
        !           406: dynamic binds.
        !           407: rcodep (OUT) - pointer to array of column level return codes. This parameter 
        !           408: is ignored for dynamic binds.
        !           409: maxarr_len (IN) - the maximum possible number of elements of type dty in a 
        !           410: PL/SQL binds. This parameter is not required for non-PL/SQL binds. If 
        !           411: maxarr_len is non-zero, then either OCIBindDynamic() or 
        !           412: OCIBindArrayOfStruct() can be invoked to set up additional bind attributes. 
        !           413: curelep(IN/OUT) - a pointer to the actual number of elements. This parameter 
        !           414: is only required for PL/SQL binds.
        !           415: mode (IN) - the valid modes for this parameter are:
        !           416: OCI_DEFAULT. This is default mode.
        !           417: OCI_DATA_AT_EXEC. When this mode is selected, the value_sz 
        !           418: parameter defines the maximum size of the data that can be ever 
        !           419: provided at runtime. The application must be ready to provide the OCI 
        !           420: library runtime IN data buffers at any time and any number of times. 
        !           421: Runtime data is provided in one of the two ways:
        !           422: callbacks using a user-defined function which must be registered 
        !           423: with a subsequent call to OCIBindDynamic(). 
        !           424: a polling mechanism using calls supplied by the OCI. This mode 
        !           425: is assumed if no callbacks are defined.
        !           426: For more information about using the OCI_DATA_AT_EXEC mode, see 
        !           427: the section "Runtime Data Allocation and Piecewise Operations" on 
        !           428: page 5-16.
        !           429: When the allocated buffers are not required any more, they should be 
        !           430: freed by the client. 
        !           431: Related Functions
        !           432: OCIBindDynamic(), OCIBindObject(), OCIBindArrayOfStruct(), OCIAttrGet()
        !           433: 
        !           434: 
        !           435: 
        !           436: -------------------------------OCIBindByPos-----------------------------------
        !           437: 
        !           438: 
        !           439: OCIBindByPos()
        !           440: Name
        !           441: OCI Bind by Position
        !           442: Purpose
        !           443: Creates an association between a program variable and a placeholder in a SQL 
        !           444: statement or PL/SQL block.
        !           445: Syntax
        !           446: sword OCIBindByPos ( 
        !           447:               OCIStmt      *stmtp, 
        !           448:               OCIBind      **bindp,
        !           449:               OCIError     *errhp,
        !           450:               ub4          position,
        !           451:               dvoid        *valuep,
        !           452:               sb4          value_sz,
        !           453:               ub2          dty,
        !           454:               dvoid        *indp,
        !           455:               ub2          *alenp,
        !           456:               ub2          *rcodep,
        !           457:               ub4          maxarr_len,
        !           458:               ub4          *curelep, 
        !           459:               ub4          mode);
        !           460: 
        !           461: Description
        !           462: This call is used to perform a basic bind operation. The bind creates an 
        !           463: association between the address of a program variable and a placeholder in a 
        !           464: SQL statement or PL/SQL block. The bind call also specifies the type of data 
        !           465: which is being bound, and may also indicate the method by which data will be 
        !           466: provided at runtime.
        !           467: This function also implicitly allocates the bind handle indicated by the bindp 
        !           468: parameter.
        !           469: Data in an OCI application can be bound to placeholders statically or 
        !           470: dynamically. Binding is static when all the IN bind data and the OUT bind 
        !           471: buffers are well-defined just before the execute. Binding is dynamic when the 
        !           472: IN bind data and the OUT bind buffers are provided by the application on 
        !           473: demand at execute time to the client library. Dynamic binding is indicated by 
        !           474: setting the mode parameter of this call to OCI_DATA_AT_EXEC.
        !           475: Related Functions: For more information about dynamic binding, see 
        !           476: the section "Runtime Data Allocation and Piecewise Operations" on 
        !           477: page 5-16
        !           478: Both OCIBindByName() and OCIBindByPos() take as a parameter a bind handle, 
        !           479: which is implicitly allocated by the bind call A separate bind handle is 
        !           480: allocated for each placeholder the application is binding.
        !           481: Additional bind calls may be required to specify particular attributes 
        !           482: necessary when binding certain data types or handling input data in certain 
        !           483: ways:
        !           484: If arrays of structures are being utilized, OCIBindArrayOfStruct() must 
        !           485: be called to set up the necessary skip parameters.
        !           486: If data is being provided dynamically at runtime, and the application 
        !           487: will be using user-defined callback functions, OCIBindDynamic() must 
        !           488: be called to register the callbacks.
        !           489: If a named data type is being bound, OCIBindObject() must be called to 
        !           490: specify additional necessary information.
        !           491: Parameters
        !           492: stmth (IN/OUT) - the statement handle to the SQL or PL/SQL statement 
        !           493: being processed.
        !           494: bindp (IN/OUT) - a pointer to a pointer to a bind handle which is implicitly 
        !           495: allocated by this call.  The bind handle  maintains all the bind information for 
        !           496: this particular input value. The handle is feed implicitly when the statement 
        !           497: handle is deallocated.
        !           498: errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for 
        !           499: diagnostic information in the event of an error. 
        !           500: position (IN) - the placeholder attributes are specified by position if ocibindp() 
        !           501: is being called.
        !           502: valuep (IN/OUT) - a pointer to a data value or an array of data values of the 
        !           503: type specified in the dty parameter. An array of data values can be specified 
        !           504: for mapping into a PL/SQL table or for providing data for SQL multiple-row 
        !           505: operations. When an array of bind values is provided, this is called an array 
        !           506: bind in OCI terms. Additional attributes of the array bind (not bind to a 
        !           507: column of ARRAY type) are set up in OCIBindArrayOfStruct() call. 
        !           508: For a REF, named data type  bind, the valuep parameter is used only for IN 
        !           509: bind data. The pointers to OUT buffers are set in the pgvpp parameter 
        !           510: initialized by OCIBindObject(). For named data type and REF binds, the bind 
        !           511: values are unpickled into the Object Cache. The OCI object navigational calls 
        !           512: can then be used to navigate the objects and the refs in the Object Cache.
        !           513: If the OCI_DATA_AT_EXEC mode is specified in the mode parameter, valuep 
        !           514: is ignored for all data types. OCIBindArrayOfStruct() cannot be used and 
        !           515: OCIBindDynamic() must be invoked to provide callback functions if desired. 
        !           516: value_sz (IN) - the size of a data value. In the case of an array bind, this is the 
        !           517: maximum size of any element possible with the actual sizes being specified in 
        !           518: the alenp parameter. 
        !           519: If the OCI_DATA_AT_EXEC mode is specified, valuesz defines the maximum 
        !           520: size of the data that can be ever provided at runtime for data types other than 
        !           521: named data types or REFs. 
        !           522: dty (IN) - the data type of the value(s) being bound. Named data types 
        !           523: (SQLT_NTY) and REFs (SQLT_REF) are valid only if the application has been 
        !           524: initialized in object mode. For named data types, or REFs, additional calls 
        !           525: must be made with the bind handle to set up the datatype-specific attributes.
        !           526: indp (IN/OUT) - pointer to an indicator variable or array. For scalar data 
        !           527: types, this is a pointer to sb2 or an array of sb2s. For named data types, 
        !           528: this pointer is ignored and the actual pointer to the indicator structure or 
        !           529: an array of indicator structures is initialized by OCIBindObject(). Ignored 
        !           530: for dynamic binds.
        !           531: See the section "Indicator Variables" on page 2-43 for more information about 
        !           532: indicator variables.
        !           533: alenp (IN/OUT) - pointer to array of actual lengths of array elements. Each 
        !           534: element in alenp is the length of the data in the corresponding element in the 
        !           535: bind value array before and after the execute. This parameter is ignored for 
        !           536: dynamic binds.
        !           537: rcodep (OUT) - pointer to array of column level return codes. This parameter 
        !           538: is ignored for dynamic binds.
        !           539: maxarr_len (IN) - the maximum possible number of elements of type dty in a 
        !           540: PL/SQL binds. This parameter is not required for non-PL/SQL binds. If 
        !           541: maxarr_len is non-zero, then either OCIBindDynamic() or 
        !           542: OCIBindArrayOfStruct() can be invoked to set up additional bind attributes. 
        !           543: curelep(IN/OUT) - a pointer to the actual number of elements. This parameter 
        !           544: is only required for PL/SQL binds.
        !           545: mode (IN) - the valid modes for this parameter are:
        !           546: OCI_DEFAULT. This is default mode.
        !           547: OCI_DATA_AT_EXEC. When this mode is selected, the value_sz 
        !           548: parameter defines the maximum size of the data that can be ever 
        !           549: provided at runtime. The application must be ready to provide the OCI 
        !           550: library runtime IN data buffers at any time and any number of times. 
        !           551: Runtime data is provided in one of the two ways:
        !           552: callbacks using a user-defined function which must be registered 
        !           553: with a subsequent call to OCIBindDynamic() . 
        !           554: a polling mechanism using calls supplied by the OCI. This mode 
        !           555: is assumed if no callbacks are defined.
        !           556: For more information about using the OCI_DATA_AT_EXEC mode, see 
        !           557: the section "Runtime Data Allocation and Piecewise Operations" on 
        !           558: page 5-16.
        !           559: When the allocated buffers are not required any more, they should be 
        !           560: freed by the client. 
        !           561: Related Functions
        !           562: OCIBindDynamic(), OCIBindObject(), OCIBindArrayOfStruct(), OCIAttrGet()
        !           563: 
        !           564: 
        !           565: 
        !           566: -------------------------------OCIBindDynamic---------------------------------
        !           567: 
        !           568: OCIBindDynamic()
        !           569: Name
        !           570: OCI Bind Dynamic Attributes
        !           571: Purpose
        !           572: This call is used to register user callbacks for dynamic data allocation. 
        !           573: Syntax
        !           574: sword OCIBindDynamic( OCIBind     *bindp,
        !           575:                     OCIError    *errhp,
        !           576:                     dvoid       *ictxp, 
        !           577:                     OCICallbackInBind         (icbfp)(
        !           578:                                 dvoid            *ictxp,
        !           579:                                 OCIBind          *bindp,
        !           580:                                 ub4              iter, 
        !           581:                                 ub4              index, 
        !           582:                                 dvoid            **bufpp,
        !           583:                                 ub4              *alenp,
        !           584:                                 ub1              *piecep, 
        !           585:                                 dvoid            **indp ),
        !           586:                     dvoid       *octxp,
        !           587:                     OCICallbackOutBind         (ocbfp)(
        !           588:                                 dvoid            *octxp,
        !           589:                                 OCIBind          *bindp,
        !           590:                                 ub4              iter, 
        !           591:                                 ub4              index, 
        !           592:                                 dvoid            **bufp, 
        !           593:                                 ub4              **alenpp,
        !           594:                                 ub1              *piecep,
        !           595:                                 dvoid            **indpp, 
        !           596:                                 ub2              **rcodepp)   );
        !           597: Comments
        !           598: This call is used to register user-defined callback functions for providing 
        !           599: data for an UPDATE or INSERT if OCI_DATA_AT_EXEC mode was specified in a 
        !           600: previous call to OCIBindByName() or OCIBindByPos(). 
        !           601: The callback function pointers must return OCI_CONTINUE if it the call is 
        !           602: successful. Any return code other than OCI_CONTINUE signals that the client 
        !           603: wishes to abort processing immediately.
        !           604: For more information about the OCI_DATA_AT_EXEC mode, see the section 
        !           605: "Runtime Data Allocation and Piecewise Operations" on page 5-16.
        !           606: Parameters
        !           607: bindp (IN/OUT) - a bind handle returned by a call to OCIBindByName() or 
        !           608: OCIBindByPos(). 
        !           609: errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for 
        !           610: diagnostic information in the event of an error. 
        !           611: ictxp (IN) - the context pointer required by the call back function icbfp. 
        !           612: icbfp (IN) - the callback function which returns a pointer to the IN bind 
        !           613: value or piece at run time. The callback takes in the following parameters. 
        !           614: ictxp (IN/OUT) - the context pointer for this callback function. 
        !           615: bindp (IN) - the bind handle passed in to uniquely identify this bind 
        !           616: variable. 
        !           617: iter (IN) - 1-based execute iteration value. 
        !           618: index (IN) - index of the current array, for an array bind. 1 based not 
        !           619: greater than curele parameter of the bind call. 
        !           620: index (IN) - index of the current array, for an array bind. This parameter 
        !           621: is 1-based, and may not be greater than curele parameter of the bind call. 
        !           622: bufpp (OUT) - the pointer to the buffer. 
        !           623: piecep (OUT) - which piece of the bind value. This can be one of the 
        !           624: following values - OCI_ONE_PIECE, OCI_FIRST_PIECE, 
        !           625: OCI_NEXT_PIECE and OCI_LAST_PIECE.
        !           626: indp (OUT) - contains the indicator value. This is apointer to either an 
        !           627: sb2 value or a pointer to an indicator structure for binding named data 
        !           628: types. 
        !           629: indszp (OUT) - contains the indicator value size. A pointer containing 
        !           630: the size of either an sb2 or an indicator structure pointer. 
        !           631: octxp (IN) - the context pointer required by the callback function ocbfp. 
        !           632: ocbfp (IN) - the callback function which returns a pointer to the OUT bind 
        !           633: value or piece at run time. The callback takes in the following parameters. 
        !           634: octxp (IN/OUT) - the context pointer for this call back function. 
        !           635: bindp (IN) - the bind handle passed in to uniquely identify this bind 
        !           636: variable. 
        !           637: iter (IN) - 1-based execute iteration value. 
        !           638: index (IN) - index of the current array, for an array bind. This parameter 
        !           639: is 1-based, and must not be greater than curele parameter of the bind call. 
        !           640: bufpp (OUT) - a pointer to a buffer to write the bind value/piece. 
        !           641: buflp (OUT) - returns the buffer size. 
        !           642: alenpp (OUT) - a pointer to a storage for OCI to fill in the size of the bind 
        !           643: value/piece after it has been read. 
        !           644: piecep (IN/OUT) - which piece of the bind value. It will be set by the 
        !           645: library to be one of the following values - OCI_ONE_PIECE or 
        !           646: OCI_NEXT_PIECE. The callback function can leave it unchanged or set 
        !           647: it to OCI_FIRST_PIECE or OCI_LAST_PIECE. By default - 
        !           648: OCI_ONE_PIECE. 
        !           649: indpp (OUT) - returns a pointer to contain the indicator value which 
        !           650: either an sb2 value or a pointer to an indicator structure for named data 
        !           651: types. 
        !           652: indszpp (OUT) - returns a pointer to return the size of the indicator 
        !           653: value which is either size of an sb2 or size of an indicator structure. 
        !           654: rcodepp (OUT) - returns a pointer to contains the return code. 
        !           655: Related Functions
        !           656: OCIAttrGet()
        !           657: 
        !           658: 
        !           659: ---------------------------------OCIBindObject--------------------------------
        !           660: 
        !           661: 
        !           662: OCIBindObject()
        !           663: Name
        !           664: OCI Bind Object
        !           665: Purpose
        !           666: This function sets up additional attributes which are required for a named 
        !           667: data type (object)  bind.
        !           668: Syntax
        !           669: sword OCIBindObject ( OCIBind          *bindp,
        !           670:                     OCIError         *errhp, 
        !           671:                     CONST OCIType    *type,
        !           672:                     dvoid            **pgvpp, 
        !           673:                     ub4              *pvszsp, 
        !           674:                     dvoid            **indpp, 
        !           675:                     ub4              *indszp, );
        !           676: Comments
        !           677: This function sets up additional attributes which binding a named data type 
        !           678: or a REF. An error will be returned if this function is called when the OCI 
        !           679: environment has been initialized in non-object mode. 
        !           680: This call takes as a paramter a type descriptor object (TDO) of datatype 
        !           681: OCIType for the named data type being defined.  The TDO can be retrieved 
        !           682: with a call to OCITypeByName().
        !           683: If the OCI_DATA_AT_EXEC mode was specified in ocibindn() or ocibindp(), the 
        !           684: pointers to the IN buffers are obtained either using the callback icbfp 
        !           685: registered in the OCIBindDynamic() call or by the OCIStmtSetPieceInfo() call. 
        !           686: The buffers are dynamically allocated for the OUT data and the pointers to 
        !           687: these buffers are returned either by calling ocbfp() registered by the 
        !           688: OCIBindDynamic() or by setting the pointer to the buffer in the buffer passed 
        !           689: in by OCIStmtSetPieceInfo() called when OCIStmtExecute() returned 
        !           690: OCI_NEED_DATA. The memory of these client library- allocated buffers must be 
        !           691: freed when not in use anymore by using the OCIObjectFreee() call.
        !           692: Parameters
        !           693: bindp ( IN/OUT) - the bind handle returned by the call to OCIBindByName() 
        !           694: or OCIBindByPos(). 
        !           695: errhp ( IN/OUT) - an error handle which can be passed to OCIErrorGet() for 
        !           696: diagnostic information in the event of an error.
        !           697: type ( IN) - points to the TDO which describes the type of the program 
        !           698: variable being bound. Retrieved by calling OCITypeByName().
        !           699: pgvpp ( IN/OUT) - points to a pointer to the program variable buffer. For an 
        !           700: array, pgvpp points to an array of pointers. When the bind variable is also an 
        !           701: OUT variable, the OUT Named Data Type value or REF is allocated 
        !           702: (unpickled) in the Object Cache, and a pointer to the value or REF is returned,
        !           703: At the end of execute, when all OUT values have been received, pgvpp points 
        !           704: to an array of pointer(s) to these newly allocated named data types in the 
        !           705: object cache. 
        !           706: pgvpp is ignored if the OCI_DATA_AT_EXEC mode is set. Then the Named 
        !           707: Data Type buffers are requested at runtime. For static array binds, skip 
        !           708: factors may be specified using the OCIBindArrayOfStruct() call. The skip 
        !           709: factors are used to compute the address of the next pointer to the value, the 
        !           710: indicator structure and their sizes.
        !           711: pvszsp ( IN/OUT) - points to the size of the program variable. The size of the 
        !           712: named data type is not required on input. For an array, pvszsp is an array of 
        !           713: ub4s. On return, for OUT bind variables, this points to size(s) of the Named 
        !           714: Data Types and REFs received. pvszsp is ignored if the OCI_DATA_AT_EXEC 
        !           715: mode is set. Then the size of the buffer is taken at runtime.
        !           716: indpp ( IN/OUT) - points to a pointer to the program variable buffer 
        !           717: containing the parallel indicator structure. For an array, points to an array of 
        !           718: pointers. When the bind variable is also an OUT bind variable, memory is 
        !           719: allocated in the object cache, to store the unpickled OUT indicator values. At 
        !           720: the end of the execute when all OUT values have been received, indpp points 
        !           721: to the pointer(s) to these newly allocated indicator structure(s). 
        !           722: indpp is ignored if the OCI_DATA_AT_EXEC mode is set. Then the indicator 
        !           723: is requested at runtime.
        !           724: indszp ( IN/OUT) - points to the size of the IN indicator structure program 
        !           725: variable. For an array, it is an array of sb2s. On return for OUT bind variables, 
        !           726: this points to size(s) of the received OUT indicator structures.
        !           727: indszp is ignored if the OCI_DATA_AT_EXEC mode is set. Then the indicator 
        !           728: size is requested at runtime.
        !           729: Related Functions
        !           730: OCIAttrGet()
        !           731: 
        !           732: 
        !           733: 
        !           734: ----------------------------------OCIBreak------------------------------------
        !           735: 
        !           736: 
        !           737: OCIBreak()
        !           738: Name
        !           739: OCI Break
        !           740: Purpose
        !           741: This call performs an immediate (asynchronous) abort of any currently 
        !           742: executing OCI function that is associated with a server .
        !           743: Syntax
        !           744: sword OCIBreak ( dvoid      *hndlp,
        !           745:                  OCIError   *errhp);
        !           746: Comments
        !           747: This call performs an immediate (asynchronous) abort of any currently 
        !           748: executing OCI function that is associated with a server. It is normally used 
        !           749: to stop a long-running OCI call being processed on the server.
        !           750: This call can take either the service context handle or the server context 
        !           751: handle as a parameter to identify the function to be aborted.
        !           752: Parameters
        !           753: hndlp (IN) - the service context handle or the server context handle.
        !           754: errhp (IN) - an error handle which can be passed to OCIErrorGet() for 
        !           755: diagnostic information in the event of an error.
        !           756: Related Functions
        !           757: 
        !           758: ------------------------------OCIDateTimeAssign --------------------------
        !           759: sword OCIDateTimeAssign(dvoid *hndl, OCIError *err, CONST OCIDateTime *from, 
        !           760:                        OCIDateTime *to);
        !           761: NAME: OCIDateTimeAssign - OCIDateTime Assignment
        !           762: PARAMETERS:
        !           763: hndl (IN) - Session/Env handle.
        !           764: err (IN/OUT) - error handle. If there is an error, it is
        !           765:                 recorded in 'err' and this function returns OCI_ERROR.
        !           766:                 The error recorded in 'err' can be retrieved by calling
        !           767:                 OCIErrorGet().
        !           768: from (IN) - datetime to be assigned
        !           769: to (OUT) - lhs of assignment
        !           770: DESCRIPTION:
        !           771:         Performs date assignment. The type of the output will be same as that
        !           772:        of input
        !           773: 
        !           774: ------------------------------OCIDateTimeCheck----------------------------
        !           775: sword OCIDateTimeCheck(dvoid *hndl, OCIError *err, CONST OCIDateTime *date, 
        !           776:                 ub4 *valid );
        !           777: NAME: OCIDateTimeCheck - OCIDateTime CHecK if the given date is valid
        !           778: PARAMETERS:
        !           779: hndl (IN) - Session/Env handle. 
        !           780: err (IN/OUT) - error handle. If there is an error, it is
        !           781:                 recorded in 'err' and this function returns OCI_ERROR.
        !           782:                 The error recorded in 'err' can be retrieved by calling
        !           783:                 OCIErrorGet().
        !           784: date (IN) - date to be checked
        !           785: valid (OUT) -  returns zero for a valid date, otherwise 
        !           786:                the ORed combination of all error bits specified below:
        !           787:    Macro name                   Bit number      Error
        !           788:    ----------                   ----------      -----
        !           789:    OCI_DATE_INVALID_DAY         0x1             Bad day
        !           790:    OCI_DATE_DAY_BELOW_VALID     0x2             Bad DAy Low/high bit (1=low)
        !           791:    OCI_DATE_INVALID_MONTH       0x4             Bad MOnth
        !           792:    OCI_DATE_MONTH_BELOW_VALID   0x8             Bad MOnth Low/high bit (1=low)
        !           793:    OCI_DATE_INVALID_YEAR        0x10            Bad YeaR
        !           794:    OCI_DATE_YEAR_BELOW_VALID    0x20            Bad YeaR Low/high bit (1=low)
        !           795:    OCI_DATE_INVALID_HOUR        0x40            Bad HouR
        !           796:    OCI_DATE_HOUR_BELOW_VALID    0x80            Bad HouR Low/high bit (1=low)
        !           797:    OCI_DATE_INVALID_MINUTE      0x100           Bad MiNute
        !           798:    OCI_DATE_MINUTE_BELOW_VALID 0x200           Bad MiNute Low/high bit (1=low)
        !           799:    OCI_DATE_INVALID_SECOND      0x400           Bad SeCond
        !           800:    OCI_DATE_SECOND_BELOW_VALID  0x800           bad second Low/high bit (1=low)
        !           801:    OCI_DATE_DAY_MISSING_FROM_1582 0x1000        Day is one of those "missing"
        !           802:                                                 from 1582
        !           803:    OCI_DATE_YEAR_ZERO           0x2000          Year may not equal zero
        !           804:    OCI_DATE_INVALID_TIMEZONE    0x4000          Bad Timezone
        !           805:    OCI_DATE_INVALID_FORMAT      0x8000          Bad date format input
        !           806: 
        !           807:    So, for example, if the date passed in was 2/0/1990 25:61:10 in
        !           808:    (month/day/year hours:minutes:seconds format), the error returned
        !           809:    would be OCI_DATE_INVALID_DAY | OCI_DATE_DAY_BELOW_VALID |
        !           810:    OCI_DATE_INVALID_HOUR | OCI_DATE_INVALID_MINUTE
        !           811: 
        !           812: DESCRIPTION:
        !           813:        Check if the given date is valid.
        !           814: RETURNS:
        !           815:         OCI_SUCCESS if the function completes successfully.
        !           816:         OCI_INVALID_HANDLE if 'err' is NULL.
        !           817:         OCI_ERROR if
        !           818:          'date' and 'valid' pointers are NULL pointers
        !           819: 
        !           820: ------------------------------- OCIDateTimeCompare----------------------------
        !           821: sword OCIDateTimeCompare(dvoid *hndl, OCIError *err, CONST OCIDateTime *date1, 
        !           822:                      CONST OCIDateTime *date2,  sword *result );
        !           823: NAME: OCIDateTimeCompare - OCIDateTime CoMPare dates
        !           824: PARAMETERS:
        !           825: hndl (IN) - Session/Env handle. 
        !           826: err (IN/OUT) - error handle. If there is an error, it is
        !           827:                 recorded in 'err' and this function returns OCI_ERROR.
        !           828:                 The error recorded in 'err' can be retrieved by calling
        !           829:                 OCIErrorGet().
        !           830: date1, date2 (IN) - dates to be compared
        !           831: result (OUT) - comparison result, 0 if equal, -1 if date1 < date2, 
        !           832:                1 if date1 > date2
        !           833: DESCRIPTION:
        !           834: The function OCIDateCompare compares two dates. It returns -1 if 
        !           835: date1 is smaller than date2, 0 if they are equal, and 1 if date1 is 
        !           836: greater than date2.
        !           837: RETURNS:
        !           838:        OCI_SUCCESS if the function completes successfully.
        !           839:         OCI_INVALID_HANDLE if 'err' is NULL.
        !           840:         OCI_ERROR if
        !           841:          invalid date
        !           842:          input dates are not mutually comparable
        !           843: 
        !           844: ------------------------------OCIDateTimeConvert----------------------
        !           845: sword OCIDateTimeConvert(dvoid *hndl, OCIError *err, OCIDateTime *indate, 
        !           846:                                OCIDateTime *outdate);
        !           847: NAME: OCIDateTimeConvert - Conversion between different DATETIME types
        !           848: PARAMETERS:
        !           849: hndl (IN) - Session/Env handle. 
        !           850: err (IN/OUT) - error handle. If there is an error, it is
        !           851:                 recorded in 'err' and this function returns OCI_ERROR.
        !           852:                 The error recorded in 'err' can be retrieved by calling
        !           853:                 OCIErrorGet().
        !           854: indate (IN) - pointer to input date
        !           855: outdate (OUT) - pointer to output datetime 
        !           856: DESCRIPTION: Converts one datetime type to another. The result type is
        !           857:        the type of the 'outdate' descriptor.
        !           858: RETURNS:
        !           859:         OCI_SUCCESS if the function completes successfully.
        !           860:         OCI_INVALID_HANDLE if 'err' is NULL.
        !           861:        OCI_ERROR if
        !           862:            conversion not possible.
        !           863:    
        !           864: ---------------------------- OCIDateTimeFromText-----------------------
        !           865: sword OCIDateTimeFromText(dvoid *hndl, OCIError *err, CONST OraText *date_str, 
        !           866:              size_t d_str_length, CONST OraText *fmt, ub1 fmt_length,
        !           867:              CONST OraText *lang_name, size_t lang_length, OCIDateTime *date );
        !           868: NAME: OCIDateTimeFromText - OCIDateTime convert String FROM Date
        !           869: PARAMETERS:
        !           870: hndl (IN) - Session/Env handle. If Session Handle is passed, the 
        !           871:                    conversion takes place in session NLS_LANGUAGE and
        !           872:                    session NLS_CALENDAR, otherwise the default is used.
        !           873: err (IN/OUT) - error handle. If there is an error, it is
        !           874:                 recorded in 'err' and this function returns OCI_ERROR.
        !           875:                 The error recorded in 'err' can be retrieved by calling
        !           876:                 OCIErrorGet().
        !           877: date_str (IN) - input string to be converted to Oracle date
        !           878: d_str_length (IN) - size of the input string, if the length is -1
        !           879:                then 'date_str' is treated as a null terminated  string
        !           880: fmt (IN) - conversion format; if 'fmt' is a null pointer, then
        !           881:                 the string is expected to be in the default format for
        !           882:                the datetime type.
        !           883: fmt_length (IN) - length of the 'fmt' parameter
        !           884: lang_name (IN) - language in which the names and abbreviations of
        !           885:                days and months are specified, if null i.e. (OraText *)0,
        !           886:                the default language of session is used, 
        !           887: lang_length (IN) - length of the 'lang_name' parameter
        !           888: date (OUT) - given string converted to date
        !           889: DESCRIPTION:
        !           890:        Converts the given string to Oracle datetime type set in the 
        !           891:         OCIDateTime descriptor according to the specified format. Refer to 
        !           892:         "TO_DATE" conversion function described in "Oracle SQL Language 
        !           893:         Reference Manual" for a description of format.
        !           894: RETURNS:
        !           895:         OCI_SUCCESS if the function completes successfully.
        !           896:         OCI_INVALID_HANDLE if 'err' is NULL.
        !           897:         OCI_ERROR if
        !           898:          invalid format
        !           899:          unknown language
        !           900:          invalid input string
        !           901: 
        !           902: --------------------------- OCIDateTimeGetDate-------------------------
        !           903: sword OCIDateTimeGetDate(dvoid *hndl, OCIError *err,  CONST OCIDateTime *date, 
        !           904:                           sb2 *year, ub1 *month, ub1 *day );
        !           905: NAME: OCIDateTimeGetDate - OCIDateTime Get Date (year, month, day)  
        !           906:                                portion of DATETIME. 
        !           907: PARAMETERS:
        !           908: hndl (IN) - Session/Env handle. 
        !           909: err (IN/OUT) - error handle. If there is an error, it is
        !           910:                 recorded in 'err' and this function returns OCI_ERROR.
        !           911:                 The error recorded in 'err' can be retrieved by calling
        !           912:                 OCIErrorGet().
        !           913: datetime (IN) - Pointer to OCIDateTime 
        !           914: year      (OUT) - year value
        !           915: month     (OUT) - month value
        !           916: day       (OUT) - day value
        !           917: 
        !           918: --------------------------- OCIDateTimeGetTime ------------------------
        !           919: sword OCIDateTimeGetTime(dvoid *hndl, OCIError *err, OCIDateTime *datetime,
        !           920:                 ub1 *hour, ub1 *minute, ub1 *sec, ub4 *fsec);
        !           921: NAME: OCIDateTimeGetTime - OCIDateTime Get Time (hour, min, second, 
        !           922:                        fractional second)  of DATETIME. 
        !           923: PARAMETERS:
        !           924: hndl (IN) - Session/Env handle. 
        !           925: err (IN/OUT) - error handle. If there is an error, it is
        !           926:                 recorded in 'err' and this function returns OCI_ERROR.
        !           927:                 The error recorded in 'err' can be retrieved by calling
        !           928:                 OCIErrorGet().
        !           929: datetime (IN) - Pointer to OCIDateTime 
        !           930: hour      (OUT) - hour value
        !           931: minute       (OUT) - minute value
        !           932: sec       (OUT) - second value
        !           933: fsec      (OUT) - Fractional Second value
        !           934: 
        !           935: --------------------------- OCIDateTimeGetTimeZoneOffset ----------------------
        !           936: sword OCIDateTimeGetTimeZoneOffset(dvoid *hndl,OCIError *err,CONST 
        !           937:               OCIDateTime *datetime,sb1 *hour,sb1  *minute);
        !           938: 
        !           939: NAME: OCIDateTimeGetTimeZoneOffset - OCIDateTime Get TimeZone (hour, minute)  
        !           940:                          portion of DATETIME. 
        !           941: PARAMETERS:
        !           942: hndl (IN) - Session/Env handle. 
        !           943: err (IN/OUT) - error handle. If there is an error, it is
        !           944:                 recorded in 'err' and this function returns OCI_ERROR.
        !           945:                 The error recorded in 'err' can be retrieved by calling
        !           946:                 OCIErrorGet().
        !           947: datetime (IN) - Pointer to OCIDateTime 
        !           948: hour      (OUT) - TimeZone Hour value
        !           949: minute     (OUT) - TimeZone Minute value
        !           950: 
        !           951: --------------------------- OCIDateTimeSysTimeStamp---------------------
        !           952: sword OCIDateTimeSysTimeStamp(dvoid *hndl, OCIError *err, 
        !           953:               OCIDateTime *sys_date );
        !           954:  
        !           955: NAME: OCIDateTimeSysTimeStamp - Returns system date/time as a TimeStamp with 
        !           956:                       timezone
        !           957: PARAMETERS:
        !           958: hndl (IN) - Session/Env handle. 
        !           959: err (IN/OUT) - error handle. If there is an error, it is
        !           960:                 recorded in 'err' and this function returns OCI_ERROR.
        !           961:                 The error recorded in 'err' can be retrieved by calling
        !           962:                 OCIErrorGet().
        !           963: sys_date (OUT) - Pointer to output timestamp
        !           964:  
        !           965: DESCRIPTION: 
        !           966:         Gets the system current date and time as a timestamp with timezone
        !           967: RETURNS:
        !           968:         OCI_SUCCESS if the function completes successfully.
        !           969:         OCI_INVALID_HANDLE if 'err' is NULL.
        !           970: 
        !           971: 
        !           972: ------------------------------OCIDateTimeIntervalAdd----------------------
        !           973: sword OCIDateTimeIntervalAdd(dvoid *hndl, OCIError *err, OCIDateTime *datetime,
        !           974:         OCIInterval *inter, OCIDateTime *outdatetime);
        !           975: NAME: OCIDateTimeIntervalAdd - Adds an interval to datetime
        !           976: PARAMETERS:
        !           977: hndl (IN) - Session/Env handle.
        !           978: err (IN/OUT) - error handle. If there is an error, it is
        !           979:                 recorded in 'err' and this function returns OCI_ERROR.
        !           980:                 The error recorded in 'err' can be retrieved by calling
        !           981:                 OCIErrorGet().
        !           982: datetime (IN) - pointer to input datetime
        !           983: inter    (IN) - pointer to interval 
        !           984: outdatetime (IN) - pointer to output datetime. The output datetime 
        !           985:                                will be of same type as input datetime
        !           986: DESCRIPTION: 
        !           987:        Adds an interval to a datetime to produce a resulting datetime
        !           988: RETURNS:
        !           989:         OCI_SUCCESS if the function completes successfully.
        !           990:         OCI_INVALID_HANDLE if 'err' is NULL.
        !           991:        OCI_ERROR if:
        !           992:                resulting date is before Jan 1, -4713
        !           993:                resulting date is after Dec 31, 9999
        !           994: 
        !           995: ------------------------------OCIDateTimeIntervalSub----------------------
        !           996: sword OCIDateTimeIntervalSub(dvoid *hndl, OCIError *err, OCIDateTime *datetime,
        !           997:               OCIInterval *inter, OCIDateTime *outdatetime);
        !           998: NAME: OCIDateTimeIntervalSub - Subtracts an interval from a datetime
        !           999: PARAMETERS:
        !          1000: hndl (IN) - Session/Env handle. 
        !          1001: err (IN/OUT) - error handle. If there is an error, it is
        !          1002:                 recorded in 'err' and this function returns OCI_ERROR.
        !          1003:                 The error recorded in 'err' can be retrieved by calling
        !          1004:                 OCIErrorGet().
        !          1005: datetime (IN) - pointer to input datetime
        !          1006: inter    (IN) - pointer to interval 
        !          1007: outdatetime (IN) - pointer to output datetime. The output datetime 
        !          1008:                                will be of same type as input datetime
        !          1009: DESCRIPTION: 
        !          1010:        Subtracts an interval from a datetime and stores the result in a
        !          1011:        datetime
        !          1012: RETURNS:
        !          1013:         OCI_SUCCESS if the function completes successfully.
        !          1014:         OCI_INVALID_HANDLE if 'err' is NULL.
        !          1015:        OCI_ERROR if:
        !          1016:                resulting date is before Jan 1, -4713
        !          1017:                resulting date is after Dec 31, 9999
        !          1018: 
        !          1019: --------------------------- OCIDateTimeConstruct-------------------------
        !          1020: sword OCIDateTimeConstruct(dvoid  *hndl,OCIError *err,OCIDateTime *datetime,
        !          1021:                sb2 year,ub1 month,ub1 day,ub1 hour,ub1 min,ub1 sec,ub4 fsec,
        !          1022:                OraText  *timezone,size_t timezone_length);
        !          1023: 
        !          1024: NAME: OCIDateTimeConstruct - Construct an OCIDateTime. Only the relevant
        !          1025:        fields for the OCIDateTime descriptor types are used.
        !          1026: PARAMETERS:
        !          1027:         hndl (IN) - Session/Env handle. 
        !          1028:         err (IN/OUT) - error handle. If there is an error, it is
        !          1029:                 recorded in 'err' and this function returns OCI_ERROR.
        !          1030:                 The error recorded in 'err' can be retrieved by calling
        !          1031:                 OCIErrorGet().
        !          1032:         datetime (IN) - Pointer to OCIDateTime 
        !          1033:         year      (IN) - year value
        !          1034:         month     (IN) - month value
        !          1035:         day       (IN) - day value        
        !          1036:         hour      (IN) - hour value
        !          1037:         min       (IN) - minute value
        !          1038:         sec       (IN) - second value
        !          1039:         fsec      (IN) - Fractional Second value
        !          1040:         timezone  (IN) - Timezone string
        !          1041:         timezone_length(IN) - Length of timezone string
        !          1042: 
        !          1043: DESCRIPTION:
        !          1044:        Constructs a DateTime descriptor. The type of the datetime is the
        !          1045:        type of the OCIDateTime descriptor. Only the relevant fields based
        !          1046:        on the type are used. For Types with timezone, the date and time
        !          1047:        fields are assumed to be in the local time of the specified timezone.
        !          1048:        If timezone is not specified, then session default timezone is
        !          1049:        assumed.
        !          1050: RETURNS:
        !          1051:         OCI_SUCCESS if the function completes successfully.
        !          1052:         OCI_ERROR if datetime is not valid.
        !          1053: 
        !          1054: ------------------------------OCIDateTimeSubtract-----------------------
        !          1055: sword OCIDateTimeSubtract(dvoid *hndl, OCIError *err, OCIDateTime *indate1, 
        !          1056:                OCIDateTime *indate2, OCIInterval *inter);
        !          1057: NAME: OCIDateTimeSubtract - subtracts two datetimes to return an interval
        !          1058: PARAMETERS:
        !          1059: hndl (IN) - Session/Env handle. 
        !          1060: err (IN/OUT) - error handle. If there is an error, it is
        !          1061:                 recorded in 'err' and this function returns OCI_ERROR.
        !          1062:                 The error recorded in 'err' can be retrieved by calling
        !          1063:                 OCIErrorGet().
        !          1064: indate1(IN) - pointer to subtrahend
        !          1065: indate2(IN) - pointer to minuend
        !          1066: inter  (OUT) - pointer to output interval
        !          1067: DESCRIPTION: 
        !          1068:        Takes two datetimes as input and stores their difference in an 
        !          1069:         interval. The type of the interval is the type of the 'inter'
        !          1070:         descriptor.
        !          1071: RETURNS:
        !          1072:         OCI_SUCCESS if the function completes successfully.
        !          1073:         OCI_INVALID_HANDLE if 'err' is NULL.
        !          1074:        OCI_ERROR if
        !          1075:           datetimes are not comparable.
        !          1076: 
        !          1077: --------------------------- OCIDateTimeToText--------------------------
        !          1078: sword OCIDateTimeToText(dvoid *hndl, OCIError *err, CONST OCIDateTime *date, 
        !          1079:                         CONST OraText *fmt, ub1 fmt_length, ub1 fsprec, 
        !          1080:                         CONST OraText *lang_name, size_t lang_length, 
        !          1081:                         size_t *buf_size, OraText *buf );
        !          1082: NAME: OCIDateTimeToText - OCIDateTime convert date TO String 
        !          1083: PARAMETERS:
        !          1084: hndl (IN) - Session/Env handle. If Session Handle is passed, the 
        !          1085:                    conversion takes place in session NLS_LANGUAGE and
        !          1086:                    session NLS_CALENDAR, otherwise the default is used.
        !          1087: err (IN/OUT) - error handle. If there is an error, it is
        !          1088:                 recorded in 'err' and this function returns OCI_ERROR.
        !          1089:                 The error recorded in 'err' can be retrieved by calling
        !          1090:                 OCIErrorGet().
        !          1091: date (IN) - Oracle datetime to be converted
        !          1092: fmt (IN) - conversion format, if null string pointer (OraText*)0, then
        !          1093:                 the date is converted to a character string in the
        !          1094:                 default format for that type.
        !          1095: fmt_length (IN) - length of the 'fmt' parameter
        !          1096: fsprec (IN) - specifies the fractional second precision in which the
        !          1097:                fractional seconds is returned.
        !          1098: lang_name (IN) - specifies the language in which the names and 
        !          1099:                abbreviations of months and days are returned;
        !          1100:                default language of session is used if 'lang_name' 
        !          1101:                is null i.e. (OraText *)0
        !          1102: lang_length (IN) - length of the 'nls_params' parameter
        !          1103: buf_size (IN/OUT) - size of the buffer; size of the resulting string
        !          1104:                 is returned via this parameter
        !          1105: buf (OUT) - buffer into which the converted string is placed
        !          1106: DESCRIPTION:
        !          1107:         Converts the given date to a string according to the specified format.
        !          1108:         Refer to "TO_DATE" conversion function described in
        !          1109:         "Oracle SQL Language Reference Manual" for a description of format
        !          1110:         and NLS arguments. The converted null-terminated date string is
        !          1111:         stored in the buffer 'buf'.
        !          1112: RETURNS:
        !          1113:         OCI_SUCCESS if the function completes successfully.
        !          1114:         OCI_INVALID_HANDLE if 'err' is NULL.
        !          1115:         OCI_ERROR if
        !          1116:          buffer too small
        !          1117:          invalid format
        !          1118:          unknown language
        !          1119:           overflow error
        !          1120: 
        !          1121: 
        !          1122: ------------------------------OCIDefineArrayOfStruct--------------------------
        !          1123: 
        !          1124: 
        !          1125: OCIDefineArrayOfStruct()
        !          1126: Name
        !          1127: OCI Define for Array of Structures
        !          1128: Purpose
        !          1129: This call specifies additional attributes necessary for a static array define.
        !          1130: Syntax
        !          1131: sword OCIDefineArrayOfStruct ( OCIDefine   *defnp,
        !          1132:                              OCIError    *errhp,
        !          1133:                              ub4         pvskip, 
        !          1134:                              ub4         indskip, 
        !          1135:                              ub4         rlskip,
        !          1136:                              ub4         rcskip );
        !          1137: Comments
        !          1138: This call specifies additional attributes necessary for an array define, used in 
        !          1139: an array of structures (multi-row, multi-column) fetch.
        !          1140: For more information about skip parameters, see the section "Skip Parameters" 
        !          1141: on page 4-17.
        !          1142: Parameters
        !          1143: defnp (IN) - the handle to the define structure which was returned by a call 
        !          1144: to OCIDefineByPos().
        !          1145: errhp (IN) - an error handle which can be passed to OCIErrorGet() for 
        !          1146: diagnostic information in the event of an error.
        !          1147: pvskip (IN) - skip parameter for the next data value.
        !          1148: indskip (IN) - skip parameter for the next indicator location. 
        !          1149: rlskip (IN) - skip parameter for the next return length value.
        !          1150: rcskip (IN) - skip parameter for the next return code.
        !          1151: Related Functions
        !          1152: OCIAttrGet()
        !          1153: 
        !          1154: 
        !          1155: 
        !          1156: 
        !          1157: 
        !          1158: OCIDefineByPos()
        !          1159: Name
        !          1160: OCI Define By Position
        !          1161: Purpose
        !          1162: Associates an item in a select-list with the type and output data buffer. 
        !          1163: Syntax
        !          1164: sb4 OCIDefineByPos ( 
        !          1165:               OCIStmt     *stmtp, 
        !          1166:               OCIDefine   **defnp,
        !          1167:               OCIError    *errhp,
        !          1168:               ub4         position,
        !          1169:               dvoid       *valuep,
        !          1170:               sb4         value_sz,
        !          1171:               ub2         dty,
        !          1172:               dvoid       *indp,
        !          1173:               ub2         *rlenp,
        !          1174:               ub2         *rcodep,
        !          1175:               ub4         mode );
        !          1176: Comments
        !          1177: This call defines an output buffer which will receive data retreived from 
        !          1178: Oracle. The define is a local step which is necessary when a SELECT statement 
        !          1179: returns data to your OCI application.
        !          1180: This call also implicitly allocates the define handle for the select-list item.
        !          1181: Defining attributes of a column for a fetch is done in one or more calls. The 
        !          1182: first call is to OCIDefineByPos(), which defines the minimal attributes 
        !          1183: required to specify the fetch. 
        !          1184: This call takes as a parameter a define handle, which must have been 
        !          1185: previously allocated with a call to OCIHandleAlloc().
        !          1186: Following the call to OCIDefineByPos() additional define calls may be 
        !          1187: necessary for certain data types or fetch modes:
        !          1188: A call to OCIDefineArrayOfStruct() is necessary to set up skip parameters 
        !          1189: for an array fetch of multiple columns.
        !          1190: A call to OCIDefineObject() is necessary to set up the appropriate 
        !          1191: attributes of a named data type fetch. In this case the data buffer pointer 
        !          1192: in ocidefn() is ignored.
        !          1193: Both OCIDefineArrayOfStruct() and OCIDefineObject() must be called 
        !          1194: after ocidefn() in order to fetch multiple rows with a column of named 
        !          1195: data types.
        !          1196: For a LOB define, the buffer pointer must be a lob locator of type 
        !          1197: OCILobLocator , allocated by the OCIDescAlloc() call. LOB locators, and not 
        !          1198: LOB values, are always returned for a LOB column. LOB values can then be 
        !          1199: fetched using OCI LOB calls on the fetched locator.
        !          1200: For NCHAR (fixed and varying length), the buffer pointer must point to an 
        !          1201: array of bytes sufficient for holding the required NCHAR characters. 
        !          1202: Nested table columns are defined and fetched like any other named data type. 
        !          1203: If the mode parameter is this call is set to OCI_DYNAMIC_FETCH, the client 
        !          1204: application can fetch data dynamically at runtime.
        !          1205: Runtime data can be provided in one of two ways:
        !          1206: callbacks using a user-defined function which must be registered with a 
        !          1207: subsequent call to OCIDefineDynamic(). When the client library needs a 
        !          1208: buffer to return the fetched data, the callback will be invoked and the 
        !          1209: runtime buffers provided will return a piece or the whole data. 
        !          1210: a polling mechanism using calls supplied by the OCI. This mode is 
        !          1211: assumed if no callbacks are defined. In this case, the fetch call returns the 
        !          1212: OCI_NEED_DATA error code, and a piecewise polling method is used 
        !          1213: to provide the data.
        !          1214: Related Functions: For more information about using the 
        !          1215: OCI_DYNAMIC_FETCH mode, see the section "Runtime Data 
        !          1216: Allocation and Piecewise Operations" on page 5-16 of Volume 1..
        !          1217: For more information about the define step, see the section "Defining" 
        !          1218: on page 2-30.
        !          1219: Parameters
        !          1220: stmtp (IN) - a handle to the requested SQL query operation.
        !          1221: defnp (IN/OUT) - a pointer to a pointer to a define handle which is implicitly 
        !          1222: allocated by this call.  This handle is used to  store the define information 
        !          1223: for this column.
        !          1224: errhp (IN) - an error handle which can be passed to OCIErrorGet() for 
        !          1225: diagnostic information in the event of an error.
        !          1226: position (IN) - the position of this value in the select list. Positions are 
        !          1227: 1-based and are numbered from left to right. For example, in the SELECT 
        !          1228: statement
        !          1229: SELECT empno, ssn, mgrno FROM employees;
        !          1230: empno is at position 1, ssn is at position 2, and mgrno is at position 3.
        !          1231: valuep (IN/OUT) - a pointer to a buffer or an array of buffers of the type 
        !          1232: specified in the dty parameter. A number of buffers can be specified when 
        !          1233: results for more than one row are desired in a single fetch call.
        !          1234: value_sz (IN) - the size of each valuep buffer in bytes. If the data is stored 
        !          1235: internally in VARCHAR2 format, the number of characters desired, if different 
        !          1236: from the buffer size in bytes, may be additionally specified by the using 
        !          1237: OCIAttrSet(). 
        !          1238: In an NLS conversion environment, a truncation error will be generated if the 
        !          1239: number of bytes specified is insufficient to handle the number of characters 
        !          1240: desired.
        !          1241: dty (IN) - the data type. Named data type (SQLT_NTY) and REF (SQLT_REF) 
        !          1242: are valid only if the environment has been intialized with in object mode. 
        !          1243: indp - pointer to an indicator variable or array. For scalar data types, 
        !          1244: pointer to sb2 or an array of sb2s. Ignored for named data types. For named 
        !          1245: data types, a pointer to a named data type indicator structure or an array of 
        !          1246: named data type indicator structures is associated by a subsequent 
        !          1247: OCIDefineObject() call. 
        !          1248: See the section "Indicator Variables" on page 2-43 for more information about 
        !          1249: indicator variables.
        !          1250: rlenp (IN/OUT) - pointer to array of length of data fetched. Each element in 
        !          1251: rlenp is the length of the data in the corresponding element in the row after 
        !          1252: the fetch. 
        !          1253: rcodep (OUT) - pointer to array of column-level return codes
        !          1254: mode (IN) - the valid modes are:
        !          1255: OCI_DEFAULT. This is the default mode.
        !          1256: OCI_DYNAMIC_FETCH. For applications requiring dynamically 
        !          1257: allocated data at the time of fetch, this mode must be used. The user may 
        !          1258: additionally call OCIDefineDynamic() to set up a callback function that 
        !          1259: will be invoked to receive the dynamically allocated buffers and to set 
        !          1260: up the memory allocate/free callbacks and the context for the callbacks. 
        !          1261: valuep and value_sz are ignored in this mode. 
        !          1262: Related Functions
        !          1263: OCIDefineArrayOfStruct(), OCIDefineDynamic(), OCIDefineObject()
        !          1264: 
        !          1265: 
        !          1266: 
        !          1267: 
        !          1268: OCIDefineDynamic()
        !          1269: Name
        !          1270: OCI Define Dynamic Fetch Attributes
        !          1271: Purpose
        !          1272: This call is used to set the additional attributes required if the 
        !          1273: OCI_DYNAMIC_FETCH mode was selected in OCIDefineByPos(). 
        !          1274: Syntax
        !          1275: sword OCIDefineDynamic( OCIDefine   *defnp,
        !          1276:                       OCIError    *errhp,
        !          1277:                       dvoid       *octxp, 
        !          1278:                       OCICallbackDefine (ocbfp)(
        !          1279:                                   dvoid             *octxp,
        !          1280:                                   OCIDefine         *defnp,
        !          1281:                                   ub4               iter, 
        !          1282:                                   dvoid             **bufpp,
        !          1283:                                   ub4               **alenpp,
        !          1284:                                   ub1               *piecep,
        !          1285:                                   dvoid             **indpp,
        !          1286:                                   ub2               **rcodep)  );
        !          1287: Comments
        !          1288: This call is used to set the additional attributes required if the 
        !          1289: OCI_DYNAMIC_FETCH mode has been selected in a call to 
        !          1290: OCIDefineByPos(). 
        !          1291: When the OCI_DYNAMIC_FETCH mode is selected, buffers will be 
        !          1292: dynamically allocated for REF, and named data type, values to receive the 
        !          1293: data. The pointers to these buffers will be returned. 
        !          1294: If OCI_DYNAMIC_FETCH mode was selected, and the call to 
        !          1295: OCIDefineDynamic() is skipped, then the application can fetch data piecewise 
        !          1296: using OCI calls.
        !          1297: For more information about OCI_DYNAMIC_FETCH mode, see the section 
        !          1298: "Runtime Data Allocation and Piecewise Operations" on page 5-16.
        !          1299: Parameters
        !          1300: defnp (IN/OUT) - the handle to a define structure returned by a call to 
        !          1301: OCIDefineByPos().
        !          1302: errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for 
        !          1303: diagnostic information in the event of an error. 
        !          1304: octxp (IN) - points to a context for the callback function. 
        !          1305: ocbfp (IN) - points to a callback function. This is invoked at runtime to get 
        !          1306: a pointer to the buffer into which the fetched data or a piece of it will be 
        !          1307: retreived. The callback also specifies the indicator, the return code and the 
        !          1308: lengths of the data piece and indicator. The callback has the following 
        !          1309: parameters:
        !          1310: octxp (IN) - a context pointer passed as an argument to all the callback 
        !          1311: functions.
        !          1312: defnp (IN) - the define handle.
        !          1313: iter (IN) - which row of this current fetch.
        !          1314: bufpp (OUT) - returns a pointer to a buffer to store the column value, ie. 
        !          1315: *bufp points to some appropriate storage for the column value.
        !          1316: alenpp (OUT) - returns a pointer to the length of the buffer. *alenpp 
        !          1317: contains the size of the buffer after return from callback. Gets set to 
        !          1318: actual data size after fetch.
        !          1319: piecep (IN/OUT) - returns a piece value, as follows:
        !          1320: The IN value can be OCI_ONE_PIECE, OCI_FIRST_PIECE or 
        !          1321: OCI_NEXT_PIECE.
        !          1322: The OUT value can be OCI_ONE_PIECE if the IN value was 
        !          1323: OCI_ONE_PIECE.
        !          1324: The OUT value can be OCI_ONE_PIECE or OCI_FIRST_PIECE if 
        !          1325: the IN value was OCI_FIRST_PIECE.
        !          1326: The OUT value can only be OCI_NEXT_PIECE or 
        !          1327: OCI_LAST_PIECE if the IN value was OCI_NEXT_PIECE. 
        !          1328: indpp (IN) - indicator variable pointer
        !          1329: rcodep (IN) - return code variable pointer
        !          1330: Related Functions
        !          1331: OCIAttrGet()
        !          1332: OCIDefineObject()
        !          1333: 
        !          1334: 
        !          1335: 
        !          1336: 
        !          1337: OCIDefineObject()
        !          1338: Name
        !          1339: OCI Define Named Data Type attributes
        !          1340: Purpose
        !          1341: Sets up additional attributes necessary for a Named Data Type define.
        !          1342: Syntax
        !          1343: sword OCIDefineObject ( OCIDefine       *defnp,
        !          1344:                       OCIError        *errhp,
        !          1345:                       CONST OCIType   *type,
        !          1346:                       dvoid           **pgvpp, 
        !          1347:                       ub4             *pvszsp, 
        !          1348:                       dvoid           **indpp, 
        !          1349:                       ub4             *indszp );
        !          1350: Comments
        !          1351: This call sets up additional attributes necessary for a Named Data Type define.An error will be returned if this function is called when the OCI environment 
        !          1352: has been initialized in non-Object mode.
        !          1353: This call takes as a paramter a type descriptor object (TDO) of datatype 
        !          1354: OCIType for the named data type being defined.  The TDO can be retrieved 
        !          1355: with a call to OCITypeByName().
        !          1356: See the description of OCIInitialize() on page 13 - 43 for more information 
        !          1357: about initializing the OCI process environment.
        !          1358: Parameters
        !          1359: defnp (IN/OUT) - a define handle previously allocated in a call to 
        !          1360: OCIDefineByPos(). 
        !          1361: errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for 
        !          1362: diagnostic information in the event of an error.
        !          1363: type (IN, optional) - points to the Type Descriptor Object (TDO) which 
        !          1364: describes the type of the program variable. Only used for program variables 
        !          1365: of type SQLT_NTY. This parameter is optional, and may be passed as NULL 
        !          1366: if it is not being used.
        !          1367: pgvpp (IN/OUT) - points to a pointer to a program variable buffer. For an 
        !          1368: array, pgvpp points to an array of pointers. Memory for the fetched named data 
        !          1369: type instance(s) is dynamically allocated in the object cache. At the end of the 
        !          1370: fetch when all the values have been received, pgvpp points to the pointer(s) to
        !          1371: these newly allocated named data type instance(s). The application must call 
        !          1372: OCIObjectMarkDel() to deallocate the named data type instance(s) when they 
        !          1373: are no longer needed. 
        !          1374: pvszsp (IN/OUT) - points to the size of the program variable. For an array, it 
        !          1375: is an array of ub4s. On return points to the size(s) of unpickled fetched 
        !          1376: values.
        !          1377: indpp (IN/OUT) - points to a pointer to the program variable buffer 
        !          1378: containing the parallel indicator structure. For an array, points to an array 
        !          1379: of pointers. Memory is allocated to store the indicator structures in the 
        !          1380: object cache. At the end of the fetch when all values have been received, 
        !          1381: indpp points to the pointer(s) to these newly allocated indicator structure(s).
        !          1382: indszp (IN/OUT) - points to the size(s) of the indicator structure program 
        !          1383: variable. For an array, it is an array of ub4s. On return points to the size(s)
        !          1384: of the unpickled fetched indicator values.
        !          1385: Related Functions
        !          1386: OCIAttrGet()
        !          1387: 
        !          1388: 
        !          1389: 
        !          1390: OCIDescAlloc()
        !          1391: Name
        !          1392: OCI Get DESCriptor or lob locator
        !          1393: Purpose
        !          1394: Allocates storage to hold certain data types. The descriptors can be used as 
        !          1395: bind or define variables.
        !          1396: Syntax
        !          1397: sword OCIDescAlloc ( CONST dvoid   *parenth,
        !          1398:                    dvoid         **descpp, 
        !          1399:                    ub4           type,
        !          1400:                    size_t        xtramem_sz,
        !          1401:                    dvoid         **usrmempp);
        !          1402: Comments
        !          1403: Returns a pointer to an allocated and initialized structure, corresponding to 
        !          1404: the type specified in type. A non-NULL descriptor or LOB locator is returned 
        !          1405: on success. No diagnostics are available on error.
        !          1406: This call returns OCI_SUCCESS if successful, or OCI_INVALID_HANDLE if 
        !          1407: an out-of-memory error occurs. 
        !          1408: Parameters
        !          1409: parenth (IN) - an environment handle. 
        !          1410: descpp (OUT) - returns a descriptor or LOB locator of desired type. 
        !          1411: type (IN) - specifies the type of descriptor or LOB locator to be allocated. 
        !          1412: The specific types are:
        !          1413: OCI_DTYPE_SNAP - specifies generation of snapshot descriptor of C 
        !          1414: type - OCISnapshot
        !          1415: OCI_DTYPE_LOB - specifies generation of a LOB data type locator of C 
        !          1416: type - OCILobLocator
        !          1417: OCI_DTYPE_RSET - specifies generation of a descriptor of C type 
        !          1418: OCIResult that references a result set (a number of rows as a result of a 
        !          1419: query). This descriptor is bound to a bind variable of data type 
        !          1420: SQLT_RSET (result set). The descriptor has to be converted into a 
        !          1421: statement handle using a function - OCIResultSetToStmt() - which can 
        !          1422: then be passed to OCIDefineByPos() and OCIStmtFetch() to retrieve the 
        !          1423: rows of the result set.
        !          1424: OCI_DTYPE_ROWID - specifies generation of a ROWID descriptor of C 
        !          1425: type OCIRowid.
        !          1426: OCI_DTYPE_COMPLEXOBJECTCOMP - specifies generation of a 
        !          1427: complex object retrieval descriptor of C type 
        !          1428: OCIComplexObjectComp.
        !          1429: xtramemsz (IN) - specifies an amount of user memory to be allocated for use 
        !          1430: by the application. 
        !          1431: usrmempp (OUT) - returns a pointer to the user memory of size xtramemsz 
        !          1432: allocated by the call for the user. 
        !          1433: Related Functions
        !          1434: OCIDescFree()
        !          1435: 
        !          1436: 
        !          1437: 
        !          1438: 
        !          1439: OCIDescFree()
        !          1440: Name
        !          1441: OCI Free DESCriptor
        !          1442: Purpose
        !          1443: Deallocates a previously allocated descriptor.
        !          1444: Syntax
        !          1445: sword OCIDescFree ( dvoid    *descp,
        !          1446:                   ub4      type);
        !          1447: Comments
        !          1448: This call frees up storage associated with the descriptor, corresponding to the
        !          1449: type specified in type. Returns OCI_SUCCESS or OCI_INVALID_HANDLE. 
        !          1450: All descriptors must be explicitly deallocated. OCI will not deallocate a 
        !          1451: descriptor if the environment handle is deallocated.
        !          1452: Parameters
        !          1453: descp (IN) - an allocated descriptor. 
        !          1454: type (IN) - specifies the type of storage to be freed. The specific types are: 
        !          1455: OCI_DTYPE_SNAP - snapshot descriptor
        !          1456: OCI_DTYPE_LOB - a LOB data type descriptor
        !          1457: OCI_DTYPE_RSET - a descriptor that references a result set (a number 
        !          1458: of rows as a result of a query).
        !          1459: OCI_DTYPE_ROWID - a ROWID descriptor
        !          1460: OCI_DTYPE_COMPLEXOBJECTCOMP - a complex object retrieval 
        !          1461: descriptor
        !          1462: Related Functions
        !          1463: OCIDescAlloc()
        !          1464: 
        !          1465: 
        !          1466: 
        !          1467: OCIDescribeAny()
        !          1468: Name
        !          1469: OCI DeSCribe Any
        !          1470: Purpose
        !          1471: Describes existing schema objects.
        !          1472: Syntax
        !          1473: sword OCIDescribeAny ( OCISvcCtx     *svchp,
        !          1474:                      OCIError      *errhp,
        !          1475:                      dvoid         *objptr,
        !          1476:                      ub4           objnm_len,
        !          1477:                     ub1           objptr_typ,
        !          1478:                      ub1          info_level,
        !          1479:                     ub1           objtype,
        !          1480:                      OCIDesc       *dschp );
        !          1481: Comments
        !          1482: This is a generic describe call that describes existing schema objects: tables,
        !          1483: views, synonyms, procedures, functions, packages, sequences, and types. As a 
        !          1484: result of this call, the describe handle is populated with the object-specific 
        !          1485: attributes which can be obtained through an OCIAttrGet() call.
        !          1486: An OCIParamGet() on the describe handle returns a parameter descriptor for a 
        !          1487: specified position. Parameter positions begin with 1. Calling OCIAttrGet() on 
        !          1488: the parameter descriptor returns the specific attributes of a stored procedure 
        !          1489: or function parameter or a table column descriptor as the case may be. 
        !          1490: These subsequent calls do not need an extra round trip to the server because 
        !          1491: the entire schema object description cached on the client side by 
        !          1492: OCIDescribeAny(). Calling OCIAttrGet() on the describe handle can also return 
        !          1493: the total number of positions.
        !          1494: See the section "Describing" on page 2-33 for more information about describe 
        !          1495: operations.
        !          1496: Parameters
        !          1497: TO BE UPDATED
        !          1498: svchp (IN/OUT) - a service context handle.
        !          1499: errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for 
        !          1500: diagnostic information in the event of an error.
        !          1501: objptr (IN) - the name of the object (a null-terminated string) to be 
        !          1502: described. Only procedure or function names are valid when connected to an 
        !          1503: Oracle7 Server.
        !          1504: objptr_len (IN) - the length of the string. Must be non-zero.
        !          1505: objptr_typ (IN) - Must be OCI_OTYPE_NAME, OCI_OTYPE_REF, or OCI_OTYPE_PTR.
        !          1506: info_level (IN) - reserved for future extensions. Pass OCI_DEFAULT.
        !          1507: objtype (IN/OUT) - object type.
        !          1508: dschp (IN/OUT) - a describe handle that is populated with describe 
        !          1509: information about the object after the call.
        !          1510: Related Functions
        !          1511: OCIAttrGet()
        !          1512: 
        !          1513: 
        !          1514: 
        !          1515: OCIEnvCreate()
        !          1516: Name
        !          1517: OCI ENVironment CREATE
        !          1518: Purpose
        !          1519: This function creates and initializes an environment for the rest of
        !          1520: the OCI functions to work under.  This call is a replacement for both
        !          1521: the OCIInitialize and OCIEnvInit calls.
        !          1522: Syntax
        !          1523: sword OCIEnvCreate  ( OCIEnv        **envhpp, 
        !          1524:                       ub4           mode, 
        !          1525:                       CONST dvoid   *ctxp, 
        !          1526:                       CONST dvoid   *(*malocfp) 
        !          1527:                                     (dvoid *ctxp, 
        !          1528:                                         size_t size), 
        !          1529:                       CONST dvoid   *(*ralocfp) 
        !          1530:                                     (dvoid *ctxp, 
        !          1531:                                        dvoid *memptr, 
        !          1532:                                        size_t newsize), 
        !          1533:                       CONST void    (*mfreefp) 
        !          1534:                                     ( dvoid *ctxp, 
        !          1535:                                        dvoid *memptr))
        !          1536:                       size_t    xtramemsz,
        !          1537:                       dvoid     **usrmempp );
        !          1538:  
        !          1539: Comments
        !          1540: This call creates an environment for all the OCI calls using the modes
        !          1541: specified by the user. This call can be used instead of the two calls
        !          1542: OCIInitialize and OCIEnvInit. This function returns an environment handle
        !          1543: which is then used by the remaining OCI functions. There can be multiple
        !          1544: environments in OCI each with its own environment modes.  This function 
        !          1545: also performs any process level initialization if required by any mode.
        !          1546: For example if the user wants to initialize an environment as OCI_THREADED,
        !          1547: then all libraries that are used by OCI are also initialized in the
        !          1548: threaded mode. 
        !          1549: 
        !          1550: This call should be invoked before anny other OCI call and should be used
        !          1551: instead of the OCIInitialize and OCIEnvInit calls. This is the recommended
        !          1552: call, although OCIInitialize and OCIEnvInit calls will still be supported
        !          1553: for backward compatibility. 
        !          1554:  
        !          1555: envpp (OUT) - a pointer to a handle to the environment. 
        !          1556: mode (IN) - specifies initialization of the mode. The valid modes are:
        !          1557: OCI_DEFAULT - default mode.
        !          1558: OCI_THREADED - threaded environment. In this mode, internal data 
        !          1559: structures are protected from concurrent accesses by multiple threads. 
        !          1560: OCI_OBJECT - will use navigational object interface. 
        !          1561: ctxp (IN) - user defined context for the memory call back routines. 
        !          1562: malocfp (IN) - user-defined memory allocation function. If mode is 
        !          1563: OCI_THREADED, this memory allocation routine must be thread safe.
        !          1564: ctxp - context pointer for the user-defined memory allocation function.
        !          1565: size - size of memory to be allocated by the user-defined memory 
        !          1566: allocation function
        !          1567: ralocfp (IN) - user-defined memory re-allocation function. If mode is 
        !          1568: OCI_THREADED, this memory allocation routine must be thread safe.
        !          1569: ctxp - context pointer for the user-defined memory reallocation 
        !          1570: function.
        !          1571: memp - pointer to memory block
        !          1572: newsize - new size of memory to be allocated
        !          1573: mfreefp (IN) - user-defined memory free function. If mode is 
        !          1574: OCI_THREADED, this memory free routine must be thread safe.
        !          1575: ctxp - context pointer for the user-defined memory free function.
        !          1576: memptr - pointer to memory to be freed
        !          1577: xtramemsz (IN) - specifies the amount of user memory to be allocated. 
        !          1578: usrmempp (OUT) - returns a pointer to the user memory of size xtramemsz 
        !          1579: allocated by the call for the user.
        !          1580: 
        !          1581: Example
        !          1582: 
        !          1583: Related Functions
        !          1584: OCIInitialize, OCIEnvInit
        !          1585: 
        !          1586: OCIEnvInit()
        !          1587: Name
        !          1588: OCI INITialize environment
        !          1589: Purpose
        !          1590: This call initializes the OCI environment handle.
        !          1591: Syntax
        !          1592: sword OCIEnvInit ( OCIEnv    **envp,
        !          1593:                  ub4       mode,
        !          1594:                  size_t    xtramemsz,
        !          1595:                  dvoid     **usrmempp );
        !          1596: Comments
        !          1597: Initializes the OCI environment handle. No changes are done on an initialized 
        !          1598: handle. If OCI_ERROR or OCI_SUCCESS_WITH_INFO is returned, the 
        !          1599: environment handle can be used to obtain ORACLE specific errors and 
        !          1600: diagnostics.
        !          1601: This call is processed locally, without a server round-trip.
        !          1602: Parameters
        !          1603: envpp (OUT) - a pointer to a handle to the environment. 
        !          1604: mode (IN) - specifies initialization of an environment mode. The only valid 
        !          1605: mode is OCI_DEFAULT for default mode
        !          1606: xtramemsz (IN) - specifies the amount of user memory to be allocated. 
        !          1607: usrmempp (OUT) - returns a pointer to the user memory of size xtramemsz 
        !          1608: allocated by the call for the user.
        !          1609: Example
        !          1610: See the description of OCISessionBegin() on page 13-84 for an example showing 
        !          1611: the use of OCIEnvInit(). 
        !          1612: Related Functions
        !          1613: 
        !          1614: 
        !          1615: 
        !          1616: 
        !          1617: OCIErrorGet()
        !          1618: Name
        !          1619: OCI Get Diagnostic Record
        !          1620: Purpose
        !          1621: Returns an error message in the buffer provided and an ORACLE error.
        !          1622: Syntax
        !          1623: sword OCIErrorGet ( dvoid      *hndlp, 
        !          1624:                   ub4        recordno,
        !          1625:                   OraText       *sqlstate,
        !          1626:                   ub4        *errcodep, 
        !          1627:                   OraText       *bufp,
        !          1628:                   ub4        bufsiz,
        !          1629:                   ub4        type );
        !          1630: Comments
        !          1631: Returns an error message in the buffer provided and an ORACLE error. 
        !          1632: Currently does not support SQL state. This call can be called a multiple 
        !          1633: number of times if there are more than one diagnostic record for an error.
        !          1634: The error handle is originally allocated with a call to OCIHandleAlloc().
        !          1635: Parameters
        !          1636: hndlp (IN) - the error handle, in most cases, or the environment handle (for 
        !          1637: errors on OCIEnvInit(), OCIHandleAlloc()).
        !          1638: recordno (IN) - indicates the status record from which the application seeks 
        !          1639: info. Starts from 1. 
        !          1640: sqlstate (OUT) - Not supported in Version 8.0.
        !          1641: errcodep (OUT) - an ORACLE Error is returned.
        !          1642: bufp (OUT) - the error message text is returned.
        !          1643: bufsiz (IN) - the size of the buffer provide to get the error message.
        !          1644: type (IN) - the type of the handle.
        !          1645: Related Functions
        !          1646: OCIHandleAlloc()
        !          1647: 
        !          1648: OCIExtractInit
        !          1649: Name
        !          1650: OCI Extract Initialize 
        !          1651: Purpose
        !          1652: This function initializes the parameter manager. 
        !          1653: Syntax
        !          1654: sword OCIExtractInit(dvoid *hndl, OCIError *err);
        !          1655: Comments
        !          1656: It must be called before calling any other parameter manager routine. The NLS 
        !          1657: information is stored inside the parameter manager context and used in 
        !          1658: subsequent calls to OCIExtract routines.
        !          1659: Returns OCI_SUCCESS, OCI_INVALID_HANDLE, or OCI_ERROR
        !          1660: Parameters
        !          1661: hndl (IN/OUT) - The OCI environment or session handle.
        !          1662: err (IN/OUT) - The OCI error handle. If there is an error, it is recorded in 
        !          1663:                err and this function returns OCI_ERROR. Diagnostic information 
        !          1664:                can be obtained by calling OCIErrorGet().
        !          1665: Related Functions
        !          1666: OCIExtractTerm()
        !          1667: 
        !          1668: OCIExtractTerm
        !          1669: Name
        !          1670: OCI Extract Terminate
        !          1671: Purpose
        !          1672: This function releases all dynamically allocated storage and may perform 
        !          1673: other internal bookkeeping functions.
        !          1674: Syntax
        !          1675: sword OCIExtractTerm(dvoid *hndl, OCIError *err);
        !          1676: Comments
        !          1677: It must be called when the parameter manager is no longer being used.
        !          1678: Returns OCI_SUCCESS, OCI_INVALID_HANDLE, or OCI_ERROR
        !          1679: Parameters
        !          1680: hndl (IN/OUT) - The OCI environment or session handle.
        !          1681: err (IN/OUT) - The OCI error handle. If there is an error, it is recorded in 
        !          1682:                err and this function returns OCI_ERROR. Diagnostic information 
        !          1683:                can be obtained by calling OCIErrorGet().
        !          1684: Related Functions
        !          1685: OCIExtractInit()
        !          1686: 
        !          1687: OCIExtractReset
        !          1688: Name
        !          1689: OCI Extract Reset
        !          1690: Purpose
        !          1691: The memory currently used for parameter storage, key definition storage, and 
        !          1692: parameter value lists is freed and the structure is reinitialized.
        !          1693: Syntax
        !          1694: sword OCIExtractReset(dvoid *hndl, OCIError *err);
        !          1695: Comments
        !          1696: Returns OCI_SUCCESS, OCI_INVALID_HANDLE, or OCI_ERROR
        !          1697: Parameters
        !          1698: hndl (IN/OUT) - The OCI environment or session handle.
        !          1699: err (IN/OUT) - The OCI error handle. If there is an error, it is recorded in 
        !          1700:                err and this function returns OCI_ERROR. Diagnostic information 
        !          1701:                can be obtained by calling OCIErrorGet().
        !          1702: Related Functions
        !          1703: 
        !          1704: OCIExtractSetNumKeys
        !          1705: Name
        !          1706: OCI Extract Set Number of Keys
        !          1707: Purpose
        !          1708: Informs the parameter manager of the number of keys that will be registered.
        !          1709: Syntax
        !          1710: sword OCIExtractSetNumKeys(dvoid *hndl, OCIError *err, uword numkeys);
        !          1711: Comments
        !          1712: This routine must be called prior to the first call of OCIExtractSetKey().  
        !          1713: Returns OCI_SUCCESS, OCI_INVALID_HANDLE, or OCI_ERROR
        !          1714: Parameters
        !          1715: hndl (IN/OUT) - The OCI environment or session handle.
        !          1716: err (IN/OUT) - The OCI error handle. If there is an error, it is recorded in 
        !          1717:                err and this function returns OCI_ERROR. Diagnostic information 
        !          1718:                can be obtained by calling OCIErrorGet().
        !          1719: numkeys (IN) - The number of keys that will be registered with 
        !          1720:                OCIExtractSetKey().
        !          1721: Related Functions
        !          1722: OCIExtractSetKey()
        !          1723: 
        !          1724: OCIExtractSetKey
        !          1725: Name
        !          1726: OCI Extract Set Key definition
        !          1727: Purpose
        !          1728: Registers information about a key with the parameter manager.
        !          1729: Syntax
        !          1730: sword OCIExtractSetKey(dvoid *hndl, OCIError *err, CONST OraText *name, 
        !          1731:                        ub1 type, ub4 flag, CONST dvoid *defval, 
        !          1732:                        CONST sb4 *intrange, CONST OraText *CONST *strlist);
        !          1733: Comments
        !          1734: This routine must be called after calling OCIExtractSetKey() and before 
        !          1735: calling OCIExtractFromFile() or OCIExtractFromStr().  
        !          1736: Returns OCI_SUCCESS, OCI_INVALID_HANDLE, or OCI_ERROR
        !          1737: Parameters
        !          1738: hndl (IN/OUT) - The OCI environment or session handle.
        !          1739: err (IN/OUT) - The OCI error handle. If there is an error, it is recorded in 
        !          1740:                err and this function returns OCI_ERROR. Diagnostic information 
        !          1741:                can be obtained by calling OCIErrorGet().
        !          1742: name (IN) - The name of the key.
        !          1743: type (IN) - The type of the key (OCI_EXTRACT_TYPE_INTEGER, 
        !          1744:             OCI_EXTRACT_TYPE_OCINUM, OCI_EXTRACT_TYPE_STRING, or 
        !          1745:             OCI_EXTRACT_TYPE_BOOLEAN).
        !          1746: flag (IN) - Set to OCI_EXTRACT_MULTIPLE if the key can take multiple values 
        !          1747:             or 0 otherwise.
        !          1748: defval (IN) - Set to the default value for the key.  May be NULL if there is 
        !          1749:                no default.  A string default must be a (text*) type, an 
        !          1750:                integer default must be an (sb4*) type, and a boolean default 
        !          1751:                must be a (ub1*) type.
        !          1752: intrange (IN) - Starting and ending values for the allowable range of integer 
        !          1753:                 values.  May be NULL if the key is not an integer type or if 
        !          1754:                 all integer values are acceptable.
        !          1755: strlist (IN) - List of all acceptable text strings for the key.  May be NULL 
        !          1756:                if the key is not a string type or if all text values are 
        !          1757:                acceptable.
        !          1758: Related Functions
        !          1759: OCIExtractSetNumKeys()
        !          1760: 
        !          1761: OCIExtractFromFile
        !          1762: Name
        !          1763: OCI Extract parameters From File
        !          1764: Purpose
        !          1765: The keys and their values in the given file are processed. 
        !          1766: Syntax
        !          1767: sword OCIExtractFromFile(dvoid *hndl, OCIError *err, ub4 flag, 
        !          1768: OraText *filename);
        !          1769: Comments
        !          1770: Returns OCI_SUCCESS, OCI_INVALID_HANDLE, or OCI_ERROR
        !          1771: Parameters
        !          1772: hndl (IN/OUT) - The OCI environment or session handle.
        !          1773: err (IN/OUT) - The OCI error handle. If there is an error, it is recorded in 
        !          1774:                err and this function returns OCI_ERROR. Diagnostic information 
        !          1775:                can be obtained by calling OCIErrorGet().
        !          1776: flag (IN) - Zero or has one or more of the following bits set: 
        !          1777:            OCI_EXTRACT_CASE_SENSITIVE, OCI_EXTRACT_UNIQUE_ABBREVS, or 
        !          1778:            OCI_EXTRACT_APPEND_VALUES. 
        !          1779: filename (IN) - Null-terminated filename string.
        !          1780: Related Functions
        !          1781: 
        !          1782: OCIExtractFromStr
        !          1783: Name
        !          1784: OCI Extract parameters From String
        !          1785: Purpose
        !          1786: The keys and their values in the given string are processed. 
        !          1787: Syntax
        !          1788: sword OCIExtractFromStr(dvoid *hndl, OCIError *err, ub4 flag, OraText *input);
        !          1789: Comments
        !          1790: Returns OCI_SUCCESS, OCI_INVALID_HANDLE, or OCI_ERROR
        !          1791: Parameters
        !          1792: hndl (IN/OUT) - The OCI environment or session handle.
        !          1793: err (IN/OUT) - The OCI error handle. If there is an error, it is recorded in 
        !          1794:                err and this function returns OCI_ERROR. Diagnostic information 
        !          1795:                can be obtained by calling OCIErrorGet().
        !          1796: flag (IN) - Zero or has one or more of the following bits set: 
        !          1797:            OCI_EXTRACT_CASE_SENSITIVE, OCI_EXTRACT_UNIQUE_ABBREVS, or 
        !          1798:            OCI_EXTRACT_APPEND_VALUES. 
        !          1799: input (IN) - Null-terminated input string.
        !          1800: Related Functions
        !          1801: 
        !          1802: OCIExtractToInt
        !          1803: Name
        !          1804: OCI Extract To Integer
        !          1805: Purpose
        !          1806: Gets the integer value for the specified key.
        !          1807: Syntax
        !          1808: sword OCIExtractToInt(dvoid *hndl, OCIError *err, OraText *keyname, uword valno, 
        !          1809:                       sb4 *retval);
        !          1810: Comments
        !          1811: The valno'th value (starting with 0) is returned.
        !          1812: Returns OCI_SUCCESS, OCI_INVALID_HANDLE, OCI_NO_DATA, or OCI_ERROR. 
        !          1813: OCI_NO_DATA means that there is no valno'th value for this key.
        !          1814: Parameters
        !          1815: hndl (IN) - The OCI environment or session handle.
        !          1816: err (IN/OUT) - The OCI error handle. If there is an error, it is recorded in 
        !          1817:                err and this function returns OCI_ERROR. Diagnostic information 
        !          1818:                can be obtained by calling OCIErrorGet().
        !          1819: keyname (IN) - Key name.
        !          1820: valno (IN) - Which value to get for this key.
        !          1821: retval (OUT) - The actual integer value.
        !          1822: Related Functions
        !          1823: 
        !          1824: OCIExtractToBool
        !          1825: Name
        !          1826: OCI Extract To Boolean
        !          1827: Purpose
        !          1828: Gets the boolean value for the specified key. 
        !          1829: Syntax
        !          1830: sword OCIExtractToBool(dvoid *hndl, OCIError *err, OraText *keyname, 
        !          1831:                        uword valno, ub1 *retval);
        !          1832: Comments
        !          1833: The valno'th value (starting with 0) is returned.
        !          1834: Returns OCI_SUCCESS, OCI_INVALID_HANDLE, OCI_NO_DATA, or OCI_ERROR. 
        !          1835: OCI_NO_DATA means that there is no valno'th value for this key.
        !          1836: Parameters
        !          1837: hndl (IN) - The OCI environment or session handle.
        !          1838: err (IN/OUT) - The OCI error handle. If there is an error, it is recorded in 
        !          1839:                err and this function returns OCI_ERROR. Diagnostic information 
        !          1840:                can be obtained by calling OCIErrorGet().
        !          1841: keyname (IN) - Key name.
        !          1842: valno (IN) - Which value to get for this key.
        !          1843: retval (OUT) - The actual boolean value.
        !          1844: Related Functions
        !          1845: 
        !          1846: OCIExtractToStr
        !          1847: Name
        !          1848: OCI Extract To String
        !          1849: Purpose
        !          1850: Gets the string value for the specified key.
        !          1851: Syntax
        !          1852: sword OCIExtractToStr(dvoid *hndl, OCIError *err, OraText *keyname, uword valno, 
        !          1853:                       OraText *retval, uword buflen);
        !          1854: Comments
        !          1855: The valno'th value (starting with 0) is returned.
        !          1856: Returns OCI_SUCCESS, OCI_INVALID_HANDLE, OCI_NO_DATA, or OCI_ERROR. 
        !          1857: OCI_NO_DATA means that there is no valno'th value for this key.
        !          1858: Parameters
        !          1859: hndl (IN) - The OCI environment or session handle.
        !          1860: err (IN/OUT) - The OCI error handle. If there is an error, it is recorded in 
        !          1861:                err and this function returns OCI_ERROR. Diagnostic information 
        !          1862:                can be obtained by calling OCIErrorGet().
        !          1863: keyname (IN) - Key name.
        !          1864: valno (IN) - Which value to get for this key.
        !          1865: retval (OUT) - The actual null-terminated string value.
        !          1866: buflen (IN) - The length of the buffer for retval.
        !          1867: Related Functions
        !          1868: 
        !          1869: Note: The following OCIExtract functions are unavailable in this release
        !          1870: 
        !          1871: OCIExtractToOCINum
        !          1872: Name
        !          1873: OCI Extract To OCI Number
        !          1874: Purpose
        !          1875: Gets the OCINumber value for the specified key.
        !          1876: Syntax
        !          1877: sword OCIExtractToOCINum(dvoid *hndl, OCIError *err, OraText *keyname, 
        !          1878:                          uword valno, OCINumber *retval);
        !          1879: Comments
        !          1880: The valno'th value (starting with 0) is returned.
        !          1881: Returns OCI_SUCCESS, OCI_INVALID_HANDLE, OCI_NO_DATA, or OCI_ERROR. 
        !          1882: OCI_NO_DATA means that there is no valno'th value for this key.
        !          1883: Parameters
        !          1884: hndl (IN) - The OCI environment or session handle.
        !          1885: err (IN/OUT) - The OCI error handle. If there is an error, it is recorded in 
        !          1886:                err and this function returns OCI_ERROR. Diagnostic information 
        !          1887:                can be obtained by calling OCIErrorGet().
        !          1888: keyname (IN) - Key name.
        !          1889: valno (IN) - Which value to get for this key.
        !          1890: retval (OUT) - The actual OCINumber value.
        !          1891: Related Functions
        !          1892: 
        !          1893: OCIExtractToList
        !          1894: Name
        !          1895: OCI Extract To parameter List
        !          1896: Purpose
        !          1897: Generates a list of parameters from the parameter structures that are stored 
        !          1898: in memory. 
        !          1899: Syntax
        !          1900: sword OCIExtractToList(dvoid *hndl, OCIError *err, uword *numkeys);
        !          1901: Comments
        !          1902: Must be called before OCIExtractValues() is called.
        !          1903: Returns OCI_SUCCESS, OCI_INVALID_HANDLE, or OCI_ERROR
        !          1904: Parameters
        !          1905: hndl (IN) - The OCI environment or session handle.
        !          1906: err (IN/OUT) - The OCI error handle. If there is an error, it is recorded in 
        !          1907:                err and this function returns OCI_ERROR. Diagnostic information 
        !          1908:                can be obtained by calling OCIErrorGet().
        !          1909: numkeys (OUT) - Number of distinct keys stored in memory.
        !          1910: Related Functions
        !          1911: OCIExtractFromList()
        !          1912: 
        !          1913: OCIExtractFromList
        !          1914: Name
        !          1915: OCI Extract From parameter List
        !          1916: Purpose
        !          1917: Generates a list of values for the a parameter in the parameter list.
        !          1918: Syntax
        !          1919: sword OCIExtractFromList(dvoid *hndl, OCIError *err, uword index, OraText *name, 
        !          1920:                          ub1 *type, uword *numvals, dvoid ***values);
        !          1921: Comments
        !          1922: Parameters are specified by an index. OCIExtractToList() must be called prior 
        !          1923: to calling this routine to generate the parameter list from the parameter 
        !          1924: structures that are stored in memory. 
        !          1925: Returns OCI_SUCCESS, OCI_INVALID_HANDLE, or OCI_ERROR
        !          1926: Parameters
        !          1927: hndl (IN) - The OCI environment or session handle.
        !          1928: err (IN/OUT) - The OCI error handle. If there is an error, it is recorded in 
        !          1929:                err and this function returns OCI_ERROR. Diagnostic information 
        !          1930:                can be obtained by calling OCIErrorGet().
        !          1931: name (OUT) - Name of the key for the current parameter.
        !          1932: type (OUT) - Type of the current parameter (OCI_EXTRACT_TYPE_STRING, 
        !          1933:              OCI_EXTRACT_TYPE_INTEGER, OCI_EXTRACT_TYPE_OCINUM, or 
        !          1934:              OCI_EXTRACT_TYPE_BOOLEAN)
        !          1935: numvals (OUT) - Number of values for this parameter.
        !          1936: values (OUT) - The values for this parameter.
        !          1937: Related Functions
        !          1938: OCIExtractToList()
        !          1939: 
        !          1940: 
        !          1941: ************************  OCIFileClose() ***********************************
        !          1942:  
        !          1943: Name
        !          1944:  OCIFileClose - Oracle Call Interface FILE i/o CLOSE
        !          1945: 
        !          1946: Purpose
        !          1947:  Close a previously opened file.
        !          1948: 
        !          1949: Syntax
        !          1950:  sword OCIFileClose ( dvoid             *hndl, 
        !          1951:                      OCIError          *err,
        !          1952:                       OCIFileObject     *filep )
        !          1953: 
        !          1954: Comments
        !          1955:  This function will close a previously opened file. If the function succeeds
        !          1956:  then OCI_SUCCESS will be returned, else OCI_ERROR. 
        !          1957:  
        !          1958: Parameters
        !          1959:  hndl  (IN) - the OCI environment or session handle.
        !          1960:  err (OUT) - the OCI error handle
        !          1961:  filep (IN) - the OCIFile file object
        !          1962: 
        !          1963: Related Functions
        !          1964:  OCIFileOpen.  
        !          1965: 
        !          1966: 
        !          1967: 
        !          1968: ********************* OCIFileExists() **************************************
        !          1969: 
        !          1970: Name
        !          1971:  OCIFileExists - Oracle Call Interface FILE i/o EXIST
        !          1972: 
        !          1973: Purpose
        !          1974:  Check to see if the file exists.
        !          1975: 
        !          1976: Syntax
        !          1977:  sword OCIFileExists ( dvoid           *hndl, 
        !          1978:                      OCIError         *err, 
        !          1979:                       OraText          *filename,
        !          1980:                       OraText          *path,
        !          1981:                       ub1              *flag )
        !          1982: 
        !          1983: Comments
        !          1984:  This function will set the flag to TRUE if the file exists else it will
        !          1985:  be set to FALSE.
        !          1986:  The function will return OCI_ERROR if any error is encountered, else
        !          1987:  it will return OCI_ERROR. 
        !          1988: 
        !          1989: Parameters
        !          1990:  hndl(IN) - OCI environment or session handle
        !          1991:  err(OUT) - OCI error handle
        !          1992:  filename(IN) - filename
        !          1993:  path(IN) - path of the file
        !          1994:  flag(OUT) - whether the file exists or not
        !          1995: 
        !          1996: Related Functions.
        !          1997:  None.
        !          1998:      
        !          1999: 
        !          2000:  **************************** OCIFileFlush() ******************************
        !          2001: 
        !          2002: 
        !          2003: Name
        !          2004:  OCIFileFlush - Oracle Call Interface File i/o FLUSH
        !          2005: 
        !          2006: Purpose
        !          2007:  Flush the buffers associated with the file to the disk.
        !          2008: 
        !          2009: Syntax
        !          2010:  sword OCIFileFlush ( dvoid             *hndl, 
        !          2011:                      OCIError          *err,
        !          2012:                       OCIFileObject     *filep )
        !          2013: 
        !          2014: Comments
        !          2015:  The function will return OCI_ERROR if any error is encountered, else
        !          2016:  it will return OCI_ERROR.
        !          2017: 
        !          2018: Parameters 
        !          2019:  hndl (IN) - the OCI environment or session handle.
        !          2020:  err (OUT) - the OCI error handle
        !          2021:  filep (IN) - the OCIFile file object
        !          2022: 
        !          2023: Related Functions
        !          2024:  OCIFileOpen, OCIFileWrite
        !          2025: 
        !          2026: 
        !          2027: 
        !          2028:  *************************** OCIFileGetLength() ****************************
        !          2029: 
        !          2030: Name
        !          2031:  OCIFileGetLength - Oracle Call Interface FILE i/o GET file LENGTH
        !          2032: 
        !          2033: Purpose
        !          2034:  Get the length of a file.
        !          2035: 
        !          2036: Syntax
        !          2037:  OCIFileGetLength(dvoid           *hndl, 
        !          2038:                  OCIError        *err,
        !          2039:                   OraText         *filename,
        !          2040:                   OraText         *path,
        !          2041:                   ubig_ora        *lenp )
        !          2042: 
        !          2043: Comments
        !          2044:  The length of the file will be returned in lenp.
        !          2045:  The function will return OCI_ERROR if any error is encountered, else
        !          2046:  it will return OCI_ERROR.
        !          2047:  
        !          2048: Parameters
        !          2049:  hndl (IN) - the OCI environment or session handle.
        !          2050:  err (OUT) - the OCI error handle.  If  there is an error, it is recorded 
        !          2051:  in err and this function returns OCI_ERROR.  Diagnostic information can be 
        !          2052:  obtained by calling OCIErrorGet().
        !          2053:  filename (IN) - file name.
        !          2054:  path (IN) - path of the file.
        !          2055:  lenp (OUT) - On output, it is the length of the file in bytes.
        !          2056:  is the number of bytes in the file.
        !          2057: 
        !          2058: Related Functions
        !          2059:  None.
        !          2060: 
        !          2061: 
        !          2062: 
        !          2063: ******************************** OCIFileInit() *****************************
        !          2064:    
        !          2065: Name
        !          2066:  OCIFileInit - Oracle Call Interface FILE i/o INITialize
        !          2067: 
        !          2068: Purpose
        !          2069:  Initialize the OCI File I/O package and create the OCIFile context.
        !          2070: 
        !          2071: Syntax
        !          2072:  sword OCIFileInit ( dvoid *hndl, 
        !          2073:                      OCIError *err)
        !          2074: 
        !          2075: Comments
        !          2076:  This function should be called before any of the OCIFile functions are
        !          2077:  used.
        !          2078:  The function will return OCI_ERROR if any error is encountered, else
        !          2079:  it will return OCI_ERROR.
        !          2080:  
        !          2081: Parameters
        !          2082:  hndl(IN) - OCI environment or session handle.
        !          2083:  err(OUT) - OCI error structure.
        !          2084: 
        !          2085: Related Functions
        !          2086:  OCIFileTerm
        !          2087:      
        !          2088: 
        !          2089: 
        !          2090: ********************************* OCIFileOpen() *****************************
        !          2091: 
        !          2092: Name
        !          2093:  OCIFileOpen - Oracle Call Interface File i/o OPEN
        !          2094: 
        !          2095: Purpose
        !          2096:      Open a file.
        !          2097: 
        !          2098: Syntax
        !          2099:  sword OCIFileOpen ( dvoid               *hndl, 
        !          2100:                     OCIError            *err,
        !          2101:                      OCIFileObject      **filep,
        !          2102:                      OraText             *filename,
        !          2103:                      OraText             *path,
        !          2104:                      ub4                  mode,
        !          2105:                      ub4                  create, 
        !          2106:                      ub4                  type )
        !          2107: 
        !          2108: Comments
        !          2109:  OCIFileOpen returns a handle to the open file in filep if the file is
        !          2110:  successfully opened. 
        !          2111:  If one wants to use the standard file objects (stdin, stdout & stderr)
        !          2112:  then OCIFileOpen whould be called with the type filed containing the 
        !          2113:  appropriate type (see the parameter type). If any of the standard files 
        !          2114:  are specified then filename, path, mode and create are ignored.
        !          2115:  The function will return OCI_ERROR if any error is encountered, else
        !          2116:  it will return OCI_ERROR.
        !          2117: 
        !          2118: Parameters
        !          2119:  hndl (OUT) - the OCI environment or session handle.
        !          2120:  err (OUT) - the OCI error handle.  If  there is an error, it is recorded 
        !          2121:  in err and this function returns OCI_ERROR.  Diagnostic information can be 
        !          2122:  obtained by calling OCIErrorGet().
        !          2123:  filep (OUT) - the file object to be returned.
        !          2124:  filename (IN) - file name (NULL terminated string).
        !          2125:  path (IN) - path of the file (NULL terminated string).
        !          2126:  mode - mode in which to open the file (valid modes are OCI_FILE_READONLY,
        !          2127:  OCI_FILE_WRITEONLY, OCI_FILE_READ_WRITE).
        !          2128:  create - should the file be created if it does not exist. Valid values
        !          2129:  are: 
        !          2130:      OCI_FILE_TRUNCATE - create a file regardless of whether or not it exists. 
        !          2131:                         If the file already exists overwrite it.
        !          2132:      OCI_FILE_EXIST - open it if it exists, else fail.
        !          2133:      OCI_FILE_EXCL - fail if the file exists, else create.
        !          2134:      OCI_FILE_CREATE - open the file if it exists, and create it if it doesn't.
        !          2135:      OCI_FILE_APPEND - set the file pointer to the end of the file prior to 
        !          2136:                       writing(this flag can be OR'ed with OCI_FILE_EXIST or
        !          2137:                       OCI_FILE_CREATE).
        !          2138: type - file type. Valid values are OCI_FILE_TEXT, OCI_FILE_BIN, 
        !          2139:        OCI_FILE_STDIN, OCI_FILE_STDOUT and OCI_FILE_STDERR.
        !          2140:        If any of the standard files are specified then filename, path, mode
        !          2141:        and create are ignored.
        !          2142: 
        !          2143: Related Functions.
        !          2144:  OCIFileClose
        !          2145: 
        !          2146: 
        !          2147: 
        !          2148: ************************** OCIFileRead() ************************************
        !          2149:    
        !          2150: Name
        !          2151:  OCIFileRead - Oracle Call Interface FILE i/o READ
        !          2152: 
        !          2153: Purpose
        !          2154:  Read from a file into a buffer.
        !          2155: 
        !          2156: Syntax
        !          2157:  sword OCIFileRead ( dvoid            *hndl, 
        !          2158:                     OCIError         *err,
        !          2159:                      OCIFileObject    *filep,
        !          2160:                      dvoid            *bufp,
        !          2161:                      ub4               bufl,
        !          2162:                      ub4              *bytesread )
        !          2163: 
        !          2164: Comments
        !          2165:  Upto bufl bytes from the file will be read into bufp. The user should
        !          2166:  allocate memory for the buffer.
        !          2167:  The number of bytes read would be in bytesread.
        !          2168:  The function will return OCI_ERROR if any error is encountered, else
        !          2169:  it will return OCI_ERROR.
        !          2170: 
        !          2171: Parameters
        !          2172:  hndl (IN) - the OCI environment or session handle.
        !          2173:  err (OUT) - the OCI error handle.  If  there is an error, it is recorded 
        !          2174:  in err and this function returns OCI_ERROR.  Diagnostic information can be 
        !          2175:  obtained by calling OCIErrorGet().
        !          2176:  filep (IN/OUT) - a File Object that uniquely references the file.
        !          2177:  bufp (IN) - the pointer to a buffer into which the data will be read. The 
        !          2178:  length of the allocated memory is assumed to be bufl. 
        !          2179:  bufl - the length of the buffer in bytes. 
        !          2180:  bytesread (OUT) - the number of bytes read.
        !          2181: 
        !          2182: Related Functions
        !          2183:  OCIFileOpen, OCIFileSeek, OCIFileWrite
        !          2184: 
        !          2185: 
        !          2186: 
        !          2187: ****************************** OCIFileSeek() ******************************
        !          2188: 
        !          2189: Name
        !          2190:  OCIFileSeek - Oracle Call Interface FILE i/o SEEK
        !          2191: 
        !          2192: Purpose
        !          2193:  Perfom a seek to a byte position.
        !          2194: 
        !          2195: Syntax
        !          2196:  sword OCIFileSeek ( dvoid           *hndl, 
        !          2197:                     OCIError        *err,  
        !          2198:                      OCIFileObject   *filep,
        !          2199:                      uword            origin,
        !          2200:                      ubig_ora         offset,
        !          2201:                      sb1              dir)
        !          2202: 
        !          2203: Comments
        !          2204:  The function will return OCI_ERROR if any error is encountered, else
        !          2205:  it will return OCI_ERROR.
        !          2206: 
        !          2207: Parameters
        !          2208:  hndl (IN) - the OCI environment or session handle.
        !          2209:  err (OUT) - the OCI error handle.  If  there is an error, it is recorded 
        !          2210:  in err and this function returns OCI_ERROR.  Diagnostic information can be 
        !          2211:  obtained by calling OCIErrorGet().
        !          2212:  filep (IN/OUT) - a file handle that uniquely references the file.
        !          2213:  origin - The starting point we want to seek from. NOTE: The starting 
        !          2214:  point may be OCI_FILE_SEEK_BEGINNING (beginning), OCI_FILE_SEEK_CURRENT 
        !          2215:  (current position), or OCI_FILE_SEEK_END (end of file). 
        !          2216:  offset - The number of bytes from the origin we want to start reading from. 
        !          2217:  dir - The direction we want to go from the origin. NOTE: The direction 
        !          2218:  can be either OCI_FILE_FORWARD or OCI_FILE_BACKWARD. 
        !          2219:  
        !          2220: Related Function
        !          2221:  OCIFileOpen, OCIFileRead, OCIFileWrite
        !          2222: 
        !          2223: 
        !          2224: 
        !          2225: *************************** OCIFileTerm() **********************************
        !          2226: 
        !          2227: Name
        !          2228:  OCIFileTerm - Oracle Call Interface FILE i/o TERMinate
        !          2229: 
        !          2230: Purpose
        !          2231:  Terminate the OCI File I/O package and destroy the OCI File context.
        !          2232: 
        !          2233: Syntax
        !          2234:  sword OCIFileTerm ( dvoid *hndl, 
        !          2235:                      OCIError *err )
        !          2236: 
        !          2237: Comments
        !          2238:  After this function has been called no OCIFile function should be used.
        !          2239:  The function will return OCI_ERROR if any error is encountered, else
        !          2240:  it will return OCI_ERROR.
        !          2241:  
        !          2242: Parameters
        !          2243:  hndl(IN) - OCI environment or session handle.
        !          2244:  err(OUT) - OCI error structure. 
        !          2245:   
        !          2246: Related Functions 
        !          2247:  OCIFileInit   
        !          2248:  
        !          2249: 
        !          2250: ********************************* OCIFileWrite() **************************** 
        !          2251: 
        !          2252: Name 
        !          2253:  OCIFileWrite - Oracle Call Interface FILE i/o WRITE
        !          2254: 
        !          2255: Purpose
        !          2256:   Write data from buffer into a file.
        !          2257: 
        !          2258: Syntax
        !          2259:  sword OCIFileWrite ( dvoid            *hndl, 
        !          2260:                      OCIError         *err,  
        !          2261:                       OCIFileObject    *filep,
        !          2262:                       dvoid            *bufp, 
        !          2263:                       ub4               buflen
        !          2264:                       ub4              *byteswritten )
        !          2265: 
        !          2266: Comments
        !          2267:  The number of bytes written will be in *byteswritten.
        !          2268:  The function will return OCI_ERROR if any error is encountered, else
        !          2269:  it will return OCI_ERROR.
        !          2270: 
        !          2271: Parameters
        !          2272:  hndl (IN) - the OCI environment or session handle.
        !          2273:  err (OUT) - the OCI error handle.  If  there is an error, it is recorded 
        !          2274:  in err and this function returns OCI_ERROR.  Diagnostic information can be 
        !          2275:  obtained by calling OCIErrorGet().
        !          2276:  filep (IN/OUT) - a file handle that uniquely references the file.
        !          2277:  bufp (IN) - the pointer to a buffer from which the data will be written. 
        !          2278:  The length of the allocated memory is assumed to be the value passed
        !          2279:  in bufl. 
        !          2280:  bufl - the length of the buffer in bytes.
        !          2281:  byteswritten (OUT) - the number of bytes written.
        !          2282:  
        !          2283: Related Functions
        !          2284:  OCIFileOpen, OCIFileSeek, OCIFileRead 
        !          2285: 
        !          2286: 
        !          2287: 
        !          2288: 
        !          2289: 
        !          2290: OCIHandleAlloc() 
        !          2291: Name
        !          2292: OCI Get HaNDLe
        !          2293: Purpose
        !          2294: This call returns a pointer to an allocated and initialized handle.
        !          2295: Syntax
        !          2296: sword OCIHandleAlloc ( CONST dvoid   *parenth,
        !          2297:                      dvoid         **hndlpp, 
        !          2298:                      ub4           type, 
        !          2299:                      size_t        xtramem_sz,
        !          2300:                      dvoid         **usrmempp);
        !          2301: Comments
        !          2302: Returns a pointer to an allocated and initialized structure, corresponding to 
        !          2303: the type specified in type. A non-NULL handle is returned on success. Bind 
        !          2304: handle and define handles are allocated with respect to a statement handle. All
        !          2305: other handles are allocated with respect to an environment handle which is 
        !          2306: passed in as a parent handle.
        !          2307: No diagnostics are available on error. This call returns OCI_SUCCESS if 
        !          2308: successful, or OCI_INVALID_HANDLE if an out-of-memory error occurs.
        !          2309: Handles must be allocated using OCIHandleAlloc() before they can be passed 
        !          2310: into an OCI call.
        !          2311: Parameters
        !          2312: parenth (IN) - an environment or a statement handle. 
        !          2313: hndlpp (OUT) - returns a handle to a handle type. 
        !          2314: type (IN) - specifies the type of handle to be allocated. The specific types 
        !          2315: are: 
        !          2316: OCI_HTYPE_ERROR - specifies generation of an error report handle of 
        !          2317: C type OCIError
        !          2318: OCI_HTYPE_SVCCTX - specifies generation of a service context handle 
        !          2319: of C type OCISvcCtx
        !          2320: OCI_HTYPE_STMT - specifies generation of a statement (application 
        !          2321: request) handle of C type OCIStmt
        !          2322: OCI_HTYPE_BIND - specifies generation of a bind information handle 
        !          2323: of C type OCIBind
        !          2324: OCI_HTYPE_DEFINE - specifies generation of a column definition 
        !          2325: handle of C type OCIDefine
        !          2326: OCI_HTYPE_DESCRIBE  - specifies generation of a select list 
        !          2327: description handle of C type OCIDesc
        !          2328: OCI_HTYPE_SERVER - specifies generation of a server context handle 
        !          2329: of C type OCIServer
        !          2330: OCI_HTYPE_SESSION - specifies generation of an authentication 
        !          2331: context handle of C type OCISession
        !          2332: OCI_HTYPE_TRANS - specifies generation of a transaction context
        !          2333: handle of C type OCITrans
        !          2334: OCI_HTYPE_COMPLEXOBJECT - specifies generation of a complex 
        !          2335: object retrieval handle of C type OCIComplexObject
        !          2336: OCI_HTYPE_SECURITY - specifies generation of a security handle of C 
        !          2337: type OCISecurity
        !          2338: xtramem_sz (IN) - specifies an amount of user memory to be allocated.
        !          2339: usrmempp (OUT) - returns a pointer to the user memory of size xtramemsz 
        !          2340: allocated by the call for the user. 
        !          2341: Related Functions
        !          2342: OCIHandleFree()
        !          2343: 
        !          2344: 
        !          2345: 
        !          2346: OCIHandleFree()
        !          2347: Name
        !          2348: OCI Free HaNDLe
        !          2349: Purpose
        !          2350: This call explicitly deallocates a handle.
        !          2351: Syntax
        !          2352: sword OCIHandleFree ( dvoid     *hndlp,
        !          2353:                     ub4       type);
        !          2354: Comments
        !          2355: This call frees up storage associated with a handle, corresponding to the type 
        !          2356: specified in the type parameter.
        !          2357: This call returns either OCI_SUCCESS or OCI_INVALID_HANDLE.
        !          2358: All handles must be explicitly deallocated. OCI will not deallocate a child 
        !          2359: handle if the parent is deallocated.
        !          2360: Parameters
        !          2361: hndlp (IN) - an opaque pointer to some storage.
        !          2362: type (IN) - specifies the type of storage to be allocated. The specific types are:
        !          2363: OCI_HTYPE_ENV - an environment handle
        !          2364: OCI_HTYPE_ERROR - an error report handle
        !          2365: OCI_HTYPE_SVCCTX - a service context handle
        !          2366: OCI_HTYPE_STMT - a statement (application request) handle
        !          2367: OCI_HTYPE_BIND - a bind information handle
        !          2368: OCI_HTYPE_DEFINE - a column definition handle
        !          2369: OCI_HTYPE_DESCRIBE  - a select list description handle
        !          2370: OCI_HTYPE_SERVER - a server handle
        !          2371: OCI_HTYPE_SESSION - a user authentication handle
        !          2372: OCI_HTYPE_TRANS - a transaction handle
        !          2373: OCI_HTYPE_COMPLEXOBJECT - a complex object retrieval handle
        !          2374: OCI_HTYPE_SECURITY - a security handle
        !          2375: Related Functions
        !          2376: OCIHandleAlloc()
        !          2377: 
        !          2378: 
        !          2379: 
        !          2380: 
        !          2381: OCIInitialize()
        !          2382: Name
        !          2383: OCI Process Initialize
        !          2384: Purpose
        !          2385: Initializes the OCI process environment.
        !          2386: Syntax
        !          2387: sword OCIInitialize ( ub4           mode,
        !          2388:                     CONST dvoid   *ctxp, 
        !          2389:                     CONST dvoid   *(*malocfp) 
        !          2390:                                   ( dvoid *ctxp,
        !          2391:                                     size_t size ),
        !          2392:                     CONST dvoid   *(*ralocfp)
        !          2393:                                   ( dvoid *ctxp,
        !          2394:                                     dvoid *memp,
        !          2395:                                     size_t newsize ),
        !          2396:                     CONST void    (*mfreefp)
        !          2397:                                   ( dvoid *ctxp,
        !          2398:                                     dvoid *memptr ));
        !          2399: Comments
        !          2400: This call initializes the OCI process environment.
        !          2401: OCIInitialize() must be invoked before any other OCI call. 
        !          2402: Parameters
        !          2403: mode (IN) - specifies initialization of the mode. The valid modes are:
        !          2404: OCI_DEFAULT - default mode.
        !          2405: OCI_THREADED - threaded environment. In this mode, internal data 
        !          2406: structures are protected from concurrent accesses by multiple threads. 
        !          2407: OCI_OBJECT - will use navigational object interface. 
        !          2408: ctxp (IN) - user defined context for the memory call back routines. 
        !          2409: malocfp (IN) - user-defined memory allocation function. If mode is 
        !          2410: OCI_THREADED, this memory allocation routine must be thread safe.
        !          2411: ctxp - context pointer for the user-defined memory allocation function.
        !          2412: size - size of memory to be allocated by the user-defined memory 
        !          2413: allocation function
        !          2414: ralocfp (IN) - user-defined memory re-allocation function. If mode is 
        !          2415: OCI_THREADED, this memory allocation routine must be thread safe.
        !          2416: ctxp - context pointer for the user-defined memory reallocation 
        !          2417: function.
        !          2418: memp - pointer to memory block
        !          2419: newsize - new size of memory to be allocated
        !          2420: mfreefp (IN) - user-defined memory free function. If mode is 
        !          2421: OCI_THREADED, this memory free routine must be thread safe.
        !          2422: ctxp - context pointer for the user-defined memory free function.
        !          2423: memptr - pointer to memory to be freed
        !          2424: Example
        !          2425: See the description of OCIStmtPrepare() on page 13-96 for an example showing 
        !          2426: the use of OCIInitialize().
        !          2427: Related Functions
        !          2428: 
        !          2429: --------------------------------OCITerminate------------------------------------
        !          2430: 
        !          2431: OCITerminate()
        !          2432: Name
        !          2433: OCI process Terminate
        !          2434: Purpose
        !          2435: Do cleanup before process termination
        !          2436: Syntax
        !          2437: sword OCITerminate (ub4 mode);
        !          2438: 
        !          2439: Comments
        !          2440: This call performs  OCI related clean up before the OCI process terminates.
        !          2441: If the process is running in shared mode then the OCI process is disconnected
        !          2442: from the shared memory subsystem.
        !          2443: 
        !          2444: OCITerminate() should be the last OCI call in any process.
        !          2445: 
        !          2446: Parameters
        !          2447: mode (IN) - specifies different termination modes.
        !          2448: 
        !          2449: OCI_DEFAULT - default mode.
        !          2450: 
        !          2451: Example
        !          2452: 
        !          2453: Related Functions
        !          2454: OCIInitialize()
        !          2455: 
        !          2456: ---------------------- OCIIntervalAssign --------------------------------- 
        !          2457: sword OCIIntervalAssign(dvoid *hndl, OCIError *err, 
        !          2458:                     CONST OCIInterval *inpinter, OCIInterval *outinter );
        !          2459: 
        !          2460:   DESCRIPTION
        !          2461:     Copies one interval to another to create a replica
        !          2462:   PARAMETERS
        !          2463:      hndl (IN) - Session/Env handle.
        !          2464:     err (IN/OUT) - error handle. If there is an error, it is
        !          2465:                 recorded in 'err' and this function returns OCI_ERROR.
        !          2466:                 The error recorded in 'err' can be retrieved by calling
        !          2467:                 OCIErrorGet().
        !          2468:     (IN)  inpinter - Input Interval 
        !          2469:     (OUT) outinter - Output Interval 
        !          2470:   RETURNS
        !          2471:      OCI_INVALID_HANDLE if 'err' is NULL.
        !          2472:      OCI_SUCCESS otherwise
        !          2473: 
        !          2474:  ---------------------- OCIIntervalCheck ------------------------------------ 
        !          2475: sword OCIIntervalCheck(dvoid *hndl, OCIError *err, CONST OCIInterval *interval,
        !          2476:                         ub4 *valid );
        !          2477: 
        !          2478:   DESCRIPTION
        !          2479:     Checks the validity of an interval
        !          2480:   PARAMETERS
        !          2481:      hndl (IN) - Session/Env handle.
        !          2482:     err (IN/OUT) - error handle. If there is an error, it is
        !          2483:                 recorded in 'err' and this function returns OCI_ERROR.
        !          2484:                 The error recorded in 'err' can be retrieved by calling
        !          2485:                 OCIErrorGet().
        !          2486:     (IN)  interval - Interval to be checked 
        !          2487:     (OUT) valid     - Zero if the interval is valid, else returns an Ored
        !          2488:        combination of the following codes.
        !          2489: 
        !          2490:    Macro name                   Bit number      Error
        !          2491:    ----------                   ----------      -----
        !          2492:    OCI_INTER_INVALID_DAY         0x1           Bad day
        !          2493:    OCI_INTER_DAY_BELOW_VALID     0x2           Bad DAy Low/high bit (1=low)
        !          2494:    OCI_INTER_INVALID_MONTH       0x4           Bad MOnth
        !          2495:    OCI_INTER_MONTH_BELOW_VALID   0x8           Bad MOnth Low/high bit (1=low)
        !          2496:    OCI_INTER_INVALID_YEAR        0x10          Bad YeaR
        !          2497:    OCI_INTER_YEAR_BELOW_VALID    0x20          Bad YeaR Low/high bit (1=low)
        !          2498:    OCI_INTER_INVALID_HOUR        0x40          Bad HouR
        !          2499:    OCI_INTER_HOUR_BELOW_VALID    0x80          Bad HouR Low/high bit (1=low)
        !          2500:    OCI_INTER_INVALID_MINUTE      0x100         Bad MiNute
        !          2501:    OCI_INTER_MINUTE_BELOW_VALID         0x200         Bad MiNute Low/high bit(1=low)
        !          2502:    OCI_INTER_INVALID_SECOND      0x400         Bad SeCond
        !          2503:    OCI_INTER_SECOND_BELOW_VALID  0x800         bad second Low/high bit(1=low)
        !          2504:    OCI_INTER_INVALID_FRACSEC     0x1000        Bad Fractional second
        !          2505:    OCI_INTER_FRACSEC_BELOW_VALID 0x2000        Bad fractional second Low/High
        !          2506: 
        !          2507:        
        !          2508:   RETURNS
        !          2509:     OCI_SUCCESS if interval is okay
        !          2510:     OCI_INVALID_HANDLE if 'err' is NULL.
        !          2511: 
        !          2512:  ---------------------- OCIIntervalCompare ----------------------------------- 
        !          2513: sword OCIIntervalCompare(dvoid *hndl, OCIError *err, OCIInterval *inter1, 
        !          2514:                        OCIInterval *inter2, sword *result );
        !          2515: 
        !          2516:   DESCRIPTION
        !          2517:        Compares two intervals, returns 0 if equal, -1 if inter1 < inter2, 
        !          2518:        1 if inter1 > inter2
        !          2519:   PARAMETERS
        !          2520:      hndl (IN) - Session/Env handle. 
        !          2521:      err (IN/OUT) - error handle. If there is an error, it is
        !          2522:                 recorded in 'err' and this function returns OCI_ERROR.
        !          2523:                 The error recorded in 'err' can be retrieved by calling
        !          2524:                 OCIErrorGet().
        !          2525:      inter1  (IN)   - Interval to be compared 
        !          2526:      inter2  (IN)   - Interval to be compared 
        !          2527:      result  (OUT)  -  comparison result, 0 if equal, -1 if inter1 < inter2, 
        !          2528:                        1 if inter1 > inter2
        !          2529: 
        !          2530:   RETURNS
        !          2531:      OCI_SUCCESS on success
        !          2532:      OCI_INVALID_HANDLE if 'err' is NULL.
        !          2533:      OCI_ERROR if 
        !          2534:        the two input datetimes are not mutually comparable.
        !          2535: 
        !          2536: ---------------------- OCIIntervalDivide ------------------------------------ 
        !          2537: sword OCIIntervalDivide(dvoid *hndl, OCIError *err, OCIInterval *dividend, 
        !          2538:                OCINumber *divisor, OCIInterval *result );
        !          2539:  
        !          2540:   DESCRIPTION
        !          2541:      Divides an interval by an Oracle Number to produce an interval
        !          2542:   PARAMETERS
        !          2543:        hndl (IN) - Session/Env handle. 
        !          2544:      err (IN/OUT) - error handle. If there is an error, it is
        !          2545:                 recorded in 'err' and this function returns OCI_ERROR.
        !          2546:                 The error recorded in 'err' can be retrieved by calling
        !          2547:                 OCIErrorGet().
        !          2548:      dividend  (IN)   - Interval to be divided 
        !          2549:      divisor   (IN)   - Oracle Number dividing `dividend' 
        !          2550:      result    (OUT)  - resulting interval (dividend / divisor) 
        !          2551:   RETURNS
        !          2552:      OCI_SUCCESS on success
        !          2553:      OCI_INVALID_HANDLE if 'err' is NULL.
        !          2554: 
        !          2555:  ---------------------- OCIIntervalFromNumber -------------------- 
        !          2556: sword OCIIntervalFromNumber(dvoid *hndl, OCIError *err, 
        !          2557:                OCIInterval *inter, OCINumber *number);
        !          2558:   DESCRIPTION
        !          2559:     Converts an interval to an Oracle Number
        !          2560:   PARAMETERS
        !          2561:      hndl (IN) - Session/Env handle. 
        !          2562:     err (IN/OUT) - error handle. If there is an error, it is
        !          2563:                 recorded in 'err' and this function returns OCI_ERROR.
        !          2564:                 The error recorded in 'err' can be retrieved by calling
        !          2565:                 OCIErrorGet().
        !          2566:     (OUT)  interval - Interval to be converted 
        !          2567:     (IN) number - Oracle number result  (in years for YEARMONTH interval
        !          2568:                      and in days for DAYSECOND)
        !          2569:   RETURNS
        !          2570:     OCI_SUCCESS on success 
        !          2571:     OCI_INVALID_HANDLE if 'err' is NULL.
        !          2572:     OCI_ERROR on error.
        !          2573:   NOTES
        !          2574:     Fractional portions of the date (for instance, minutes and seconds if
        !          2575:     the unit chosen is hours) will be included in the Oracle number produced.
        !          2576:     Excess precision will be truncated.
        !          2577:  
        !          2578:  ---------------------- OCIIntervalFromText --------------------------------- 
        !          2579: sword OCIIntervalFromText( dvoid *hndl, OCIError *err, CONST OraText *inpstr, 
        !          2580:                size_t str_len, OCIInterval *result );
        !          2581: 
        !          2582:   DESCRIPTION
        !          2583:     Given an interval string produce the interval represented by the string.
        !          2584:     The type of the interval is the type of the 'result' descriptor.
        !          2585:   PARAMETERS
        !          2586: 
        !          2587:      hndl (IN) - Session/Env handle. 
        !          2588:      err (IN/OUT) - error handle. If there is an error, it is
        !          2589:                 recorded in 'err' and this function returns OCI_ERROR.
        !          2590:                 The error recorded in 'err' can be retrieved by calling
        !          2591:                 OCIErrorGet().
        !          2592:     (IN)  inpstr - Input string 
        !          2593:     (IN)  str_len - Length of input string 
        !          2594:     (OUT) result - Resultant interval 
        !          2595:   RETURNS
        !          2596:     OCI_SUCCESS on success
        !          2597:     OCI_INVALID_HANDLE if 'err' is NULL.
        !          2598:     OCI_ERROR if
        !          2599:        there are too many fields in the literal string
        !          2600:        the year is out of range (-4713 to 9999)
        !          2601:        if the month is out of range (1 to 12)
        !          2602:        if the day of month is out of range (1 to 28...31)
        !          2603:        if hour is not in range (0 to 23)
        !          2604:        if hour is not in range (0 to 11)
        !          2605:        if minute is not in range (0 to 59)
        !          2606:        if seconds in minute not in range (0 to 59)
        !          2607:        if seconds in day not in range (0 to 86399)
        !          2608:        if the interval is invalid
        !          2609: 
        !          2610: 
        !          2611:  ---------------------- OCIIntervalGetDaySecond -------------------- 
        !          2612: 
        !          2613:   DESCRIPTION
        !          2614:      Gets values of day second interval
        !          2615:   PARAMETERS
        !          2616:        hndl (IN) - Session/Env handle.
        !          2617:         err (IN/OUT) - error handle. If there is an error, it is
        !          2618:                 recorded in 'err' and this function returns OCI_ERROR.
        !          2619:                 The error recorded in 'err' can be retrieved by calling
        !          2620:                 OCIErrorGet().     
        !          2621:         day     (OUT) - number of days
        !          2622:         hour    (OUT) - number of hours
        !          2623:         min     (OUT) - number of mins
        !          2624:         sec     (OUT) - number of secs
        !          2625:         fsec    (OUT) - number of fractional seconds
        !          2626:        result     (IN)  - resulting interval 
        !          2627:   RETURNS
        !          2628:        OCI_SUCCESS on success
        !          2629:         OCI_INVALID_HANDLE if 'err' is NULL.
        !          2630: 
        !          2631: 
        !          2632:  ---------------------- OCIIntervalGetYearMonth -------------------- 
        !          2633: 
        !          2634:   DESCRIPTION
        !          2635:      Gets year month from an interval
        !          2636:   PARAMETERS
        !          2637:        hndl (IN) - Session/Env handle.
        !          2638:         err (IN/OUT) - error handle. If there is an error, it is
        !          2639:                 recorded in 'err' and this function returns OCI_ERROR.
        !          2640:                 The error recorded in 'err' can be retrieved by calling
        !          2641:                 OCIErrorGet().     
        !          2642:        year    (OUT)   - year value
        !          2643:        month   (OUT)   - month value
        !          2644:        result     (IN)  - resulting interval 
        !          2645:   RETURNS
        !          2646:        OCI_SUCCESS on success
        !          2647:         OCI_INVALID_HANDLE if 'err' is NULL.
        !          2648: 
        !          2649: 
        !          2650: 
        !          2651: -------------------------- OCIIntervalAdd ------------------------------
        !          2652: sword OCIIntervalAdd(dvoid *hndl, OCIError *err, OCIInterval *addend1, 
        !          2653:                        OCIInterval *addend2, OCIInterval *result );
        !          2654: NAME OCIIntervalAdd - Adds two intervals 
        !          2655: PARAMETERS
        !          2656: hndl (IN) - Session/Env handle. 
        !          2657: err (IN/OUT) - error handle. If there is an error, it is
        !          2658:                 recorded in 'err' and this function returns OCI_ERROR.
        !          2659:                 The error recorded in 'err' can be retrieved by calling
        !          2660:                 OCIErrorGet().
        !          2661: addend1  (IN)   - Interval to be added 
        !          2662: addend2  (IN)   - Interval to be added 
        !          2663: result   (OUT)  - resulting interval (addend1 + addend2) 
        !          2664: DESCRIPTION
        !          2665:      Adds two intervals to produce a resulting interval
        !          2666: RETURNS
        !          2667:      OCI_SUCCESS on success
        !          2668:      OCI_ERROR if:
        !          2669:        the two input intervals are not mutually comparable.
        !          2670:        the resulting year would go above SB4MAXVAL
        !          2671:        the resulting year would go below SB4MINVAL
        !          2672:      OCI_INVALID_HANDLE if 'err' is NULL.
        !          2673: NOTES
        !          2674:      The two input intervals must be mutually comparable
        !          2675: 
        !          2676:  ---------------------- OCIIntervalSubtract ------------------------------- 
        !          2677: sword OCIIntervalSubtract(dvoid *hndl, OCIError *err, OCIInterval *minuend, 
        !          2678:                            OCIInterval *subtrahend, OCIInterval *result );
        !          2679: NAME - OCIIntervalSubtract - subtracts two intervals
        !          2680: PARAMETERS
        !          2681: hndl (IN) - Session/Env handle.
        !          2682: err (IN/OUT) - error handle. If there is an error, it is
        !          2683:                 recorded in 'err' and this function returns OCI_ERROR.
        !          2684:                 The error recorded in 'err' can be retrieved by calling
        !          2685:                 OCIErrorGet().     
        !          2686: minuend    (IN)   - interval to be subtracted from 
        !          2687: subtrahend (IN)   - interval subtracted from minuend 
        !          2688: result     (OUT)  - resulting interval (minuend - subtrahend) 
        !          2689: DESCRIPTION
        !          2690:      Subtracts two intervals and stores the result in an interval
        !          2691: RETURNS
        !          2692:        OCI_SUCCESS on success
        !          2693:         OCI_INVALID_HANDLE if 'err' is NULL.
        !          2694:        OCI_ERROR if:
        !          2695:           the two input intervals are not mutually comparable.
        !          2696:           the resulting leading field would go below SB4MINVAL 
        !          2697:           the resulting leading field would go above SB4MAXVAL
        !          2698: 
        !          2699: ---------------------- OCIIntervalMultiply --------------------------------- 
        !          2700: sword OCIIntervalMultiply(dvoid *hndl, OCIError *err, CONST OCIInterval *inter,
        !          2701:                        OCINumber *nfactor, OCIInterval *result );
        !          2702: 
        !          2703:   DESCRIPTION
        !          2704:      Multiplies an interval by an Oracle Number to produce an interval
        !          2705:   PARAMETERS
        !          2706:        hndl (IN) - Session/Env handle. 
        !          2707:      err (IN/OUT) - error handle. If there is an error, it is
        !          2708:                 recorded in 'err' and this function returns OCI_ERROR.
        !          2709:                 The error recorded in 'err' can be retrieved by calling
        !          2710:                 OCIErrorGet().
        !          2711:      inter  (IN)   - Interval to be multiplied 
        !          2712:      nfactor  (IN)   - Oracle Number to be multiplied 
        !          2713:      result   (OUT)  - resulting interval (ifactor * nfactor) 
        !          2714:   RETURNS
        !          2715:      OCI_SUCCESS on success
        !          2716:      OCI_INVALID_HANDLE if 'err' is NULL.
        !          2717:      OCI_ERROR if:
        !          2718:        the resulting year would go above SB4MAXVAL
        !          2719:        the resulting year would go below SB4MINVAL
        !          2720: 
        !          2721: 
        !          2722:  ---------------------- OCIIntervalSetDaySecond -------------------- 
        !          2723: 
        !          2724:   DESCRIPTION
        !          2725:      Sets day second interval
        !          2726:   PARAMETERS
        !          2727:        hndl (IN) - Session/Env handle.
        !          2728:         err (IN/OUT) - error handle. If there is an error, it is
        !          2729:                 recorded in 'err' and this function returns OCI_ERROR.
        !          2730:                 The error recorded in 'err' can be retrieved by calling
        !          2731:                 OCIErrorGet().     
        !          2732:         day     (IN) - number of days
        !          2733:         hour    (IN) - number of hours
        !          2734:         min     (IN) - number of mins
        !          2735:         sec     (IN) - number of secs
        !          2736:         fsec    (IN) - number of fractional seconds
        !          2737:        result     (OUT)  - resulting interval 
        !          2738:   RETURNS
        !          2739:        OCI_SUCCESS on success
        !          2740:         OCI_INVALID_HANDLE if 'err' is NULL.
        !          2741: 
        !          2742: 
        !          2743:  ---------------------- OCIIntervalSetYearMonth -------------------- 
        !          2744: 
        !          2745:   DESCRIPTION
        !          2746:      Sets year month interval
        !          2747:   PARAMETERS
        !          2748:        hndl (IN) - Session/Env handle.
        !          2749:         err (IN/OUT) - error handle. If there is an error, it is
        !          2750:                 recorded in 'err' and this function returns OCI_ERROR.
        !          2751:                 The error recorded in 'err' can be retrieved by calling
        !          2752:                 OCIErrorGet().     
        !          2753:        year    (IN)   - year value
        !          2754:        month   (IN)   - month value
        !          2755:        result     (OUT)  - resulting interval 
        !          2756:   RETURNS
        !          2757:        OCI_SUCCESS on success
        !          2758:         OCI_INVALID_HANDLE if 'err' is NULL.
        !          2759: 
        !          2760: 
        !          2761: ----------------------- OCIIntervalToNumber ---------------------------------
        !          2762: sword OCIIntervalToNumber(dvoid *hndl, OCIError *err, CONST OCIInterval *inter,
        !          2763:                        OCINumber *number);
        !          2764: 
        !          2765:   DESCRIPTION
        !          2766:     Converts an interval to an Oracle Number
        !          2767:   PARAMETERS
        !          2768:      hndl (IN) - Session/Env handle. 
        !          2769:     err (IN/OUT) - error handle. If there is an error, it is
        !          2770:                 recorded in 'err' and this function returns OCI_ERROR.
        !          2771:                 The error recorded in 'err' can be retrieved by calling
        !          2772:                 OCIErrorGet().
        !          2773:     (IN)  inter - Interval to be converted 
        !          2774:     (OUT) number - Oracle number result  (in years for YEARMONTH interval
        !          2775:                      and in days for DAYSECOND)
        !          2776:   RETURNS
        !          2777:     OCI_INVALID_HANDLE if 'err' is NULL.
        !          2778:     OCI_SUCCESS on success 
        !          2779:   NOTES
        !          2780:     Fractional portions of the date (for instance, minutes and seconds if
        !          2781:     the unit chosen is hours) will be included in the Oracle number produced.
        !          2782:     Excess precision will be truncated.
        !          2783:  
        !          2784: ------------------------------- OCIIntervalToText -------------------------
        !          2785: sword OCIIntervalToText( dvoid *hndl, OCIError *err, CONST OCIInterval *inter,
        !          2786:                        ub1 lfprec, ub1 fsprec, OraText *buffer, 
        !          2787:                         size_t buflen, size_t *resultlen );
        !          2788: 
        !          2789:   DESCRIPTION
        !          2790:     Given an interval, produces a string representing the interval.
        !          2791:   PARAMETERS
        !          2792:      hndl (IN) - Session/Env handle. 
        !          2793:     err (IN/OUT) - error handle. If there is an error, it is
        !          2794:                 recorded in 'err' and this function returns OCI_ERROR.
        !          2795:                 The error recorded in 'err' can be retrieved by calling
        !          2796:                 OCIErrorGet().
        !          2797:     (IN)  inter - Interval to be converted 
        !          2798:     (IN)  lfprec  - Leading field precision. Number of digits used to
        !          2799:                 represent the leading field.
        !          2800:     (IN)  fsprec  - Fractional second precision of the interval. Number of
        !          2801:                 digits used to represent the fractional seconds.
        !          2802:     (OUT) buffer - buffer to hold result 
        !          2803:     (IN)  buflen - length of above buffer 
        !          2804:     (OUT) resultlen - length of result placed into buffer 
        !          2805:  
        !          2806:   RETURNS
        !          2807:     OCI_SUCCESS on success
        !          2808:     OCI_INVALID_HANDLE if 'err' is NULL.
        !          2809:     OCI_ERROR 
        !          2810:        if the buffer is not large enough to hold the result
        !          2811:   NOTES
        !          2812:     The interval literal will be output as `year' or `[year-]month' for
        !          2813:     YEAR-MONTH intervals and as `seconds' or `minutes[:seconds]' or
        !          2814:     `hours[:minutes[:seconds]]' or `days[ hours[:minutes[:seconds]]]' for
        !          2815:     DAY-TIME intervals (where optional fields are surrounded by brackets).
        !          2816: 
        !          2817: 
        !          2818: OCILdaToSvcCtx()
        !          2819: Name
        !          2820: OCI toggle version 7 Lda_Def to SerVice context handle
        !          2821: Purpose
        !          2822: Converts a V7 Lda_Def to a V8 service context handle.
        !          2823: Syntax
        !          2824: sword OCILdaToSvcCtx ( OCISvcCtx  **svchpp,
        !          2825:                      OCIError   *errhp,
        !          2826:                      Lda_Def    *ldap );
        !          2827: Comments
        !          2828: Converts a V7 Lda_Def to a V8 service context handle. The action of this call 
        !          2829: can be reversed by passing the resulting service context handle to the 
        !          2830: OCISvcCtxToLda() function.
        !          2831: Parameters
        !          2832: svchpp (IN/OUT) - the service context handle. 
        !          2833: errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for 
        !          2834: diagnostic information in the event of an error.
        !          2835: ldap (IN/OUT) - the V7 logon data area returned by OCISvcCtxToLda() from 
        !          2836: this service context.
        !          2837: Related Functions
        !          2838: OCISvcCtxToLda()
        !          2839: 
        !          2840: 
        !          2841: 
        !          2842: 
        !          2843: OCILobAppend()
        !          2844: 
        !          2845: Name
        !          2846: OCI Lob APpend
        !          2847: 
        !          2848: Purpose
        !          2849: Appends a LOB value at the end of another LOB. 
        !          2850: 
        !          2851: Syntax
        !          2852: sword OCILobAppend ( OCISvcCtx        *svchp,
        !          2853:                    OCIError         *errhp,
        !          2854:                    OCILobLocator    *dst_locp,
        !          2855:                    OCILobLocator    *src_locp );
        !          2856: Comments
        !          2857: Appends a LOB value at the end of LOB. The data is 
        !          2858: copied from the source to the destination at the end of the destination. The 
        !          2859: source and the destination must already exist. The destination LOB is 
        !          2860: extended to accommodate the newly written data.
        !          2861: 
        !          2862: It is an error to extend the destination LOB beyond the maximum length 
        !          2863: allowed or to try to copy from a NULL LOB. 
        !          2864: 
        !          2865: Parameters
        !          2866: svchp (IN) - the service context handle. 
        !          2867: errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for 
        !          2868: diagnostic information in the event of an error. 
        !          2869: dst_locp (IN/OUT) - a locator uniquely referencing the destination LOB. 
        !          2870: src_locp (IN/OUT) - a locator uniquely referencing the source LOB. 
        !          2871: 
        !          2872: Related Functions
        !          2873: OCILobTrim()
        !          2874: OCIErrorGet()
        !          2875: OCILobWrite()
        !          2876: OCILobCopy()
        !          2877: 
        !          2878: 
        !          2879: 
        !          2880: OCILobAssign()
        !          2881: 
        !          2882: Name
        !          2883: OCI Lob ASsiGn
        !          2884: 
        !          2885: Purpose
        !          2886: Assigns one LOB/FILE locator to another.
        !          2887: 
        !          2888: Syntax
        !          2889: sword OCILobAssign ( OCIEnv                *envhp, 
        !          2890:                      OCIError              *errhp, 
        !          2891:                      CONST OCILobLocator   *src_locp, 
        !          2892:                      OCILobLocator         **dst_locpp );
        !          2893: 
        !          2894: Comments
        !          2895: Assign source locator to destination locator.  After the assignment, both 
        !          2896: locators refer to the same LOB data.  For internal LOBs, the source locator's 
        !          2897: LOB data gets copied to the destination locator's LOB data only when the 
        !          2898: destination locator gets stored in the table.  Therefore, issuing a flush of 
        !          2899: the object containing the destination locator will copy the LOB data. For 
        !          2900: FILEs only the locator that refers to the OS file is copied to the table. The
        !          2901: OS file is not copied.
        !          2902: Note: The only difference between this and OCILobLocatorAssign is that this
        !          2903: takes an environment handle whereas OCILobLocatorAssign takes an OCI service
        !          2904: handle
        !          2905: 
        !          2906: Parameters
        !          2907: envhp (IN/OUT) - OCI environment handle initialized in object mode.
        !          2908: errhp (IN/OUT) - The OCI error handle. If there is an error, it is recorded 
        !          2909: in errhp and this function returns OCI_ERROR. Diagnostic information can be 
        !          2910: obtained by calling OCIErrorGet().
        !          2911: src_locp (IN) - LOB locator to copy from.
        !          2912: dst_locpp (IN/OUT) - LOB locator to copy to.  The caller must allocate space 
        !          2913: for the OCILobLocator by calling OCIDescriptorAlloc().
        !          2914: 
        !          2915: See also
        !          2916: OCIErrorGet()
        !          2917: OCILobIsEqual()
        !          2918: OCILobLocatorIsInit()
        !          2919: OCILobLocatorAssign()
        !          2920: 
        !          2921: 
        !          2922: OCILobCharSetForm()
        !          2923: 
        !          2924: Name
        !          2925: OCI Lob Get Character Set Form
        !          2926: 
        !          2927: Purpose
        !          2928: Gets the LOB locator's character set fpr,, if any.
        !          2929: 
        !          2930: Syntax
        !          2931: sword OCILobCharSetForm ( OCIEnv                    *envhp, 
        !          2932:                           OCIError                  *errhp, 
        !          2933:                           CONST OCILobLocator       *locp, 
        !          2934:                           ub1                       *csfrm );
        !          2935: 
        !          2936: Comments
        !          2937: Returns the character set form of the input LOB locator in the csfrm output 
        !          2938: parameter. 
        !          2939: 
        !          2940: Parameters
        !          2941: envhp (IN/OUT) - OCI environment handle initialized in object mode.
        !          2942: errhp (IN/OUT) - error handle. The OCI error handle. If there is an error, it 
        !          2943: is recorded in err and this function returns OCI_ERROR. Diagnostic 
        !          2944: information can be obtained by calling OCIErrorGet().
        !          2945: locp (IN) - LOB locator for which to get the character set form.
        !          2946: csfrm(OUT) - character set form of the input LOB locator.  If the input 
        !          2947: locator is for a BLOB or a BFILE, csfrm is set to 0 since there is no concept 
        !          2948: of a character set for binary LOBs/FILEs.  The caller must allocate space for 
        !          2949: the csfrm (ub1) and not write into the space.
        !          2950: See also
        !          2951: OCIErrorGet(), OCILobCharSetId(), OCILobLocatorIsInit
        !          2952: 
        !          2953: 
        !          2954: 
        !          2955: OCILobCharSetId()
        !          2956: 
        !          2957: Name
        !          2958: OCI Lob get Character Set IDentifier
        !          2959: 
        !          2960: Purpose
        !          2961: Gets the LOB locator's character set ID, if any.
        !          2962: 
        !          2963: Syntax
        !          2964: sword OCILobCharSetId ( OCIEnv                    *envhp, 
        !          2965:                         OCIError                  *errhp, 
        !          2966:                         CONST OCILobLocator       *locp, 
        !          2967:                         ub2                       *csid );
        !          2968: 
        !          2969: Comments
        !          2970: Returns the character set ID of the input LOB locator in the cid output 
        !          2971: parameter. 
        !          2972: 
        !          2973: Parameters
        !          2974: envhp (IN/OUT) - OCI environment handle initialized in object mode.
        !          2975: errhp (IN/OUT) - error handle. The OCI error handle. If there is an error, it 
        !          2976: is recorded in err and this function returns OCI_ERROR. Diagnostic 
        !          2977: information can be obtained by calling OCIErrorGet().
        !          2978: locp (IN) - LOB locator for which to get the character set ID.
        !          2979: csid (OUT) - character set ID of the input LOB locator.  If the input locator 
        !          2980: is for a BLOB or a BFILE, csid is set to 0 since there is no concept of a 
        !          2981: character set for binary LOBs/FILEs.  The caller must allocate space for the 
        !          2982: character set id of type ub2 and not write into the space.
        !          2983: 
        !          2984: See also
        !          2985: OCIErrorGet(), OCILobCharSetForm(), OCILobLocatorIsInit()
        !          2986: 
        !          2987: 
        !          2988: 
        !          2989: OCILobCopy()
        !          2990: 
        !          2991: Name
        !          2992: OCI Lob Copy
        !          2993: 
        !          2994: Purpose
        !          2995: Copies a portion of a LOB value into another LOB value.
        !          2996: 
        !          2997: Syntax
        !          2998: sword OCILobCopy ( OCISvcCtx        *svchp,
        !          2999:                    OCIError         *errhp,
        !          3000:                    OCILobLocator    *dst_locp,
        !          3001:                    OCILobLocator    *src_locp,
        !          3002:                    ub4              amount,
        !          3003:                    ub4              dst_offset,
        !          3004:                    ub4              src_offset );
        !          3005: 
        !          3006: Comments
        !          3007: Copies a portion of a LOB value into another LOB as specified. The data 
        !          3008: is copied from the source to the destination. The source (src_locp) and the 
        !          3009: destination (dlopb) LOBs must already exist.
        !          3010: If the data already exists at the destination's start position, it is 
        !          3011: overwritten with the source data. If the destination's start position is 
        !          3012: beyond the end of the current data, a hole is created from the end of the data
        !          3013: to the beginning of the newly written data from the source. The destination 
        !          3014: LOB is extended to accommodate the newly written data if it extends 
        !          3015: beyond the current length of the destination LOB. 
        !          3016: It is an error to extend the destination LOB beyond the maximum length 
        !          3017: allowed or to try to copy from a NULL LOB.
        !          3018: Parameters
        !          3019: svchp (IN) - the service context handle. 
        !          3020: errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for 
        !          3021: diagnostic information in the event of an error. 
        !          3022: dst_locp (IN/OUT) - a locator uniquely referencing the destination LOB. 
        !          3023: src_locp (IN/OUT) - a locator uniquely referencing the source LOB. 
        !          3024: amount (IN) - the number of character or bytes, as appropriate, to be copied.
        !          3025: dst_offset (IN) - this is the absolute offset for the destination LOB. 
        !          3026: For character LOBs it is the number of characters from the beginning of the 
        !          3027: LOB at which to begin writing. For binary LOBs it is the number of bytes from 
        !          3028: the beginning of the lob from which to begin reading. The offset starts at 1.
        !          3029: src_offset (IN) - this is the absolute offset for the source LOB. 
        !          3030: For character LOBs it is the number of characters from the beginning of the 
        !          3031: LOB, for binary LOBs it is the number of bytes. Starts at 1.
        !          3032: 
        !          3033: See Also 
        !          3034: OCIErrorGet(), OCILobAppend(), OCILobWrite(), OCILobTrim()
        !          3035: 
        !          3036: OCILobCreateTemporary()
        !          3037: 
        !          3038: Name
        !          3039: OCI Lob Create Temporary
        !          3040: 
        !          3041: Purpose
        !          3042: Create a Temporary Lob
        !          3043: 
        !          3044: Syntax
        !          3045: sword OCILobCreateTemporary(OCISvcCtx          *svchp,
        !          3046:                             OCIError           *errhp,
        !          3047:                             OCILobLocator      *locp,
        !          3048:                             ub2                 csid,
        !          3049:                             ub1                 csfrm,
        !          3050:                             ub1                 lobtype,
        !          3051:                             boolean             cache,
        !          3052:                             OCIDuration         duration);
        !          3053: 
        !          3054: 
        !          3055: Comments
        !          3056: svchp (IN) - the service context handle. 
        !          3057: errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for 
        !          3058: diagnostic information in the event of an error. 
        !          3059: locp (IN/OUT) - a locator which points to the temporary Lob
        !          3060: csid (IN) - the character set id
        !          3061: csfrm(IN) - the character set form
        !          3062: lobtype (IN) - the lob type - one of the three constants OCI_TEMP_BLOB, 
        !          3063:                OCI_TEMP_CLOB and OCI_TEMP_NCLOB
        !          3064: cache(IN)-  TRUE if the temporary LOB goes through the cache; FALSE, if not.
        !          3065: duration(IN)- duration of the temporary LOB; Can be a valid duration id or one 
        !          3066:               of the values: OCI_DURATION_SESSION, OCI_DURATION_CALL
        !          3067:               Note: OCI_DURATION_TRANSACTION is NOT supported in 8.1
        !          3068: Related functions
        !          3069: OCILobFreeTemporary()
        !          3070: OCILobIsTemporary()
        !          3071: 
        !          3072: OCILobDisableBuffering()
        !          3073: 
        !          3074: Name
        !          3075: OCI Lob Disable Buffering
        !          3076: 
        !          3077: Purpose
        !          3078: Disable lob buffering for the input locator.
        !          3079: 
        !          3080: 
        !          3081: Syntax
        !          3082: sword OCILobDisableBuffering ( OCISvcCtx      *svchp,
        !          3083:                                OCIError       *errhp,
        !          3084:                                OCILobLocator  *locp);
        !          3085: 
        !          3086: Comments
        !          3087: 
        !          3088: Disable lob buffering for the input locator.  The next time data is
        !          3089: read/written from/to the lob through the input locator, the lob
        !          3090: buffering subsystem is *not* used.  Note that this call does *not*
        !          3091: implicitly flush the changes made in the buffering subsystem.  The 
        !          3092: user must explicitly call OCILobFlushBuffer() to do this.
        !          3093: 
        !          3094: Parameters
        !          3095: svchp (IN) - the service context handle. 
        !          3096: errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for 
        !          3097: diagnostic information in the event of an error. 
        !          3098: locp (IN/OUT) - a locator uniquely referencing the LOB. 
        !          3099: 
        !          3100: Related Functions
        !          3101: OCILobEnableBuffering()
        !          3102: OCIErrorGet()
        !          3103: OCILobFlushBuffer()
        !          3104: 
        !          3105: 
        !          3106: 
        !          3107: 
        !          3108: OCILobEnableBuffering()
        !          3109: 
        !          3110: Name
        !          3111: OCI Lob Enable Buffering
        !          3112: 
        !          3113: Purpose
        !          3114: Enable lob buffering for the input locator.
        !          3115: 
        !          3116: 
        !          3117: Syntax
        !          3118: sword OCILobEnableBuffering ( OCISvcCtx      *svchp,
        !          3119:                               OCIError       *errhp,
        !          3120:                               OCILobLocator  *locp);
        !          3121: 
        !          3122: Comments
        !          3123: 
        !          3124: Enable lob buffering for the input locator.  The next time data is
        !          3125: read/written from/to the lob through the input locator, the lob
        !          3126: buffering subsystem is used.  
        !          3127: 
        !          3128: Once lob buffering is enabled for a locator, if that locator is passed to 
        !          3129: one of the following routines, an error is returned:
        !          3130:         OCILobCopy, OCILobAppend, OCILobErase, OCILobGetLength, OCILobTrim
        !          3131: 
        !          3132: Parameters
        !          3133: svchp (IN) - the service context handle. 
        !          3134: errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for 
        !          3135: diagnostic information in the event of an error. 
        !          3136: locp (IN/OUT) - a locator uniquely referencing the LOB. 
        !          3137: 
        !          3138: Related Functions
        !          3139: OCILobDisableBuffering()
        !          3140: OCIErrorGet()
        !          3141: OCILobWrite()
        !          3142: OCILobRead()
        !          3143: OCILobFlushBuffer()
        !          3144: 
        !          3145: 
        !          3146: 
        !          3147: 
        !          3148: OCILobErase()
        !          3149: 
        !          3150: Name
        !          3151: OCI Lob ERase
        !          3152: 
        !          3153: Purpose
        !          3154: Erases a specified portion of the LOB data starting at a specified offset.
        !          3155: 
        !          3156: Syntax
        !          3157: sword OCILobErase ( OCISvcCtx       *svchp,
        !          3158:                   OCIError        *errhp,
        !          3159:                   OCILobLocator   *locp,
        !          3160:                   ub4             *amount,
        !          3161:                   ub4             offset );
        !          3162: 
        !          3163: Comments
        !          3164: Erases a specified portion of the LOB data starting at a specified offset.
        !          3165: The actual number of characters/bytes erased is returned. The actual number 
        !          3166: of characters/bytes and the requested number of characters/bytes will differ 
        !          3167: if the end of the LOB data is reached before erasing the requested number of 
        !          3168: characters/bytes.
        !          3169: If a section of data from the middle of the LOB data is erased, a hole is 
        !          3170: created. When data from that hole is read, 0's are returned. If the LOB is
        !          3171: NULL, this routine will indicate that 0 characters/bytes were erased.
        !          3172: 
        !          3173: Parameters
        !          3174: svchp (IN) - the service context handle.
        !          3175: errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for 
        !          3176: diagnostic information in the event of an error.
        !          3177: locp (IN/OUT) - the LOB for which to erase a section of data.
        !          3178: amount (IN/OUT) - On IN, the number of characters/bytes to erase. On OUT, 
        !          3179: the actual number of characters/bytes erased.
        !          3180: offset (IN) - absolute offset from the beginning of the LOB data from which 
        !          3181: to start erasing data. Starts at 1.
        !          3182: 
        !          3183: See Also
        !          3184: OCIErrorGet(), OCILobRead(), OCILobWrite()
        !          3185: 
        !          3186: OCILobOpen()
        !          3187: 
        !          3188: Name
        !          3189: OCI Lob Open
        !          3190: 
        !          3191: Purpose
        !          3192: Opens an internal or external Lob.
        !          3193: 
        !          3194: Syntax
        !          3195: sword OCILobOpen( OCISvcCtx        *svchp,
        !          3196:                   OCIError         *errhp,
        !          3197:                   OCILobLocator    *locp,
        !          3198:                   ub1               mode );
        !          3199: 
        !          3200: Comments
        !          3201: It is an error if the same lob is opened more than once in
        !          3202: the same transaction. Lobs are opened implicitly if they are
        !          3203: not opened before using them. A LOB has to be closed before
        !          3204: the transaction commits else the transaction is rolled back.
        !          3205: Open locators are closed if the transaction aborts. Multiple 
        !          3206: users can open the same lob on different locators.
        !          3207: Parameters
        !          3208: svchp (IN) - the service context handle.
        !          3209: errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for 
        !          3210: diagnostic information in the event of an error.
        !          3211: locp (IN/OUT) - locator points to the LOB to be opened
        !          3212: mode (IN) - mode in which to open the lob. The valid modes are
        !          3213: read-only - OCI_FILE_READONLY, read-write - OCI_FILE_READWRITE 
        !          3214: 
        !          3215: OCILobClose()
        !          3216: 
        !          3217: Name
        !          3218: OCI Lob Close
        !          3219: 
        !          3220: Purpose
        !          3221: Closes an open internal or external Lob.
        !          3222: 
        !          3223: Syntax
        !          3224: sword OCILobClose( OCISvcCtx        *svchp,
        !          3225:                    OCIError         *errhp,
        !          3226:                    OCILobLocator    *locp );
        !          3227: 
        !          3228: 
        !          3229: Comments
        !          3230: It is an error if the lob is not open at this time. All LOBs
        !          3231: that have been opened in a transaction have to be closed 
        !          3232: before the transaction commits, else the transaction gets
        !          3233: rolled back.
        !          3234: 
        !          3235: Parameters
        !          3236: svchp (IN) - the service context handle.
        !          3237: errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for 
        !          3238: diagnostic information in the event of an error.
        !          3239: locp  (IN)  - A locator that was opened using OCILobOpen()
        !          3240: 
        !          3241: 
        !          3242: OCILobFileClose()
        !          3243: 
        !          3244: Name
        !          3245: OCI Lob File CLoSe
        !          3246: 
        !          3247: Purpose
        !          3248: Closes a previously opened FILE.
        !          3249: 
        !          3250: Syntax
        !          3251: sword OCILobFileClose ( OCISvcCtx            *svchp,
        !          3252:                         OCIError             *errhp,
        !          3253:                         OCILobLocator        *filep );
        !          3254: 
        !          3255: Comments
        !          3256: Closes a previously opened FILE. It is an error if this function is called for
        !          3257: an internal LOB. No error is returned if the FILE exists but is not opened.
        !          3258: Parameters
        !          3259: svchp (IN) - the service context handle.
        !          3260: errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for 
        !          3261: diagnostic information in the event of an error.
        !          3262: filep (IN/OUT) - a pointer to a FILE locator to be closed.
        !          3263: 
        !          3264: See Also
        !          3265: OCIErrorGet(), OCILobFileOpen(), OCILobFileCloseAll(), OCILobFileIsOpen(),
        !          3266: OCILobFileExists(), CREATE DIRECTORY DDL
        !          3267: 
        !          3268: 
        !          3269: 
        !          3270: 
        !          3271: OCILobFileCloseAll()
        !          3272: 
        !          3273: Name
        !          3274: OCI LOB FILE Close All
        !          3275: 
        !          3276: Purpose
        !          3277: Closes all open FILEs on a given service context.
        !          3278: 
        !          3279: Syntax
        !          3280: sword OCILobFileCLoseAll ( OCISvcCtx *svchp, 
        !          3281:                            OCIError  *errhp );
        !          3282: 
        !          3283: Comments
        !          3284: Closes all open FILEs on a given service context.
        !          3285: 
        !          3286: Parameters
        !          3287: svchp (IN) - the service context handle.
        !          3288: errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for 
        !          3289: diagnostic information in the event of an error.
        !          3290: 
        !          3291: See also
        !          3292: OCILobFileClose(),
        !          3293: OCIErrorGet(), OCILobFileOpen(), OCILobFileIsOpen(),
        !          3294: OCILobFileExists(), CREATE DIRECTORY DDL
        !          3295: 
        !          3296: 
        !          3297: 
        !          3298: 
        !          3299: OCILobFileExists()
        !          3300: 
        !          3301: Name
        !          3302: OCI LOB FILE exists
        !          3303: 
        !          3304: Purpose
        !          3305: Tests to see if the FILE exists on the server
        !          3306: 
        !          3307: Syntax
        !          3308: sword OCILobFileExists ( OCISvcCtx     *svchp,
        !          3309:                          OCIError      *errhp,
        !          3310:                          OCILobLocator *filep,
        !          3311:                          boolean       *flag );
        !          3312: 
        !          3313: Comments
        !          3314: Checks to see if a FILE exists for on the server.
        !          3315: 
        !          3316: Parameters
        !          3317: svchp (IN) - the OCI service context handle.
        !          3318: errhp (IN/OUT) - error handle. The OCI error handle. If there is an error, 
        !          3319: it is recorded in err and this function returns OCI_ERROR. Diagnostic 
        !          3320: information can be obtained by calling OCIErrorGet().
        !          3321: filep (IN) - pointer to the FILE locator that refers to the file.
        !          3322: flag (OUT) - returns TRUE if the FILE exists; FALSE if it does not.
        !          3323: 
        !          3324: See also
        !          3325: OCIErrorGet, CREATE DIRECTORY (DDL)
        !          3326: 
        !          3327: 
        !          3328: 
        !          3329: 
        !          3330: OCILobFileGetName()
        !          3331: 
        !          3332: Name
        !          3333: OCI LOB FILE Get file Name
        !          3334: 
        !          3335: Purpose
        !          3336: Gets the FILE locator's directory alias and file name.
        !          3337: 
        !          3338: Syntax
        !          3339: sword OCILobFileGetName ( OCIEnv                   *envhp,
        !          3340:                           OCIError                 *errhp, 
        !          3341:                           CONST OCILobLocator      *filep, 
        !          3342:                           OraText                     *dir_alias,
        !          3343:                           ub2                      *d_length, 
        !          3344:                           OraText                     *filename, 
        !          3345:                           ub2                      *f_length );
        !          3346: 
        !          3347: Comments
        !          3348: Returns the directory alias and file name associated with this file locator.  
        !          3349: 
        !          3350: Parameters
        !          3351: envhp (IN/OUT) - OCI environment handle initialized in object mode.
        !          3352: errhp (IN/OUT) -The OCI error handle. If there is an error, it is recorded in 
        !          3353: errhp and this function returns OCI_ERROR. Diagnostic information can be 
        !          3354: obtained by calling OCIErrorGet().
        !          3355: filep (IN) - FILE locator for which to get the directory alias and file name.
        !          3356: dir_alias (OUT) - buffer into which the directory alias name is placed. The 
        !          3357: caller must allocate enough space for the directory alias name and must not 
        !          3358: write into the space.
        !          3359: d_length (IN/OUT)                 
        !          3360:         - IN: length of the input dir_alias string;
        !          3361:         - OUT: length of the returned dir_alias string.
        !          3362: filename (OUT) - buffer into which the file name is placed. The caller must 
        !          3363: allocate enough space for the file name and must not write into the space.
        !          3364: f_length (IN/OUT) 
        !          3365:         - IN: length of the input filename string;
        !          3366:          - OUT: lenght of the returned filename string.
        !          3367: 
        !          3368: See also
        !          3369: OCILobFileSetName(), OCIErrorGet()
        !          3370: 
        !          3371: 
        !          3372: 
        !          3373: 
        !          3374: OCILobFileIsOpen()
        !          3375: 
        !          3376: Name
        !          3377: OCI LOB FILE Is Open?
        !          3378: 
        !          3379: Purpose
        !          3380: Tests to see if the FILE is open
        !          3381: 
        !          3382: Syntax
        !          3383: sword OCILobFileIsOpen ( OCISvcCtx *svchp,
        !          3384:                          OCIError  *errhp,
        !          3385:                          OCILobLocator *filep,
        !          3386:                          boolean       *flag );
        !          3387: 
        !          3388: Comments
        !          3389: Checks to see if the FILE on the server is open for a given LobLocator.
        !          3390: 
        !          3391: Parameters
        !          3392: svchp (IN) - the OCI service context handle.
        !          3393: errhp (IN/OUT) - error handle. The OCI error handle. If there is an error, it 
        !          3394: is recorded in err and this function returns OCI_ERROR. Diagnostic 
        !          3395: information can be obtained by calling OCIErrorGet().
        !          3396: filep (IN) - pointer to the FILE locator being examined. If the input file 
        !          3397: locator was never passed to OCILobFileOpen(), the file is considered not to 
        !          3398: be opened by this locator. However, a different locator may have opened the 
        !          3399: file. More than one file opens can be performed on the same file using 
        !          3400: different locators.
        !          3401: flag (OUT) - returns TRUE if the FILE is opened using this locator; FALSE if 
        !          3402: it is not. 
        !          3403: 
        !          3404: See also
        !          3405: OCIErrorGet, OCILobFileOpen, OCILobFileClose, OCILobFileCloseAll, CREATE 
        !          3406: DIRECTORY SQL command
        !          3407: 
        !          3408: 
        !          3409: OCILobFileOpen()
        !          3410: 
        !          3411: Name
        !          3412: OCI LOB FILE open
        !          3413: 
        !          3414: Purpose
        !          3415: Opens a FILE for read-only access
        !          3416: 
        !          3417: Syntax
        !          3418: sword OCILobFileOpen ( OCISvcCtx            *svchp,
        !          3419:                      OCIError             *errhp,
        !          3420:                      OCILobLocator        *filep,
        !          3421:                      ub1                  mode );
        !          3422: 
        !          3423: Comments
        !          3424: Opens a FILE. The FILE can be opened for read-only access only. FILEs may not 
        !          3425: be written to throough ORACLE.
        !          3426: 
        !          3427: Parameters 
        !          3428: svchp (IN) - the service context handle. 
        !          3429: errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for 
        !          3430: diagnostic information in the event of an error.
        !          3431: filep (IN/OUT) - the FILE to open. Error if the locator does not refer to a 
        !          3432: FILE. 
        !          3433: mode (IN) - mode in which to open the file. The only valid mode is 
        !          3434: read-only - OCI_FILE_READONLY. 
        !          3435: 
        !          3436: See Also
        !          3437: OCILobFileClose, OCIErrorGet, OCILobFileCloseAll, OCILobFileIsOpen, 
        !          3438: OCILobFileSetName, CREATE DIRECTORY 
        !          3439: 
        !          3440: 
        !          3441: 
        !          3442: 
        !          3443: OCILobFileSetName()
        !          3444: 
        !          3445: Name
        !          3446: OCI Lob File Set NaMe
        !          3447: 
        !          3448: Purpose
        !          3449: Sets directory alias and file name in the FILE locator.
        !          3450: 
        !          3451: Syntax
        !          3452: sword OCILobFileSetName ( OCIEnv             *envhp,
        !          3453:                           OCIError           *errhp,
        !          3454:                           OCILobLocator      **filepp,
        !          3455:                           OraText               *dir_alias,
        !          3456:                           ub2                d_length, 
        !          3457:                           OraText               *filename, 
        !          3458:                           ub2                f_length );
        !          3459: Comments
        !          3460: Sets the directory alias and file name in the LOB file locator.  
        !          3461: Parameters
        !          3462: envhp (IN/OUT) - OCI environment handle initialized in object mode.
        !          3463: errhp (IN/OUT) - The OCI error handle. If there is an error, it is recorded 
        !          3464: in errhp and this function returns OCI_ERROR. Diagnostic information can be 
        !          3465: obtained by calling OCIErrorGet().
        !          3466: filepp (IN/OUT) - FILE locator for which to set the directory alias name.
        !          3467: The caller must have already allocated space for the locator by calling
        !          3468: OCIDescriptorAlloc().
        !          3469: dir_alias (IN) - buffer that contains the directory alias name to set in the 
        !          3470: locator.
        !          3471: d_length (IN) - length of the input dir_alias parameter.
        !          3472: filename (IN) - buffer that contains the file name is placed.
        !          3473: f_length (IN) - length of the input filename parameter.
        !          3474: See also
        !          3475: OCILobFileGetName, OCIErrorGet, CREATE DIRECTORY
        !          3476: 
        !          3477: 
        !          3478: 
        !          3479: 
        !          3480: OCILobFlushBuffer()
        !          3481: 
        !          3482: Name
        !          3483: OCI Lob Flush all Buffers for this lob.
        !          3484: 
        !          3485: Purpose
        !          3486: Flush/write all buffers for this lob to the server.
        !          3487: 
        !          3488: 
        !          3489: Syntax
        !          3490: sword OCILobFlushBuffer ( OCISvcCtx       *svchp,
        !          3491:                           OCIError        *errhp,
        !          3492:                           OCILobLocator   *locp,
        !          3493:                           ub4              flag);
        !          3494: 
        !          3495: Comments
        !          3496: 
        !          3497: Flushes to the server, changes made to the buffering subsystem that 
        !          3498: are associated with the lob referenced by the input locator.  This 
        !          3499: routine will actually write the data in the buffer to the lob in 
        !          3500: the database.  Lob buffering must have already been enabled for the 
        !          3501: input lob locator.
        !          3502: 
        !          3503: This routine, by default, does not free the buffer resources for
        !          3504: reallocation to another buffered LOB operation. However, if you
        !          3505: want to free the buffer explicitly, you can set the flag parameter
        !          3506: to OCI_LOB_BUFFER_FREE.
        !          3507: 
        !          3508: Parameters
        !          3509: svchp (IN/OUT) - the service context handle. 
        !          3510: errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for 
        !          3511: diagnostic information in the event of an error. 
        !          3512: locp (IN/OUT) - a locator uniquely referencing the LOB. 
        !          3513: flag    (IN)     - to indicate if the buffer resources need to be freed
        !          3514:                    after a flush. Default value is OCI_LOB_BUFFER_NOFREE.
        !          3515:                    Set it to OCI_LOB_BUFFER_FREE if you want the buffer
        !          3516:                    resources to be freed.
        !          3517: Related Functions
        !          3518: OCILobEnableBuffering()
        !          3519: OCILobDisableBuffering()
        !          3520: OCIErrorGet()
        !          3521: OCILobWrite()
        !          3522: OCILobRead()
        !          3523: 
        !          3524: 
        !          3525: OCILobFreeTemporary()
        !          3526: 
        !          3527: Name
        !          3528: OCI Lob Free Temporary
        !          3529: 
        !          3530: Purpose
        !          3531: Free a temporary LOB
        !          3532: 
        !          3533: Syntax
        !          3534: sword OCILobFreeTemporary(OCISvcCtx          *svchp,
        !          3535:                           OCIError           *errhp,
        !          3536:                           OCILobLocator      *locp);
        !          3537: 
        !          3538: Comments
        !          3539:   Frees the contents of the temporary Lob this locator is pointing to. Note
        !          3540:   that the locator itself is not freed until a OCIDescriptorFree is done.
        !          3541: 
        !          3542: Parameters
        !          3543: svchp (IN/OUT) - the service context handle. 
        !          3544: errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for 
        !          3545: diagnostic information in the event of an error. 
        !          3546: locp (IN/OUT) - a locator uniquely referencing the LOB
        !          3547: 
        !          3548: Related functions
        !          3549: OCILobCreateTemporary()
        !          3550: OCILobIsTemporary()
        !          3551: 
        !          3552: 
        !          3553: Name
        !          3554: OCI Lob/File Get Chunk Size
        !          3555: 
        !          3556: Purpose
        !          3557: When creating the table, the user can specify the chunking factor, which can
        !          3558: be a multiple of Oracle blocks. This corresponds to the chunk size used by the
        !          3559: LOB data layer when accessing/modifying the LOB value. Part of the chunk is
        !          3560: used to store system-related information and the rest stores the LOB value.
        !          3561: This function returns the amount of space used in the LOB chunk to store 
        !          3562: the LOB value.
        !          3563: 
        !          3564: Syntax
        !          3565: sword OCILobGetChunkSize ( OCISvcCtx      *svchp,
        !          3566:                            OCIError       *errhp,
        !          3567:                            OCILobLocator  *locp,
        !          3568:                            ub4            *chunksizep );
        !          3569: 
        !          3570: Comments
        !          3571:  Performance will be improved if the user issues read/write
        !          3572: requests using a multiple of this chunk size. For writes, there is an added 
        !          3573: benefit since LOB chunks are versioned and, if all writes are done on chunk
        !          3574: basis, no extra/excess versioning is done nor duplicated. Users could batch 
        !          3575: up the write until they have enough for a chunk instead of issuing several
        !          3576: write calls for the same chunk.
        !          3577: 
        !          3578: Parameters
        !          3579: svchp (IN) - the service context handle.
        !          3580: errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for 
        !          3581: diagnostic information in the event of an error.
        !          3582: locp (IN/OUT) - a LOB locator that uniquely references the LOB. For internal
        !          3583: LOBs, this locator must be a locator that was obtained from the server 
        !          3584: specified by svchp. For FILEs, this locator can be initialized by a Select or
        !          3585: OCILobFileSetName.
        !          3586: chunksizep (OUT) - On output, it is the length of the LOB if not NULL - for 
        !          3587: character LOBs it is the number of characters, for binary LOBs it is the 
        !          3588: number of bytes in the LOB.
        !          3589: 
        !          3590: Related Functions
        !          3591: 
        !          3592: OCILobGetLength()
        !          3593: 
        !          3594: Name
        !          3595: OCI Lob/File Length
        !          3596: 
        !          3597: Purpose
        !          3598: Gets the length of a LOB/FILE. 
        !          3599: 
        !          3600: Syntax
        !          3601: sword OCILobGetLength ( OCISvcCtx      *svchp,
        !          3602:                         OCIError       *errhp,
        !          3603:                         OCILobLocator  *locp,
        !          3604:                         ub4            *lenp );
        !          3605: 
        !          3606: Comments
        !          3607: Gets the length of a LOB/FILE. If the LOB/FILE is NULL, the length is 
        !          3608: undefined.
        !          3609: 
        !          3610: Parameters
        !          3611: svchp (IN) - the service context handle.
        !          3612: errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for 
        !          3613: diagnostic information in the event of an error.
        !          3614: locp (IN/OUT) - a LOB locator that uniquely references the LOB. For internal
        !          3615: LOBs, this locator must be a locator that was obtained from the server 
        !          3616: specified by svchp. For FILEs, this locator can be initialized by a Select or
        !          3617: OCILobFileSetName.
        !          3618: lenp (OUT) - On output, it is the length of the LOB if not NULL - for 
        !          3619: character LOBs it is the number of characters, for binary LOBs it is the 
        !          3620: number of bytes in the LOB.
        !          3621: 
        !          3622: Related Functions
        !          3623: OCIErrorGet, OCIFileSetName
        !          3624: 
        !          3625: 
        !          3626: 
        !          3627: OCILobIsEqual()
        !          3628: 
        !          3629: Name
        !          3630: 
        !          3631: OCI Lob Is Equal
        !          3632: 
        !          3633: Purpose
        !          3634: Compares two LOB locators for equality.
        !          3635: 
        !          3636: Syntax
        !          3637: sword OCILobIsEqual ( OCIEnv                  *envhp,
        !          3638:                       CONST OCILobLocator     *x,
        !          3639:                       CONST OCILobLocator     *y,
        !          3640:                       boolean                 *is_equal );
        !          3641: 
        !          3642: Comments
        !          3643: Compares the given LOB locators for equality.  Two LOB locators are equal if 
        !          3644: and only if they both refer to the same LOB data.
        !          3645: Two NULL locators are considered not equal by this function.
        !          3646: Parameters
        !          3647: envhp (IN) - the OCI environment handle.
        !          3648: x (IN) - LOB locator to compare.
        !          3649: y (IN) - LOB locator to compare.
        !          3650: is_equal (OUT) - TRUE, if the LOB locators are equal; FALSE if they are not.
        !          3651: 
        !          3652: See also
        !          3653: OCILobAssign, OCILobLocatorIsInit
        !          3654: OCILobLocatorAssign,
        !          3655: OCILobIsOpen()
        !          3656: 
        !          3657: Name
        !          3658: 
        !          3659: OCI Lob Is Open
        !          3660: sword OCILobIsOpen(svchp, errhp, locp, flag)
        !          3661: OCISvcCtx     *svchp;
        !          3662: OCIError      *errhp;
        !          3663: OCILobLocator *locp;
        !          3664: boolean       *flag;
        !          3665: 
        !          3666: Comments
        !          3667:    Checks if the LOB locator was opened before. flag is set to TRUE
        !          3668:    if opened; FALSE otherwise 
        !          3669: 
        !          3670: 
        !          3671: Parameters
        !          3672: svchp (IN) - the service context handle. 
        !          3673: errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for 
        !          3674: diagnostic information in the event of an error. 
        !          3675: locp (IN) - the locator to test for temporary LOB
        !          3676: flag(OUT) - TRUE, if the LOB locator points to is open
        !          3677:                     FALSE, if not.
        !          3678: 
        !          3679: OCILobIsTemporary()
        !          3680: 
        !          3681: Name
        !          3682: 
        !          3683: OCI Lob Is Temporary
        !          3684: 
        !          3685: Purpose
        !          3686:   Tests if this locator points to a temporary LOB
        !          3687: 
        !          3688: Syntax
        !          3689: sword OCILobIsTemporary(OCIEnv            *envhp,
        !          3690:                         OCIError          *errhp,
        !          3691:                         OCILobLocator     *locp,
        !          3692:                         boolean           *is_temporary);
        !          3693: 
        !          3694: Comments
        !          3695: Tests the locator to determine if it points to a temporary LOB.
        !          3696: If so, is_temporary is set to TRUE. If not, is_temporary is set
        !          3697: to FALSE.
        !          3698: 
        !          3699: Parameters
        !          3700: svchp (IN) - the service context handle. 
        !          3701: errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for 
        !          3702: diagnostic information in the event of an error. 
        !          3703: locp (IN) - the locator to test for temporary LOB
        !          3704: is_temporary(OUT) - TRUE, if the LOB locator points to a temporary LOB;
        !          3705:                     FALSE, if not.
        !          3706: 
        !          3707: See Also
        !          3708: OCILobCreateTemporary, OCILobFreeTemporary
        !          3709: 
        !          3710: 
        !          3711: OCILobLoadFromFile()
        !          3712: 
        !          3713: Name
        !          3714: OCI Lob Load From File
        !          3715: 
        !          3716: Purpose
        !          3717: Load/copy all or a portion of the file into an internal LOB.
        !          3718: 
        !          3719: Syntax
        !          3720: sword OCILobLoadFromFile ( OCISvcCtx        *svchp,
        !          3721:                            OCIError         *errhp,
        !          3722:                            OCILobLocator    *dst_locp,
        !          3723:                            OCILobLocator    *src_filep,
        !          3724:                            ub4              amount,
        !          3725:                            ub4              dst_offset,
        !          3726:                            ub4              src_offset );
        !          3727: 
        !          3728: Comments
        !          3729: Loads/copies a portion or all of a file value into an internal LOB as 
        !          3730: specified.  The data is copied from the source file to the destination 
        !          3731: internal LOB (BLOB/CLOB).  No character set conversions are performed 
        !          3732: when copying the bfile data to a clob/nclob.  The bfile data must already
        !          3733: be in the same character set as the clob/nclob in the database.  No
        !          3734: error checking is performed to verify this.
        !          3735: The source (src_filep) and the destination (dst_locp) LOBs must already exist.
        !          3736: If the data already exists at the destination's start position, it is 
        !          3737: overwritten with the source data. If the destination's start position is 
        !          3738: beyond the end of the current data, a hole is created from the end of the data
        !          3739: to the beginning of the newly written data from the source. The destination 
        !          3740: LOB is extended to accommodate the newly written data if it extends 
        !          3741: beyond the current length of the destination LOB. 
        !          3742: It is an error to extend the destination LOB beyond the maximum length 
        !          3743: allowed or to try to copy from a NULL LOB.
        !          3744: Parameters
        !          3745: svchp (IN) - the service context handle. 
        !          3746: errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for 
        !          3747: diagnostic information in the event of an error. 
        !          3748: dst_locp (IN/OUT) - a locator uniquely referencing the destination internal 
        !          3749: LOB which may be of type blob, clob, or nclob. 
        !          3750: src_filep (IN/OUT) - a locator uniquely referencing the source BFILE. 
        !          3751: amount (IN) - the number of bytes to be copied.
        !          3752: dst_offset (IN) - this is the absolute offset for the destination LOB. 
        !          3753: For character LOBs it is the number of characters from the beginning of the 
        !          3754: LOB at which to begin writing. For binary LOBs it is the number of bytes from 
        !          3755: the beginning of the lob from which to begin reading. The offset starts at 1.
        !          3756: src_offset (IN) - this is the absolute offset for the source BFILE.  It is 
        !          3757: the number of bytes from the beginning of the LOB.  The offset starts at 1.
        !          3758: 
        !          3759: See Also 
        !          3760: OCIErrorGet(), OCILobAppend(), OCILobWrite(), OCILobTrim(), OCILobCopy()
        !          3761: 
        !          3762: OCILobLocatorAssign()
        !          3763: 
        !          3764: Name
        !          3765: OCI Lob LOCATOR ASsiGn
        !          3766: 
        !          3767: Purpose
        !          3768: Assigns one LOB/FILE locator to another.
        !          3769: 
        !          3770: Syntax
        !          3771: sword OCILobLocatorAssign ( OCISvcCtx             *svchp, 
        !          3772:                             OCIError              *errhp, 
        !          3773:                             CONST OCILobLocator   *src_locp, 
        !          3774:                             OCILobLocator         **dst_locpp );
        !          3775: 
        !          3776: Comments
        !          3777: Assign source locator to destination locator.  After the assignment, both 
        !          3778: locators refer to the same LOB data.  For internal LOBs, the source locator's 
        !          3779: LOB data gets copied to the destination locator's LOB data only when the 
        !          3780: destination locator gets stored in the table.  Therefore, issuing a flush of 
        !          3781: the object containing the destination locator will copy the LOB data. For 
        !          3782: FILEs only the locator that refers to the OS file is copied to the table. The
        !          3783: OS file is not copied.
        !          3784: Note : the only difference between this and OCILobAssign is that this takes
        !          3785: a OCI service handle pointer instead of a OCI environment handle pointer
        !          3786: 
        !          3787: Parameters
        !          3788: svchp (IN/OUT) - OCI service handle initialized in object mode.
        !          3789: errhp (IN/OUT) - The OCI error handle. If there is an error, it is recorded 
        !          3790: in errhp and this function returns OCI_ERROR. Diagnostic information can be 
        !          3791: obtained by calling OCIErrorGet().
        !          3792: src_locp (IN) - LOB locator to copy from.
        !          3793: dst_locpp (IN/OUT) - LOB locator to copy to.  The caller must allocate space 
        !          3794: for the OCILobLocator by calling OCIDescriptorAlloc().
        !          3795: 
        !          3796: See also
        !          3797: OCIErrorGet()
        !          3798: OCILobIsEqual()
        !          3799: OCILobLocatorIsInit()
        !          3800: OCILobAssign()
        !          3801: 
        !          3802: 
        !          3803: 
        !          3804: 
        !          3805: OCILobLocatorIsInit()
        !          3806: 
        !          3807: Name
        !          3808: OCI LOB locator is initialized?
        !          3809: 
        !          3810: Purpose
        !          3811: Tests to see if a given LOB locator is initialized.
        !          3812: 
        !          3813: Syntax
        !          3814: sword OCILobLocatorIsInit ( OCIEnv   *envhp,
        !          3815:                             OCIError *errhp,
        !          3816:                             CONST OCILobLocator *locp,
        !          3817:                             boolean *is_initialized );
        !          3818: 
        !          3819: Comments
        !          3820: Tests to see if a given LOB locator is initialized.
        !          3821: 
        !          3822: Parameters
        !          3823: envhp (IN/OUT) - OCI environment handle initialized in object mode.
        !          3824: errhp (IN/OUT) - error handle. The OCI error handle. If there is an error, it 
        !          3825: is recorded in err and this function returns OCI_ERROR. Diagnostic 
        !          3826: information can be obtained by calling OCIErrorGet().
        !          3827: locp (IN) - the LOB locator being tested
        !          3828: is_initialized (OUT) - returns TRUE if the given LOB locator is initialized; 
        !          3829: FALSE if it is not.
        !          3830: 
        !          3831: See also
        !          3832: OCIErrorGet, OCILobIsEqual
        !          3833: 
        !          3834: 
        !          3835: 
        !          3836: 
        !          3837: OCILobRead()
        !          3838: 
        !          3839: Name
        !          3840: OCI Lob/File ReaD
        !          3841: 
        !          3842: Purpose
        !          3843: Reads a portion of a LOB/FILE as specified by the call into a buffer. 
        !          3844: 
        !          3845: Syntax
        !          3846: sword OCILobRead ( OCISvcCtx       *svchp,
        !          3847:                    OCIError        *errhp,
        !          3848:                    OCILobLocator   *locp,
        !          3849:                    ub4             offset,
        !          3850:                    ub4             *amtp,
        !          3851:                    dvoid           *bufp,
        !          3852:                    ub4             bufl,
        !          3853:                    dvoid           *ctxp,  
        !          3854:                    OCICallbackLobRead (cbfp)
        !          3855:                                    (
        !          3856:                                     dvoid         *ctxp,
        !          3857:                                     CONST dvoid   *bufp,
        !          3858:                                     ub4           len,
        !          3859:                                     ub1           piece )
        !          3860:                    ub2             csid,
        !          3861:                    ub1             csfrm );
        !          3862: 
        !          3863: Comments
        !          3864: Reads a portion of a LOB/FILE as specified by the call into a buffer. Data 
        !          3865: read from a hole is returned as 0s. It is an error to try to read from a NULL
        !          3866: LOB/FILE. The OS FILE must already exist on the server and must have been 
        !          3867: opened using the input locator. Oracle must hav epermission to read the OS 
        !          3868: file and user must have read permission on the directory object.
        !          3869: 
        !          3870: Parameters
        !          3871: svchp (IN/OUT) - the service context handle. 
        !          3872: errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for 
        !          3873: diagnostic information in the event of an error.
        !          3874: locp (IN/OUT) - a LOB locator that uniquely references a LOB. 
        !          3875: offset (IN) - On input, it is the absolute offset, for character LOBs in the 
        !          3876: number of characters from the beginning of the LOB, for binary LOBs it is the 
        !          3877: number of bytes. Starts from 1.
        !          3878: amtp (IN/OUT) - On input, the number of character or bytes to be read. On 
        !          3879: output, the actual number of bytes or characters read. 
        !          3880: If the amount of bytes to be read is larger than the buffer length it is 
        !          3881: assumed that the LOB is being read in a streamed mode. On input if this value 
        !          3882: is 0, then the data shall be read in streamed mode from the LOB until the end 
        !          3883: of LOB. If the data is read in pieces, *amtp always contains the length of 
        !          3884: the last piece read.  If a callback function is defined, then this callback 
        !          3885: function will be invoked each time bufl bytes are read off the pipe. Each 
        !          3886: piece will be written into bufp.
        !          3887: If the callback function is not defined, then OCI_NEED_DATA error code will 
        !          3888: be returned. The application must invoke the LOB read over and over again to 
        !          3889: read more pieces of the LOB until the OCI_NEED_DATA error code is not 
        !          3890: returned. The buffer pointer and the length can be different in each call 
        !          3891: if the pieces are being read into different sizes and location. 
        !          3892: bufp (IN) - the pointer to a buffer into which the piece will be read. The 
        !          3893: length of the allocated memory is assumed to be bufl. 
        !          3894: bufl (IN) - the length of the buffer in octets. 
        !          3895: ctxp (IN) - the context for the call back function. Can be NULL.
        !          3896: cbfp (IN) - a callback that may be registered to be called for each piece. If 
        !          3897: this is NULL, then OCI_NEED_DATA will be returned for each piece. 
        !          3898: The callback function must return OCI_CONTINUE for the read to continue. 
        !          3899: If any other error code is returned, the LOB read is aborted. 
        !          3900:   ctxp (IN) - the context for the call back function. Can be NULL.
        !          3901:   bufp (IN) - a buffer pointer for the piece.
        !          3902:   len (IN) - the length of length of current piece in bufp.
        !          3903:   piece (IN) - which piece - OCI_FIRST_PIECE, OCI_NEXT_PIECE or 
        !          3904:   OCI_LAST_PIECE.
        !          3905: csid - the character set ID of the buffer data
        !          3906: csfrm - the character set form of the buffer data
        !          3907: 
        !          3908: Related Functions
        !          3909: OCIErrorGet, OCILobWrite, OCILobFileOpen, OCILobFileSetName, CREATE DIRECTORY
        !          3910: 
        !          3911: 
        !          3912: 
        !          3913: 
        !          3914: OCILobTrim()
        !          3915: 
        !          3916: Name
        !          3917: 
        !          3918: OCI Lob  Trim
        !          3919: 
        !          3920: Purpose
        !          3921: Trims the lob value to a shorter length
        !          3922: 
        !          3923: Syntax
        !          3924: sword OCILobTrim ( OCISvcCtx       *svchp,
        !          3925:                  OCIError        *errhp,
        !          3926:                  OCILobLocator   *locp,
        !          3927:                  ub4             newlen );
        !          3928: 
        !          3929: Comments
        !          3930: Truncates LOB data to a specified shorter length. 
        !          3931: 
        !          3932: Parameters
        !          3933: svchp (IN) - the service context handle. 
        !          3934: errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for 
        !          3935: diagnostic information in the event of an error. 
        !          3936: locp (IN/OUT) - a LOB locator that uniquely references the LOB. This locator 
        !          3937: must be a locator that was obtained from the server specified by svchp. 
        !          3938: newlen (IN) - the new length of the LOB data, which must be less than or equal
        !          3939: to the current length. 
        !          3940: 
        !          3941: Related Functions
        !          3942: OCIErrorGet, OCILobWrite, OCiLobErase, OCILobAppend, OCILobCopy
        !          3943: 
        !          3944: 
        !          3945: 
        !          3946: 
        !          3947: 
        !          3948: OCILobWrite()
        !          3949: 
        !          3950: Name
        !          3951: OCI Lob Write
        !          3952: 
        !          3953: Purpose
        !          3954: Writes a buffer into a LOB
        !          3955: 
        !          3956: Syntax
        !          3957: sword OCILobWrite ( OCISvcCtx       *svchp,
        !          3958:                     OCIError        *errhp,
        !          3959:                     OCILobLocator   *locp,
        !          3960:                     ub4             offset,
        !          3961:                     ub4             *amtp,
        !          3962:                     dvoid           *bufp, 
        !          3963:                     ub4             buflen,
        !          3964:                     ub1             piece,
        !          3965:                     dvoid           *ctxp,  
        !          3966:                     OCICallbackLobWrite   (cbfp)
        !          3967:                                     (
        !          3968:                                     dvoid    *ctxp,
        !          3969:                                     dvoid    *bufp,
        !          3970:                                     ub4      *lenp,
        !          3971:                                     ub1      *piecep ) 
        !          3972:                     ub2             csid
        !          3973:                     ub1             csfrm );
        !          3974: 
        !          3975: 
        !          3976: Comments
        !          3977: Writes a buffer into a LOB as specified. If LOB data already exists 
        !          3978: it is overwritten with the data stored in the buffer.
        !          3979: The buffer can be written to the LOB in a single piece with this call, or
        !          3980: it can be provided piecewise using callbacks or a standard polling method.
        !          3981: If this value of the piece parameter is OCI_FIRST_PIECE, data must be 
        !          3982: provided through callbacks or polling.
        !          3983: If a callback function is defined in the cbfp parameter, then this callback 
        !          3984: function will be invoked to get the next piece after a piece is written to 
        !          3985: the pipe. Each piece will be written from bufp.
        !          3986: If no callback function is defined, then OCILobWrite() returns the 
        !          3987: OCI_NEED_DATA error code. The application must all OCILobWrite() again 
        !          3988: to write more pieces of the LOB. In this mode, the buffer pointer and the 
        !          3989: length can be different in each call if the pieces are of different sizes and 
        !          3990: from different locations. A piece value of OCI_LAST_PIECE terminates the 
        !          3991: piecewise write. 
        !          3992: 
        !          3993: Parameters
        !          3994: svchp (IN/OUT) - the service context handle. 
        !          3995: errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for 
        !          3996: diagnostic information in the event of an error. 
        !          3997: locp (IN/OUT) - a LOB locator that uniquely references a LOB. 
        !          3998: offset (IN) - On input, it is the absolute offset, for character LOBs in 
        !          3999: the number of characters from the beginning of the LOB, for binary LOBs it 
        !          4000: is the number of bytes. Starts at 1.
        !          4001: bufp (IN) - the pointer to a buffer from which the piece will be written. The 
        !          4002: length of the allocated memory is assumed to be the value passed in bufl. 
        !          4003: Even if the data is being written in pieces, bufp must contain the first 
        !          4004: piece of the LOB when this call is invoked.
        !          4005: bufl (IN) - the length of the buffer in bytes.
        !          4006: Note: This parameter assumes an 8-bit byte. If your platform uses a 
        !          4007: longer byte, the value of bufl must be adjusted accordingly.
        !          4008: piece (IN) - which piece of the buffer is being written. The default value for
        !          4009: this parameter is OCI_ONE_PIECE, indicating the buffer will be written in a 
        !          4010: single piece.
        !          4011: The following other values are also possible for piecewise or callback mode: 
        !          4012: OCI_FIRST_PIECE, OCI_NEXT_PIECE and OCI_LAST_PIECE.
        !          4013: amtp (IN/OUT) - On input, takes the number of character or bytes to be 
        !          4014: written. On output, returns the actual number of bytes or characters written. 
        !          4015: If the data is written in pieces, *amtp will contain the total length of the 
        !          4016: pieces written at the end of the call (last piece written) and is undefined in
        !          4017: between. 
        !          4018: (Note it is different from the piecewise read case)
        !          4019: ctxp (IN) - the context for the call back function. Can be NULL.
        !          4020: cbfp (IN) - a callback that may be registered to be called for each piece in 
        !          4021: a piecewise write. If this is NULL, the standard polling method will be used.
        !          4022: The callback function must return OCI_CONTINUE for the write to continue. 
        !          4023: If any other error code is returned, the LOB write is aborted. The 
        !          4024: callback takes the following parameters:
        !          4025:   ctxp (IN) - the context for the call back function. Can be NULL.
        !          4026:   bufp (IN/OUT) - a buffer pointer for the piece.
        !          4027:   lenp (IN/OUT) - the length of the buffer (in octets) and the length of 
        !          4028:   current piece in bufp (out octets).
        !          4029:   piecep (OUT) - which piece - OCI_NEXT_PIECE or OCI_LAST_PIECE.
        !          4030: csid - the character set ID of the buffer data
        !          4031: csfrm - the character set form of the buffer data
        !          4032: Related Functions
        !          4033: 
        !          4034: OCILobWriteAppend()
        !          4035: 
        !          4036: Name
        !          4037: OCI Lob Write Append
        !          4038: 
        !          4039: Purpose
        !          4040: Writes data to the end of a LOB value. This call provides the ability
        !          4041: to get the length of the data and append it to the end of the LOB in
        !          4042: a single round trip to the server.
        !          4043: 
        !          4044: Syntax
        !          4045: sword OCILobWriteAppend ( OCISvcCtx       *svchp,
        !          4046:                     OCIError        *errhp,
        !          4047:                     OCILobLocator   *locp,
        !          4048:                     ub4             *amtp,
        !          4049:                     dvoid           *bufp, 
        !          4050:                     ub4             buflen,
        !          4051:                     ub1             piece,
        !          4052:                     dvoid           *ctxp,  
        !          4053:                     OCICallbackLobWrite   (cbfp)
        !          4054:                                     (
        !          4055:                                     dvoid    *ctxp,
        !          4056:                                     dvoid    *bufp,
        !          4057:                                     ub4      *lenp,
        !          4058:                                     ub1      *piecep ) 
        !          4059:                     ub2             csid
        !          4060:                     ub1             csfrm );
        !          4061: 
        !          4062: 
        !          4063: Comments
        !          4064: Writes a buffer to the end of a LOB as specified. If LOB data already exists 
        !          4065: it is overwritten with the data stored in the buffer.
        !          4066: The buffer can be written to the LOB in a single piece with this call, or
        !          4067: it can be provided piecewise using callbacks or a standard polling method.
        !          4068: If this value of the piece parameter is OCI_FIRST_PIECE, data must be 
        !          4069: provided through callbacks or polling.
        !          4070: If a callback function is defined in the cbfp parameter, then this callback 
        !          4071: function will be invoked to get the next piece after a piece is written to the 
        !          4072: pipe. Each piece will be written from bufp.
        !          4073: If no callback function is defined, then OCILobWriteAppend() returns the 
        !          4074: OCI_NEED_DATA error code. The application must all OCILobWriteAppend() again 
        !          4075: to write more pieces of the LOB. In this mode, the buffer pointer and the 
        !          4076: length can be different in each call if the pieces are of different sizes and 
        !          4077: from different locations. A piece value of OCI_LAST_PIECE terminates the 
        !          4078: piecewise write. 
        !          4079: 
        !          4080: Parameters
        !          4081: svchp (IN/OUT) - the service context handle. 
        !          4082: errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for 
        !          4083: diagnostic information in the event of an error. 
        !          4084: locp (IN/OUT) - a LOB locator that uniquely references a LOB. 
        !          4085: bufp (IN) - the pointer to a buffer from which the piece will be written. The 
        !          4086: length of the allocated memory is assumed to be the value passed in bufl. Even 
        !          4087: if the data is being written in pieces, bufp must contain the first piece of 
        !          4088: the LOB when this call is invoked.
        !          4089: bufl (IN) - the length of the buffer in bytes.
        !          4090: Note: This parameter assumes an 8-bit byte. If your platform uses a 
        !          4091: longer byte, the value of bufl must be adjusted accordingly.
        !          4092: piece (IN) - which piece of the buffer is being written. The default value for
        !          4093: this parameter is OCI_ONE_PIECE, indicating the buffer will be written in a 
        !          4094: single piece.
        !          4095: The following other values are also possible for piecewise or callback mode: 
        !          4096: OCI_FIRST_PIECE, OCI_NEXT_PIECE and OCI_LAST_PIECE.
        !          4097: amtp (IN/OUT) - On input, takes the number of character or bytes to be 
        !          4098: written. On output, returns the actual number of bytes or characters written. 
        !          4099: If the data is written in pieces, *amtp will contain the total length of the 
        !          4100: pieces written at the end of the call (last piece written) and is undefined in
        !          4101: between. 
        !          4102: (Note it is different from the piecewise read case)
        !          4103: ctxp (IN) - the context for the call back function. Can be NULL.
        !          4104: cbfp (IN) - a callback that may be registered to be called for each piece in a 
        !          4105: piecewise write. If this is NULL, the standard polling method will be used.
        !          4106: The callback function must return OCI_CONTINUE for the write to continue. 
        !          4107: If any other error code is returned, the LOB write is aborted. The 
        !          4108: callback takes the following parameters:
        !          4109:   ctxp (IN) - the context for the call back function. Can be NULL.
        !          4110:   bufp (IN/OUT) - a buffer pointer for the piece.
        !          4111:   lenp (IN/OUT) - the length of the buffer (in octets) and the length of 
        !          4112:   current piece in bufp (out octets).
        !          4113:   piecep (OUT) - which piece - OCI_NEXT_PIECE or OCI_LAST_PIECE.
        !          4114: csid - the character set ID of the buffer data
        !          4115: csfrm - the character set form of the buffer data
        !          4116: Related Functions
        !          4117: 
        !          4118: 
        !          4119: 
        !          4120: OCILogoff()
        !          4121: Name
        !          4122: OCI simplified Logoff
        !          4123: Purpose
        !          4124: This function is used to terminate a session created with OCILogon().
        !          4125: Syntax
        !          4126: sword OCILogoff ( OCISvcCtx      *svchp
        !          4127:                    OCIError       *errhp );
        !          4128: Comments
        !          4129: This call is used to terminate a session which was created with OCILogon().  
        !          4130: This call implicitly deallocates the server, authentication, and service 
        !          4131: context handles.
        !          4132: Note: For more information on logging on and off in an application, 
        !          4133: refer to the section "Application Initialization, Connection, and 
        !          4134: Authorization" on page 2-16.
        !          4135: Parameters
        !          4136: svchp (IN) - the service context handle which was used in the call to 
        !          4137: OCILogon().
        !          4138: errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for 
        !          4139: diagnostic information in the event of an error.
        !          4140: See Also
        !          4141: OCILogon()
        !          4142: 
        !          4143: 
        !          4144: 
        !          4145: 
        !          4146: 
        !          4147: 
        !          4148: OCILogon()
        !          4149: Name
        !          4150: OCI Service Context Logon
        !          4151: Purpose
        !          4152: This function is used to create a simple logon session.
        !          4153: Syntax
        !          4154: sword OCILogon ( OCIEnv          *envhp,
        !          4155:                        OCIError        *errhp,
        !          4156:                        OCISvcCtx       *svchp,
        !          4157:                        CONST OraText      *username,
        !          4158:                        ub4             uname_len,
        !          4159:                        CONST OraText      *password,
        !          4160:                        ub4             passwd_len,
        !          4161:                        CONST OraText      *dbname,
        !          4162:                        ub4             dbname_len );
        !          4163: Comments
        !          4164: This function is used to create a simple logon session for an application. 
        !          4165: Note: Users requiring more complex session (e.g., TP monitor 
        !          4166: applications) should refer to the section "Application Initialization, 
        !          4167: Connection, and Authorization" on page 2-16.
        !          4168: This call allocates the error and service context handles which are passed to 
        !          4169: it. This call also implicitly allocates server and authentication handles 
        !          4170: associated with the session.  These handles can be retrieved by calling 
        !          4171: OCIAttrGet() on the service context handle.
        !          4172: Parameters
        !          4173: envhp (IN) - the OCI environment handle.
        !          4174: errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for 
        !          4175: diagnostic information in the event of an error.
        !          4176: svchp (OUT) - the service context pointer.
        !          4177: username (IN) - the username.
        !          4178: uname_len (IN) - the length of username.
        !          4179: password (IN) - the user's password.
        !          4180: passwd_len (IN) - the length of password.
        !          4181: dbname (IN) - the name of the database to connect to.
        !          4182: dbname_len (IN) - the length of dbname.
        !          4183: See Also
        !          4184: OCILogoff()
        !          4185: 
        !          4186: 
        !          4187: 
        !          4188: 
        !          4189: 
        !          4190: OCIMemoryFree()
        !          4191: Name
        !          4192: OCI FREE Memory
        !          4193: Purpose
        !          4194: Frees up storage associated with the pointer.
        !          4195: Syntax
        !          4196: void OCIMemoryFree ( CONST OCIStmt   *stmhp,
        !          4197:                      dvoid           *memptr);
        !          4198: Comments
        !          4199: Frees up dynamically allocated data pointers associated with the pointer using 
        !          4200: either the default memory free function or the registered memory free 
        !          4201: function, as the case may be.
        !          4202: A user-defined memory free function can be registered during the initial call 
        !          4203: to OCIInitialize(). 
        !          4204: This call is always successful. 
        !          4205: Parameters
        !          4206: stmhp (IN) - statement handle which returned this data buffer.
        !          4207: memptr (IN) - pointer to data allocated by the client library. 
        !          4208: Related Functions
        !          4209: OCIInitialize()
        !          4210: 
        !          4211: 
        !          4212: 
        !          4213: 
        !          4214: 
        !          4215: OCIParamGet()
        !          4216: Name
        !          4217: OCI Get PARaMeter
        !          4218: Purpose
        !          4219: Returns a descriptor of a parameter specified by position in the describe 
        !          4220: handle or statement handle.
        !          4221: Syntax
        !          4222: sword OCIParamGet ( CONST dvoid       *hndlp,
        !          4223:                   ub4         htype,
        !          4224:                   OCIError    *errhp,
        !          4225:                   dvoid    **parmdpp,
        !          4226:                   ub4         pos );
        !          4227: Comments
        !          4228: This call returns a descriptor of a parameter specified by position in the 
        !          4229: describe handle or statement handle. Parameter descriptors are always 
        !          4230: allocated internally by the OCI library. They are read-only.
        !          4231: OCI_NO_DATA may be returned if there are no parameter descriptors for this 
        !          4232: position. 
        !          4233: See Appendix B for more detailed information about parameter descriptor 
        !          4234: attributes.
        !          4235: Parameters
        !          4236: hndlp (IN) - a statement handle or describe handle. The OCIParamGet() 
        !          4237: function will return a parameter descriptor for this handle. 
        !          4238: htype (IN) - the type of the handle passed in the handle parameter. Valid 
        !          4239: types are OCI_HTYPE_DESCRIBE, for a describe handle OCI_HTYPE_STMT, for a 
        !          4240: statement handle
        !          4241: errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for 
        !          4242: diagnostic information in the event of an error.
        !          4243: parmdpp (OUT) - a descriptor of the parameter at the position given in the pos 
        !          4244: parameter.
        !          4245: pos (IN) - position number in the statement handle or describe handle. A 
        !          4246: parameter descriptor will be returned for this position.
        !          4247: Note: OCI_NO_DATA may be returned if there are no parameter 
        !          4248: descriptors for this position. 
        !          4249: Related Functions
        !          4250: OCIAttrGet(), OCIAttrSet()
        !          4251: 
        !          4252: 
        !          4253: 
        !          4254: 
        !          4255: 
        !          4256: OCIParamSet()
        !          4257: Name
        !          4258: OCI Parameter Set in handle
        !          4259: Purpose
        !          4260: Used to set a complex object retrieval descriptor into a complex object 
        !          4261: retrieval handle.
        !          4262: Syntax
        !          4263: sword   OCIParamGet ( dvoid *hndlp,
        !          4264:                        ub4 htyp,
        !          4265:                       OCIError *errhp,
        !          4266:                       CONST dvoid *dscp,
        !          4267:                       ub4 dtyp,
        !          4268:                       ub4 pos );
        !          4269: Comments
        !          4270: This call sets a given complex object retrieval descriptor into a complex 
        !          4271: object retrieval handle.
        !          4272: The handle must have been previously allocated using OCIHandleAlloc(), and 
        !          4273: the descriptor must have been previously allocated using OCIDescAlloc(). 
        !          4274: Attributes of the descriptor are set using OCIAttrSet().
        !          4275: Parameters
        !          4276: hndlp (IN/OUT) - handle pointer.
        !          4277: htype (IN) - handle type.
        !          4278: errhp (IN/OUT) - error handle.
        !          4279: dscp (IN) - complex object retrieval descriptor pointer.
        !          4280: dtyp (IN) - 
        !          4281: pos (IN) - position number.
        !          4282: See Also
        !          4283: 
        !          4284: 
        !          4285: 
        !          4286: 
        !          4287: 
        !          4288: OCIPasswordChange()
        !          4289: Name
        !          4290: OCI Change PassWord
        !          4291: Purpose
        !          4292: This call allows the password of an account to be changed.
        !          4293: Syntax
        !          4294: sword OCIPasswordChange ( OCISvcCtx     *svchp,
        !          4295:                         OCIError      *errhp,
        !          4296:                         CONST OraText    *user_name,
        !          4297:                         ub4           usernm_len,
        !          4298:                         CONST OraText    *opasswd,
        !          4299:                         ub4           opasswd_len,
        !          4300:                         CONST OraText    *npasswd,
        !          4301:                         sb4           npasswd_len,
        !          4302:                         ub4           mode);
        !          4303: Comments
        !          4304: This call allows the password of an account to be changed. This call is 
        !          4305: similar to OCISessionBegin() with the following differences:
        !          4306: If the user authentication is already established, it authenticates 
        !          4307: the account using the old password and then changes the 
        !          4308: password to the new password
        !          4309: If the user authentication is not established, it establishes a user 
        !          4310: authentication and authenticates the account using the old 
        !          4311: password, then changes the password to the new password.
        !          4312: This call is useful when the password of an account is expired and 
        !          4313: OCISessionBegin() returns an error or warning which indicates that the 
        !          4314: password has expired. 
        !          4315: Parameters
        !          4316: svchp (IN/OUT) - a handle to a service context. The service context handle 
        !          4317: must be initialized and have a server context handle associated with it.
        !          4318: errhp (IN) - an error handle which can be passed to OCIErrorGet() for 
        !          4319: diagnostic information in the event of an error.
        !          4320: user_name (IN) - specifies the user name. It points to a character string, 
        !          4321: whose length is specified in usernm_len. This parameter must be NULL if the 
        !          4322: service context has been initialized with an authentication handle.
        !          4323: usernm_len (IN) - the length of the user name string specified in user_name. 
        !          4324: For a valid user name string, usernm_len must be non-zero.
        !          4325: opasswd (IN) - specifies the user's old password. It points to a character 
        !          4326: string, whose length is specified in opasswd_len .
        !          4327: opasswd_len (IN) - the length of the old password string specified in opasswd. 
        !          4328: For a valid password string, opasswd_len must be non-zero.
        !          4329: npasswd (IN) - specifies the user's new password. It points to a character 
        !          4330: string, whose length is specified in npasswd_len which must be non-zero for a 
        !          4331: valid password string. If the password complexity verification routine is 
        !          4332: specified in the user's profile to verify the new password's complexity, the 
        !          4333: new password must meet the complexity requirements of the verification 
        !          4334: function.
        !          4335: npasswd_len (IN)  - then length of the new password string specified in 
        !          4336: npasswd. For a valid password string, npasswd_len must be non-zero.
        !          4337: mode - pass as OCI_DEFAULT.
        !          4338: Related Functions
        !          4339: OCISessionBegin()
        !          4340: 
        !          4341: 
        !          4342: ----------------------------------OCIReset------------------------------------
        !          4343: 
        !          4344: 
        !          4345: OCIReset()
        !          4346: Name
        !          4347: OCI Reset
        !          4348: Purpose
        !          4349: Resets the interrupted asynchronous operation and protocol. Must be called
        !          4350: if a OCIBreak call had been issued while a non-blocking operation was in
        !          4351: progress.
        !          4352: Syntax
        !          4353: sword OCIReset ( dvoid      *hndlp,
        !          4354:                  OCIError   *errhp);
        !          4355: Comments
        !          4356: This call is called in non-blocking mode ONLY. Resets the interrupted
        !          4357: asynchronous operation and protocol. Must be called if a OCIBreak call 
        !          4358: had been issued while a non-blocking operation was in progress. 
        !          4359: Parameters
        !          4360: hndlp (IN) - the service context handle or the server context handle.
        !          4361: errhp (IN) - an error handle which can be passed to OCIErrorGet() for 
        !          4362: diagnostic information in the event of an error.
        !          4363: Related Functions
        !          4364: 
        !          4365: 
        !          4366: OCIResultSetToStmt()
        !          4367: Name
        !          4368: OCI convert Result Set to Statement Handle
        !          4369: Purpose
        !          4370: Converts a descriptor to statement handle for fetching rows.
        !          4371: Syntax
        !          4372: sword OCIResultSetToStmt ( OCIResult     *rsetdp,
        !          4373:                          OCIError      *errhp );
        !          4374: Comments
        !          4375: Converts a descriptor to statement handle for fetching rows.
        !          4376: A result set descriptor can be allocated with a call to OCIDescAlloc().
        !          4377: Parameters
        !          4378: rsetdp (IN/OUT) - a result set descriptor pointer. 
        !          4379: errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for 
        !          4380: diagnostic information in the event of an error. 
        !          4381: Related Functions
        !          4382: OCIDescAlloc()
        !          4383: 
        !          4384: 
        !          4385: 
        !          4386: 
        !          4387: OCIServerAttach()
        !          4388: Name
        !          4389: OCI ATtaCH to server
        !          4390: Purpose
        !          4391: Creates an access path to a data source for OCI operations.
        !          4392: Syntax
        !          4393: sword OCIServerAttach ( OCIServer    *srvhp,
        !          4394:                       OCIError     *errhp,
        !          4395:                       CONST OraText   *dblink,
        !          4396:                       sb4          dblink_len,
        !          4397:                       ub4          mode);
        !          4398: Comments
        !          4399: This call is used to create an association between an OCI application and a 
        !          4400: particular server. 
        !          4401: This call initializes a server context handle, which must have been previously 
        !          4402: allocated with a call to OCIHandleAlloc().
        !          4403: The server context handle initialized by this call can be associated with a 
        !          4404: service context through a call to OCIAttrSet(). Once that association has been 
        !          4405: made, OCI operations can be performed against the server.
        !          4406: If an application is operating against multiple servers, multiple server 
        !          4407: context handles can be maintained. OCI operations are performed against 
        !          4408: whichever server context is currently associated with the service context.
        !          4409: Parameters
        !          4410: srvhp (IN/OUT) - an uninitialized server context handle, which gets 
        !          4411: initialized by this call. Passing in an initialized server handle causes an 
        !          4412: error. 
        !          4413: errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for 
        !          4414: diagnostic information in the event of an error.
        !          4415: dblink (IN) - specifies the database (server) to use. This parameter points to
        !          4416: a character string which specifies a connect string or a service point. If the 
        !          4417: connect string is NULL, then this call attaches to the default host. The length
        !          4418: of connstr is specified in connstr_len. The connstr pointer may be freed by the
        !          4419: caller on return.
        !          4420: dblink_len (IN) - the length of the string pointed to by connstr. For a valid 
        !          4421: connect string name or alias, connstr_len must be non-zero.
        !          4422: mode (IN) - specifies the various modes of operation.  For release 8.0, pass as
        !          4423: OCI_DEFAULT - in this mode, calls made to the server on this server context 
        !          4424: are made in blocking mode. 
        !          4425: Example
        !          4426: See the description of OCIStmtPrepare() on page 13-96 for an example showing 
        !          4427: the use of OCIServerAttach().
        !          4428: Related Functions
        !          4429: OCIServerDetach()
        !          4430: 
        !          4431: 
        !          4432: 
        !          4433: OCIServerDetach()
        !          4434: Name
        !          4435: OCI DeTaCH server
        !          4436: Purpose
        !          4437: Deletes an access to a data source for OCI operations.
        !          4438: Syntax
        !          4439: sword OCIServerDetach ( OCIServer   *svrhp,
        !          4440:                       OCIError    *errhp,
        !          4441:                       ub4         mode); 
        !          4442: Comments
        !          4443: This call deletes an access to data source for OCI operations, which was 
        !          4444: established by a call to OCIServerAttach(). 
        !          4445: Parameters
        !          4446: srvhp (IN) - a handle to an initialized server context, which gets reset to 
        !          4447: uninitialized state. The handle is not de-allocated. 
        !          4448: errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for 
        !          4449: diagnostic information in the event of an error. 
        !          4450: mode (IN) - specifies the various modes of operation. The only valid mode is 
        !          4451: OCI_DEFAULT for the default mode. 
        !          4452: Related Functions
        !          4453: OCIServerAttach()
        !          4454: 
        !          4455: 
        !          4456: 
        !          4457: OCIServerVersion()
        !          4458: Name
        !          4459: OCI VERSion
        !          4460: Purpose
        !          4461: Returns the version string of the Oracle server.
        !          4462: Syntax
        !          4463: sword OCIServerVersion ( dvoid        *hndlp, 
        !          4464:                        OCIError     *errhp, 
        !          4465:                        OraText         *bufp,
        !          4466:                        ub4          bufsz
        !          4467:                        ub1          hndltype );
        !          4468: Comments
        !          4469: This call returns the version string of the Oracle server. 
        !          4470: For example, the following might be returned as the version string if your 
        !          4471: application is running against a 7.3.2 server:
        !          4472: Oracle7 Server Release 7.3.2.0.0 - Production Release
        !          4473: PL/SQL Release 2.3.2.0.0 - Production
        !          4474: CORE Version 3.5.2.0.0 - Production
        !          4475: TNS for SEQUENT DYNIX/ptx: Version 2.3.2.0.0 - Production
        !          4476: NLSRTL Version 3.2.2.0.0 - Production
        !          4477: 
        !          4478: Parameters
        !          4479: hndlp (IN) - the service context handle or the server context handle.
        !          4480: errhp (IN) - an error handle which can be passed to OCIErrorGet() for 
        !          4481: diagnostic information in the event of an error.
        !          4482: bufp (IN) - the buffer in which the version information is returned.
        !          4483: bufsz (IN) - the length of the buffer.
        !          4484: hndltype (IN) - the type of handle passed to the function.
        !          4485: Related Functions
        !          4486: 
        !          4487: 
        !          4488: 
        !          4489: 
        !          4490: 
        !          4491: OCISessionBegin()
        !          4492: Name
        !          4493: OCI Session Begin and authenticate user
        !          4494: Purpose
        !          4495: Creates a user authentication and begins a user session for a given server.
        !          4496: Syntax
        !          4497: sword OCISessionBegin ( OCISvcCtx     *svchp,
        !          4498:                       OCIError      *errhp,
        !          4499:                       OCISession    *usrhp,
        !          4500:                       ub4           credt,
        !          4501:                       ub4           mode);
        !          4502: 
        !          4503: Comments
        !          4504: For Oracle8, OCISessionBegin() must be called for any given server handle 
        !          4505: before requests can be made against it. Also, OCISessionBegin() only supports 
        !          4506: authenticating the user for access to the Oracle server specified by the 
        !          4507: server handle in the service context. In other words, after OCIServerAttach() 
        !          4508: is called to initialize a server handle, OCISessionBegin() must be called to 
        !          4509: authenticate the user for that given server. 
        !          4510: When OCISessionBegin() is called for the first time for the given server 
        !          4511: handle, the initialized authentication handle is called a primary 
        !          4512: authentication context. A primary authentication context may not be created 
        !          4513: with the OCI_MIGRATE mode. Also, only one primary authentication context can 
        !          4514: be created for a given server handle and the primary authentication context c
        !          4515: an only ever be used with that server handle. If the primary authentication 
        !          4516: context is set in a service handle with a different server handle, then an 
        !          4517: error will result.
        !          4518: After OCISessionBegin() has been called for the server handle, and the primary 
        !          4519: authentication context is set in the service handle, OCISessionBegin() may be 
        !          4520: called again to initialize another authentication handle with different (or 
        !          4521: the same) credentials. When OCISessionBegin() is called with a service handle 
        !          4522: set with a primary authentication context, the returned authentication context
        !          4523: in authp is called a user authentication context. As many user authentication 
        !          4524: contexts may be initialized as desired.
        !          4525: User authentication contexts may be created with the OCI_MIGRATE mode. 
        !          4526: If the OCI_MIGRATE mode is not specified, then the user authentication 
        !          4527: context can only ever be used with the same server handle set in svchp. If 
        !          4528: OCI_MIGRATE mode is specified, then the user authentication may be set 
        !          4529: with different server handles. However, the user authentication context is 
        !          4530: restricted to use with only server handles which resolve to the same database 
        !          4531: instance and that have equivalent primary authentication contexts. Equivalent 
        !          4532: authentication contexts are those which were authenticated as the same 
        !          4533: database user.
        !          4534: OCI_SYSDBA, OCI_SYSOPER, and OCI_PRELIM_AUTH may only be used 
        !          4535: with a primary authentication context.
        !          4536: To provide credentials for a call to OCISessionBegin(), one of two methods are 
        !          4537: supported. The first is to provide a valid username and password pair for 
        !          4538: database authentication in the user authentication handle passed to 
        !          4539: OCISessionBegin(). This involves using OCIAttrSet() to set the 
        !          4540: OCI_ATTR_USERNAME and OCI_ATTR_PASSWORD attributes on the 
        !          4541: authentication handle. Then OCISessionBegin() is called with 
        !          4542: OCI_CRED_RDBMS.
        !          4543: Note: When the authentication handle is terminated using 
        !          4544: OCISessionEnd(), the username and password attributes remain 
        !          4545: unchanged and thus can be re-used in a future call to OCISessionBegin(). 
        !          4546: Otherwise, they must be reset to new values before the next 
        !          4547: OCISessionBegin() call.
        !          4548: The second type of credentials supported are external credentials. No 
        !          4549: attributes need to be set on the authentication handle before calling 
        !          4550: OCISessionBegin(). The credential type is OCI_CRED_EXT. This is equivalent 
        !          4551: to the Oracle7 `connect /' syntax. If values have been set for 
        !          4552: OCI_ATTR_USERNAME and OCI_ATTR_PASSWORD, then these are 
        !          4553: ignored if OCI_CRED_EXT is used.
        !          4554: Parameters
        !          4555: svchp (IN) - a handle to a service context. There must be a valid server 
        !          4556: handle set in svchp.
        !          4557: errhp (IN) - an error handle to the retrieve diagnostic information.
        !          4558: usrhp (IN/OUT) - a handle to an authentication context, which is initialized 
        !          4559: by this call.
        !          4560: credt (IN) - specifies the type of credentials to use for authentication. 
        !          4561: Valid values for credt are:
        !          4562: OCI_CRED_RDBMS - authenticate using a database username and 
        !          4563: password pair as credentials. The attributes OCI_ATTR_USERNAME 
        !          4564: and OCI_ATTR_PASSWORD should be set on the authentication 
        !          4565: context before this call.
        !          4566: OCI_CRED_EXT - authenticate using external credentials. No username 
        !          4567: or password is provided.
        !          4568: mode (IN) - specifies the various modes of operation. Valid modes are:
        !          4569: OCI_DEFAULT - in this mode, the authentication context returned may 
        !          4570: only ever be set with the same server context specified in svchp. This 
        !          4571: establishes the primary authentication context.
        !          4572: OCI_MIGRATE - in this mode, the new authentication context may be 
        !          4573: set in a service handle with a different server handle. This mode 
        !          4574: establishes the user authentication context. 
        !          4575: OCI_SYSDBA - in this mode, the user is authenticated for SYSDBA 
        !          4576: access.
        !          4577: OCI_SYSOPER - in this mode, the user is authenticated for SYSOPER 
        !          4578: access.
        !          4579: OCI_PRELIM_AUTH - this mode may only be used with OCI_SYSDBA 
        !          4580: or OCI_SYSOPER to authenticate for certain administration tasks.
        !          4581: Related Functions
        !          4582: OCISessionEnd()
        !          4583: 
        !          4584: 
        !          4585: 
        !          4586: 
        !          4587: 
        !          4588: 
        !          4589: OCISessionEnd()
        !          4590: Name
        !          4591: OCI Terminate user Authentication Context
        !          4592: Purpose
        !          4593: Terminates a user authentication context created by OCISessionBegin()
        !          4594: Syntax
        !          4595: sword OCISessionEnd ( OCISvcCtx       *svchp,
        !          4596:                     OCIError        *errhp,
        !          4597:                     OCISession      *usrhp,
        !          4598:                     ub4             mode);
        !          4599: 
        !          4600: Comments
        !          4601: The user security context associated with the service context is invalidated 
        !          4602: by this call. Storage for the authentication context is not freed. The 
        !          4603: transaction specified by the service context is implicitly committed. The 
        !          4604: transaction handle, if explicitly allocated, may be freed if not being used.
        !          4605: Resources allocated on the server for this user are freed.
        !          4606: The authentication handle may be reused in a new call to OCISessionBegin().
        !          4607: Parameters
        !          4608: svchp (IN/OUT) - the service context handle. There must be a valid server 
        !          4609: handle and user authentication handle associated with svchp.
        !          4610: errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for 
        !          4611: diagnostic information in the event of an error. 
        !          4612: usrhp (IN) - de-authenticate this user. If this parameter is passed as NULL, the 
        !          4613: user in the service context handle is de-authenticated.
        !          4614: mode (IN) - the only valid mode is OCI_DEFAULT.
        !          4615: Example
        !          4616: In this example, an authentication context is destroyed.
        !          4617: Related Functions
        !          4618: OCISessionBegin()
        !          4619: 
        !          4620: 
        !          4621: 
        !          4622: 
        !          4623: OCIStmtExecute()
        !          4624: Name
        !          4625: OCI EXECute
        !          4626: Purpose
        !          4627: This call associates an application request with a server.
        !          4628: Syntax
        !          4629: sword OCIStmtExecute ( OCISvcCtx           *svchp,
        !          4630:                      OCIStmt             *stmtp,
        !          4631:                      OCIError            *errhp,
        !          4632:                      ub4                 iters,
        !          4633:                      ub4                 rowoff,
        !          4634:                      CONST OCISnapshot   *snap_in,
        !          4635:                      OCISnapshot         *snap_out,
        !          4636:                      ub4                 mode );
        !          4637: Comments
        !          4638: This function  is used to execute a prepared SQL statement.
        !          4639: Using an execute call, the application associates a request with a server. On 
        !          4640: success, OCI_SUCCESS is returned.
        !          4641: If a SELECT statement is executed, the description of the select list follows 
        !          4642: implicitly as a response. This description is buffered on the client side for 
        !          4643: describes, fetches and define type conversions. Hence it is optimal to 
        !          4644: describe a select list only after an execute. 
        !          4645: Also for SELECT statements, some results are available implicitly. Rows will 
        !          4646: be received and buffered at the end of the execute. For queries with small row 
        !          4647: count, a prefetch causes memory to be released in the server if the end of 
        !          4648: fetch is reached, an optimization that may result in memory usage reduction. 
        !          4649: Set attribute call has been defined to set the number of rows to be prefetched
        !          4650: per result set.
        !          4651: For SELECT statements, at the end of the execute, the statement handle 
        !          4652: implicitly maintains a reference to the service context on which it is 
        !          4653: executed. It is the user's responsibility to maintain the integrity of the 
        !          4654: service context. If the attributes of a service context is changed for 
        !          4655: executing some operations on this service context, the service context must 
        !          4656: be restored to have the same attributes, that a statement was executed with, 
        !          4657: prior to a fetch on the statement handle. The implicit reference is maintained 
        !          4658: until the statement handle is freed or the fetch is cancelled or an end of 
        !          4659: fetch condition is reached.
        !          4660: Note: If output variables are defined for a SELECT statement before a 
        !          4661: call to OCIStmtExecute(), the number of rows specified by iters will be 
        !          4662: fetched directly into the defined output buffers and additional rows 
        !          4663: equivalent to the prefetch count will be prefetched. If there are no 
        !          4664: additional rows, then the fetch is complete without calling 
        !          4665: OCIStmtFetch().
        !          4666: The execute call will return errors if the statement has bind data types that 
        !          4667: are not supported in an Oracle7 server.
        !          4668: Parameters
        !          4669: svchp (IN/OUT) - service context handle. 
        !          4670: stmtp (IN/OUT) - an statement handle - defines the statement and the 
        !          4671: associated data to be executed at the server. It is invalid to pass in a 
        !          4672: statement handle that has bind of data types only supported in release 8.0 
        !          4673: when srvchp points to an Oracle7 server. 
        !          4674: errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for 
        !          4675: diagnostic information in the event of an error. If the statement is being 
        !          4676: batched and it is successful, then this handle will contain this particular 
        !          4677: statement execution specific errors returned from the server when the batch is 
        !          4678: flushed.
        !          4679: iters (IN) - the number of times this statement is executed for non-Select 
        !          4680: statements. For Select statements, if iters is non-zero, then defines must 
        !          4681: have been done for the statement handle. The execution fetches iters rows into 
        !          4682: these predefined buffers and prefetches more rows depending upon the prefetch 
        !          4683: row count. This function returns an error if iters=0 for non-SELECT 
        !          4684: statements.
        !          4685: rowoff (IN) - the index from which the data in an array bind is relevant for 
        !          4686: this multiple row execution. 
        !          4687: snap_in (IN) - this parameter is optional. if supplied, must point to a 
        !          4688: snapshot descriptor of type OCI_DTYPE_SNAP.  The contents of this descriptor 
        !          4689: must be obtained from the snap_out parameter of a previous call.  The 
        !          4690: descriptor is ignored if the SQL is not a SELECT.  This facility allows 
        !          4691: multiple service contexts to ORACLE to see the same consistent snapshot of the 
        !          4692: database's committed data.  However, uncommitted data in one context is not 
        !          4693: visible to another context even using the same snapshot.
        !          4694: snap_out (OUT) - this parameter optional. if supplied, must point to a 
        !          4695: descriptor of type OCI_DTYPE_SNAP. This descriptor is filled in with an 
        !          4696: opaque representation which is the current ORACLE "system change 
        !          4697: number" suitable as a snap_in input to a subsequent call to OCIStmtExecute().  
        !          4698: This descriptor should not be used any longer than necessary in order to avoid 
        !          4699: "snapshot too old" errors. 
        !          4700: mode (IN) - The modes are:
        !          4701: If OCI_DEFAULT_MODE, the default mode, is selected, the request is 
        !          4702: immediately executed. Error handle contains diagnostics on error if any. 
        !          4703: OCI_EXACT_FETCH - if the statement is a SQL SELECT, this mode is 
        !          4704: only valid if the application has set the prefetch row count prior to this 
        !          4705: call. In this mode, the OCI library will get up to the number of rows 
        !          4706: specified (i.e., prefetch row count plus iters). If the number of rows 
        !          4707: returned by the query is greater than this value, OCI_ERROR will be 
        !          4708: returned with ORA-01422 as the implementation specific error in a 
        !          4709: diagnostic record. If the number of rows returned by the query is 
        !          4710: smaller than the prefetch row count, OCI_SUCCESS_WITH_INFO will 
        !          4711: be returned with ORA-01403 as the implementation specific error. The 
        !          4712: prefetch buffer size is ignored and the OCI library tries to allocate all the 
        !          4713: space required to contain the prefetched rows. The exact fetch semantics 
        !          4714: apply to only the top level rows. No more rows can be fetched for this 
        !          4715: query at the end of the call. 
        !          4716: OCI_KEEP_FETCH_STATE - the result set rows (not yet fetched) of this 
        !          4717: statement executed in this transaction will be maintained when the 
        !          4718: transaction is detached for migration. By default, a query is cancelled 
        !          4719: when a transaction is detached for migration. This mode is the default 
        !          4720: mode when connected to a V7 server. 
        !          4721: Related Functions
        !          4722: OCIStmtPrepare()
        !          4723: 
        !          4724: 
        !          4725: 
        !          4726: 
        !          4727: 
        !          4728: OCIStmtFetch()
        !          4729: Name
        !          4730: OCI FetCH
        !          4731: Purpose
        !          4732: Fetches rows from a query.
        !          4733: Syntax
        !          4734: sword OCIStmtFetch ( OCIStmt     *stmtp,
        !          4735:                    OCIError    *errhp, 
        !          4736:                    ub4         nrows,
        !          4737:                    ub2         orientation,
        !          4738:                    ub4         mode);
        !          4739: Comments
        !          4740: The fetch call is a local call, if prefetched rows suffice. However, this is 
        !          4741: transparent to the application. If LOB columns are being read, LOB locators 
        !          4742: are fetched for subsequent LOB operations to be performed on these locators. 
        !          4743: Prefetching is turned off if LONG columns are involved. 
        !          4744: A fetch with nrows set to 0 rows effectively cancels the fetch for this 
        !          4745: statement.
        !          4746: Parameters
        !          4747: stmtp (IN) - a statement (application request) handle.
        !          4748: errhp (IN) - an error handle which can be passed to OCIErrorGet() for 
        !          4749: diagnostic information in the event of an error.
        !          4750: nrows (IN) - number of rows to be fetched from the current position.
        !          4751: orientation (IN) - for release 8.0, the only acceptable value is 
        !          4752: OCI_FETCH_NEXT, which is also the default value. 
        !          4753: mode (IN) - for release 8.0, beta-1, the following mode is defined.
        !          4754: OCI_DEFAULT - default mode
        !          4755: OCI_EOF_FETCH - indicates that it is the last fetch from the result set. 
        !          4756: If nrows is non-zero, setting this mode effectively cancels fetching after 
        !          4757: retrieving nrows, otherwise it cancels fetching immediately. 
        !          4758: Related Functions
        !          4759: OCIAttrGet()
        !          4760: 
        !          4761: 
        !          4762: 
        !          4763: 
        !          4764: 
        !          4765: OCIStmtGetBindInfo()
        !          4766: Name
        !          4767: OCI Get Bind Parameters
        !          4768: Purpose
        !          4769: Gets the bind and indicator variable names.
        !          4770: Syntax
        !          4771: sword OCIStmtGetBindInfo ( OCIStmt      *stmtp,
        !          4772:                      OCIError     *errhp,
        !          4773:                      ub4          size,
        !          4774:                      ub4          startloc,
        !          4775:                      sb4          *found,
        !          4776:                      OraText         *bvnp[],
        !          4777:                      ub1          bvnl[],
        !          4778:                      OraText         *invp[],
        !          4779:                      ub1          inpl[],
        !          4780:                      ub1          dupl[],
        !          4781:                      OCIBind      *hndl[] );
        !          4782: 
        !          4783: Comments
        !          4784: Gets the bind and indicator variable names. It returns the information for all 
        !          4785: the bind variables (even the duplicate ones) and sets the found parameter to 
        !          4786: the total number of bind variables and not just the number of distinct bind 
        !          4787: variables.
        !          4788: The statement must have been prepared with a call to OCIStmtPrepare() prior 
        !          4789: to this call. 
        !          4790: This call is processed locally.
        !          4791: Parameters
        !          4792: stmtp (IN) - the statement handle.
        !          4793: errhp (IN) - an error handle which can be passed to OCIErrorGet() for 
        !          4794: diagnostic information in the event of an error.
        !          4795: size (IN) - the number of elements in each array.
        !          4796: startloc (IN) - position of the  bind variable at which to start getting  bind 
        !          4797: information.
        !          4798: found (IN) - abs(found) gives the total number of bind variables in the 
        !          4799: statement irrespective of the start position. Positive value if the number of 
        !          4800: bind variables returned is less than the size provided, otherwise negative.
        !          4801: bvnp (OUT) - array of pointers to hold bind variable names.
        !          4802: bvnl (OUT) - array to hold the length of the each bvnp element.
        !          4803: invp (OUT) - array of pointers to hold indicator variable names.
        !          4804: inpl (OUT) - array of pointers to hold the length of the each invp element.
        !          4805: dupl (OUT) - an array whose element value is 0 or 1 depending on whether the 
        !          4806: bind position is duplicate of another.
        !          4807: hndl  (OUT) - an array which returns the bind handle if binds have been done 
        !          4808: for the bind position. No handle is returned for duplicates.
        !          4809: Related Functions
        !          4810: OCIStmtPrepare()
        !          4811: 
        !          4812: 
        !          4813: 
        !          4814: OCIStmtGetPieceInfo()
        !          4815: Name
        !          4816: OCI Get Piece Information
        !          4817: Purpose
        !          4818: Returns piece information for a piecewise operation.
        !          4819: Syntax
        !          4820: sword OCIStmtGetPieceInfo( CONST OCIStmt  *stmtp,
        !          4821:                          OCIError       *errhp,
        !          4822:                          dvoid          **hndlpp,
        !          4823:                          ub4            *typep,
        !          4824:                          ub1            *in_outp,
        !          4825:                          ub4            *iterp, 
        !          4826:                          ub4            *idxp,
        !          4827:                          ub1            *piecep );
        !          4828: 
        !          4829: Comments
        !          4830: When an execute/fetch call returns OCI_NEED_DATA to get/return a 
        !          4831: dynamic bind/define value or piece, OCIStmtGetPieceInfo() returns the 
        !          4832: relevant information: bind/define handle, iteration or index number and 
        !          4833: which piece.
        !          4834: See the section "Runtime Data Allocation and Piecewise Operations" on page 
        !          4835: 5-16 for more information about using OCIStmtGetPieceInfo().
        !          4836: Parameters
        !          4837: stmtp (IN) - the statement when executed returned OCI_NEED_DATA. 
        !          4838: errhp (OUT) - an error handle which can be passed to OCIErrorGet() for 
        !          4839: diagnostic information in the event of an error. 
        !          4840: hndlpp (OUT) - returns a pointer to the bind or define handle of the bind or 
        !          4841: define whose runtime data is required or is being provided.
        !          4842: typep (OUT) - the type of the handle pointed to by hndlpp: OCI_HTYPE_BIND 
        !          4843: (for a bind handle) or OCI_HTYPE_DEFINE (for a define handle).
        !          4844: in_outp (OUT) - returns OCI_PARAM_IN if the data is required for an IN bind 
        !          4845: value. Returns OCI_PARAM_OUT if the data is available as an OUT bind 
        !          4846: variable or a define position value.
        !          4847: iterp (OUT) - returns the row number of a multiple row operation.
        !          4848: idxp (OUT) - the index of an array element of a PL/SQL array bind operation.
        !          4849: piecep (OUT) - returns one of the following defined values - 
        !          4850: OCI_ONE_PIECE, OCI_FIRST_PIECE, OCI_NEXT_PIECE and 
        !          4851: OCI_LAST_PIECE. The default value is always OCI_ONE_PIECE. 
        !          4852: Related Functions
        !          4853: OCIAttrGet(), OCIAttrGet(), OCIStmtExecute(), OCIStmtFetch(), 
        !          4854: OCIStmtSetPieceInfo()
        !          4855: 
        !          4856: 
        !          4857: 
        !          4858: 
        !          4859: OCIStmtPrepare()
        !          4860: Name
        !          4861: OCI Statement REQuest
        !          4862: Purpose
        !          4863: This call defines the SQL/PLSQL statement to be executed.
        !          4864: Syntax
        !          4865: sword OCIStmtPrepare ( OCIStmt      *stmtp,
        !          4866:                      OCIError     *errhp,
        !          4867:                      CONST OraText   *stmt, 
        !          4868:                      ub4          stmt_len,
        !          4869:                      ub4          language,
        !          4870:                      ub4          mode);
        !          4871: Comments
        !          4872: This call is used to prepare a SQL or PL/SQL statement for execution. The 
        !          4873: OCIStmtPrepare() call defines an application request. 
        !          4874: This is a purely local call. Data values for this statement initialized in 
        !          4875: subsequent bind calls will be stored in a bind handle which will hang off this 
        !          4876: statement handle.
        !          4877: This call does not create an association between this statement handle and any 
        !          4878: particular server.
        !          4879: See the section "Preparing Statements" on page 2-21 for more information 
        !          4880: about using this call.
        !          4881: Parameters
        !          4882: stmtp (IN) - a statement handle.
        !          4883: errhp (IN) - an error handle to retrieve diagnostic information.
        !          4884: stmt (IN) - SQL or PL/SQL statement to be executed. Must be a null-
        !          4885: terminated string. The pointer to the OraText of the statement must be available 
        !          4886: as long as the statement is executed.
        !          4887: stmt_len (IN) - length of the statement. Must not be zero.
        !          4888: language (IN) - V7, V8, or native syntax. Possible values are:
        !          4889: OCI_V7_SYNTAX - V7 ORACLE parsing syntax
        !          4890: OCI_V8_SYNTAX - V8 ORACLE parsing syntax
        !          4891: OCI_NTV_SYNTAX - syntax depending upon the version of the server. 
        !          4892: mode (IN) - the only defined mode is OCI_DEFAULT for default mode. 
        !          4893: Example
        !          4894: This example demonstrates the use of OCIStmtPrepare(), as well as the OCI 
        !          4895: application initialization calls.
        !          4896: Related Functions
        !          4897: OCIAttrGet(), OCIStmtExecute()
        !          4898: 
        !          4899: 
        !          4900: OCIStmtSetPieceInfo()
        !          4901: Name
        !          4902: OCI Set Piece Information
        !          4903: Purpose
        !          4904: Sets piece information for a piecewise operation.
        !          4905: Syntax
        !          4906: sword OCIStmtSetPieceInfo ( dvoid             *hndlp,
        !          4907:                           ub4               type,
        !          4908:                           OCIError          *errhp,
        !          4909:                           CONST dvoid       *bufp,
        !          4910:                           ub4               *alenp, 
        !          4911:                           ub1               piece,
        !          4912:                           CONST dvoid       *indp, 
        !          4913:                           ub2               *rcodep ); 
        !          4914: Comments
        !          4915: When an execute call returns OCI_NEED_DATA to get a dynamic IN/OUT 
        !          4916: bind value or piece, OCIStmtSetPieceInfo() sets the piece information: the 
        !          4917: buffer, the length, the indicator and which piece is currently being processed.
        !          4918: For more information about using OCIStmtSetPieceInfo() see the section 
        !          4919: "Runtime Data Allocation and Piecewise Operations" on page 5-16.
        !          4920: Parameters
        !          4921: hndlp (IN/OUT) - the bind/define handle.
        !          4922: type (IN) - type of the handle. 
        !          4923: errhp (OUT) - an error handle which can be passed to OCIErrorGet() for 
        !          4924: diagnostic information in the event of an error.
        !          4925: bufp (IN/OUT) - bufp is a pointer to a storage containing the data value or 
        !          4926: the piece when it is an IN bind variable, otherwise bufp is a pointer to 
        !          4927: storage for getting a piece or a value for OUT binds and define variables. For
        !          4928: named data types or REFs, a pointer to the object or REF is returned.
        !          4929: alenp (IN/OUT) - the length of the piece or the value. 
        !          4930: piece (IN) - the piece parameter. The following are valid values: 
        !          4931: OCI_ONE_PIECE, OCI_FIRST_PIECE, OCI_NEXT_PIECE, or 
        !          4932: OCI_LAST_PIECE. 
        !          4933: The default value is OCI_ONE_PIECE. This parameter is used for IN bind 
        !          4934: variables only.
        !          4935: indp (IN/OUT) - indicator. A pointer to a sb2 value or pointer to an indicator 
        !          4936: structure for named data types (SQLT_NTY) and REFs (SQLT_REF), i.e., *indp 
        !          4937: is either an sb2 or a dvoid * depending upon the data type.
        !          4938: rcodep (IN/OUT) - return code. 
        !          4939: Related Functions
        !          4940: OCIAttrGet(), OCIAttrGet(), OCIStmtExecute(), OCIStmtFetch(), 
        !          4941: OCIStmtGetPieceInfo()
        !          4942: 
        !          4943: 
        !          4944: OCIFormatInit
        !          4945: Name
        !          4946: OCIFormat Package Initialize
        !          4947: Purpose
        !          4948: Initializes the OCIFormat package.
        !          4949: Syntax
        !          4950: sword OCIFormatInit(dvoid *hndl, OCIError *err);
        !          4951: Comments
        !          4952: This routine must be called before calling any other OCIFormat routine.
        !          4953: Returns OCI_SUCCESS, OCI_INVALID_HANDLE, or OCI_ERROR
        !          4954: Parameters
        !          4955: hndl (IN/OUT) - OCI environment or session handle
        !          4956: err (IN/OUT) - OCI error handle
        !          4957: Related Functions
        !          4958: OCIFormatTerm()
        !          4959: 
        !          4960: 
        !          4961: OCIFormatString
        !          4962: Name
        !          4963: OCIFormat Package Format String
        !          4964: Purpose
        !          4965: Writes a text string into the supplied text buffer using the argument
        !          4966: list submitted to it and in accordance with the format string given.
        !          4967: Syntax
        !          4968: sword OCIFormatString(dvoid *hndl, OCIError *err, OraText *buffer,
        !          4969:                       sbig_ora bufferLength, sbig_ora *returnLength,
        !          4970:                       CONST OraText *formatString, ...);
        !          4971: Comments
        !          4972: The first call to this routine must be preceded by a call to the
        !          4973: OCIFormatInit routine that initializes the OCIFormat package
        !          4974: for use.  When this routine is no longer needed then terminate
        !          4975: the OCIFormat package by a call to the OCIFormatTerm routine.
        !          4976: Returns OCI_SUCCESS, OCI_INVALID_HANDLE, or OCI_ERROR
        !          4977: Parameters
        !          4978: hndl         (IN/OUT) - OCI environment or session handle
        !          4979: err          (IN/OUT) - OCI error handle
        !          4980: buffer       (OUT)    - text buffer for the string
        !          4981: bufferLength (IN)     - length of the text buffer
        !          4982: returnLength (OUT)    - length of the formatted string
        !          4983: formatString (IN)     - format specification string
        !          4984: ...          (IN)     - variable argument list
        !          4985: Related Functions
        !          4986: 
        !          4987: 
        !          4988: OCIFormatTerm 
        !          4989: Name
        !          4990: OCIFormat Package Terminate
        !          4991: Purpose
        !          4992: Terminates the OCIFormat package.
        !          4993: Syntax
        !          4994: sword OCIFormatTerm(dvoid *hndl, OCIError *err);
        !          4995: Comments
        !          4996: It must be called after the OCIFormat package is no longer being used.
        !          4997: Returns OCI_SUCCESS, OCI_INVALID_HANDLE, or OCI_ERROR
        !          4998: Parameters
        !          4999: hndl (IN/OUT) - OCI environment or session handle
        !          5000: err (IN/OUT) - OCI error handle
        !          5001: Related Functions
        !          5002: OCIFormatInit()
        !          5003: 
        !          5004: 
        !          5005: OCIFormatTUb1
        !          5006: Name
        !          5007: OCIFormat Package ub1 Type
        !          5008: Purpose
        !          5009: Return the type value for the ub1 type.
        !          5010: Syntax
        !          5011: sword OCIFormatTUb1(void);
        !          5012: Comments
        !          5013: None
        !          5014: Parameters
        !          5015: None
        !          5016: Related Functions
        !          5017: None
        !          5018: 
        !          5019: 
        !          5020: OCIFormatTUb2
        !          5021: Name
        !          5022: OCIFormat Package ub2 Type
        !          5023: Purpose
        !          5024: Return the type value for the ub2 type.
        !          5025: Syntax
        !          5026: sword OCIFormatTUb2(void);
        !          5027: Comments
        !          5028: None
        !          5029: Parameters
        !          5030: None
        !          5031: Related Functions
        !          5032: None
        !          5033: 
        !          5034: 
        !          5035: OCIFormatTUb4
        !          5036: Name
        !          5037: OCIFormat Package ub4 Type
        !          5038: Purpose
        !          5039: Return the type value for the ub4 type.
        !          5040: Syntax
        !          5041: sword OCIFormatTUb4(void);
        !          5042: Comments
        !          5043: None
        !          5044: Parameters
        !          5045: None
        !          5046: Related Functions
        !          5047: None
        !          5048: 
        !          5049: 
        !          5050: OCIFormatTUword
        !          5051: Name
        !          5052: OCIFormat Package uword Type
        !          5053: Purpose
        !          5054: Return the type value for the uword type.
        !          5055: Syntax
        !          5056: sword OCIFormatTUword(void);
        !          5057: Comments
        !          5058: None
        !          5059: Parameters
        !          5060: None
        !          5061: Related Functions
        !          5062: None
        !          5063: 
        !          5064: 
        !          5065: OCIFormatTUbig_ora
        !          5066: Name
        !          5067: OCIFormat Package ubig_ora Type
        !          5068: Purpose
        !          5069: Return the type value for the ubig_ora type.
        !          5070: Syntax
        !          5071: sword OCIFormatTUbig_ora(void);
        !          5072: Comments
        !          5073: None
        !          5074: Parameters
        !          5075: None
        !          5076: Related Functions
        !          5077: None
        !          5078: 
        !          5079: 
        !          5080: OCIFormatTSb1
        !          5081: Name
        !          5082: OCIFormat Package sb1 Type
        !          5083: Purpose
        !          5084: Return the type value for the sb1 type.
        !          5085: Syntax
        !          5086: sword OCIFormatTSb1(void);
        !          5087: Comments
        !          5088: None
        !          5089: Parameters
        !          5090: None
        !          5091: Related Functions
        !          5092: None
        !          5093: 
        !          5094: 
        !          5095: OCIFormatTSb2
        !          5096: Name
        !          5097: OCIFormat Package sb2 Type
        !          5098: Purpose
        !          5099: Return the type value for the sb2 type.
        !          5100: Syntax
        !          5101: sword OCIFormatTSb2(void);
        !          5102: Comments
        !          5103: None
        !          5104: Parameters
        !          5105: None
        !          5106: Related Functions
        !          5107: None
        !          5108: 
        !          5109: 
        !          5110: OCIFormatTSb4
        !          5111: Name
        !          5112: OCIFormat Package sb4 Type
        !          5113: Purpose
        !          5114: Return the type value for the sb4 type.
        !          5115: Syntax
        !          5116: sword OCIFormatTSb4(void);
        !          5117: Comments
        !          5118: None
        !          5119: Parameters
        !          5120: None
        !          5121: Related Functions
        !          5122: None
        !          5123: 
        !          5124: 
        !          5125: OCIFormatTSword
        !          5126: Name
        !          5127: OCIFormat Package sword Type
        !          5128: Purpose
        !          5129: Return the type value for the sword type.
        !          5130: Syntax
        !          5131: sword OCIFormatTSword(void);
        !          5132: Comments
        !          5133: None
        !          5134: Parameters
        !          5135: None
        !          5136: Related Functions
        !          5137: None
        !          5138: 
        !          5139: 
        !          5140: OCIFormatTSbig_ora
        !          5141: Name
        !          5142: OCIFormat Package sbig_ora Type
        !          5143: Purpose
        !          5144: Return the type value for the sbig_ora type.
        !          5145: Syntax
        !          5146: sword OCIFormatTSbig_ora(void);
        !          5147: Comments
        !          5148: None
        !          5149: Parameters
        !          5150: None
        !          5151: Related Functions
        !          5152: None
        !          5153: 
        !          5154: 
        !          5155: OCIFormatTEb1
        !          5156: Name
        !          5157: OCIFormat Package eb1 Type
        !          5158: Purpose
        !          5159: Return the type value for the eb1 type.
        !          5160: Syntax
        !          5161: sword OCIFormatTEb1(void);
        !          5162: Comments
        !          5163: None
        !          5164: Parameters
        !          5165: None
        !          5166: Related Functions
        !          5167: None
        !          5168: 
        !          5169: 
        !          5170: OCIFormatTEb2
        !          5171: Name
        !          5172: OCIFormat Package eb2 Type
        !          5173: Purpose
        !          5174: Return the type value for the eb2 type.
        !          5175: Syntax
        !          5176: sword OCIFormatTEb2(void);
        !          5177: Comments
        !          5178: None
        !          5179: Parameters
        !          5180: None
        !          5181: Related Functions
        !          5182: None
        !          5183: 
        !          5184: 
        !          5185: OCIFormatTEb4
        !          5186: Name
        !          5187: OCIFormat Package eb4 Type
        !          5188: Purpose
        !          5189: Return the type value for the eb4 type.
        !          5190: Syntax
        !          5191: sword OCIFormatTEb4(void);
        !          5192: Comments
        !          5193: None
        !          5194: Parameters
        !          5195: None
        !          5196: Related Functions
        !          5197: None
        !          5198: 
        !          5199: 
        !          5200: OCIFormatTEword
        !          5201: Name
        !          5202: OCIFormat Package eword Type
        !          5203: Purpose
        !          5204: Return the type value for the eword type.
        !          5205: Syntax
        !          5206: sword OCIFormatTEword(void);
        !          5207: Comments
        !          5208: None
        !          5209: Parameters
        !          5210: None
        !          5211: Related Functions
        !          5212: None
        !          5213: 
        !          5214: 
        !          5215: OCIFormatTChar
        !          5216: Name
        !          5217: OCIFormat Package text Type
        !          5218: Purpose
        !          5219: Return the type value for the text type.
        !          5220: Syntax
        !          5221: sword OCIFormatTChar(void);
        !          5222: Comments
        !          5223: None
        !          5224: Parameters
        !          5225: None
        !          5226: Related Functions
        !          5227: None
        !          5228: 
        !          5229: 
        !          5230: OCIFormatTText
        !          5231: Name
        !          5232: OCIFormat Package *text Type
        !          5233: Purpose
        !          5234: Return the type value for the *text type.
        !          5235: Syntax
        !          5236: sword OCIFormatTText(void);
        !          5237: Comments
        !          5238: None
        !          5239: Parameters
        !          5240: None
        !          5241: Related Functions
        !          5242: None
        !          5243: 
        !          5244: 
        !          5245: OCIFormatTDouble
        !          5246: Name
        !          5247: OCIFormat Package double Type
        !          5248: Purpose
        !          5249: Return the type value for the double type.
        !          5250: Syntax
        !          5251: sword OCIFormatTDouble(void);
        !          5252: Comments
        !          5253: None
        !          5254: Parameters
        !          5255: None
        !          5256: Related Functions
        !          5257: None
        !          5258: 
        !          5259: 
        !          5260: OCIFormatDvoid
        !          5261: Name
        !          5262: OCIFormat Package dvoid Type
        !          5263: Purpose
        !          5264: Return the type value for the dvoid type.
        !          5265: Syntax
        !          5266: sword OCIFormatTDvoid(void);
        !          5267: Comments
        !          5268: None
        !          5269: Parameters
        !          5270: None
        !          5271: Related Functions
        !          5272: None
        !          5273: 
        !          5274: 
        !          5275: OCIFormatTEnd
        !          5276: Name
        !          5277: OCIFormat Package end Type
        !          5278: Purpose
        !          5279: Return the list terminator's "type".
        !          5280: Syntax
        !          5281: sword OCIFormatTEnd(void);
        !          5282: Comments
        !          5283: None
        !          5284: Parameters
        !          5285: None
        !          5286: Related Functions
        !          5287: None
        !          5288: 
        !          5289: 
        !          5290: OCISvcCtxToLda()
        !          5291: Name
        !          5292: OCI toggle SerVice context handle to Version 7 Lda_Def
        !          5293: Purpose
        !          5294: Toggles between a V8 service context handle and a V7 Lda_Def.
        !          5295: Syntax
        !          5296: sword OCISvcCtxToLda ( OCISvcCtx    *srvhp,
        !          5297:                      OCIError     *errhp,
        !          5298:                      Lda_Def      *ldap );
        !          5299: Comments
        !          5300: Toggles between an Oracle8 service context handle and an Oracle7 Lda_Def.
        !          5301: This function can only be called after a service context has been properly 
        !          5302: initialized.
        !          5303: Once the service context has been translated to an Lda_Def, it can be used in 
        !          5304: release 7.x OCI calls (e.g., obindps(), ofen()).
        !          5305: Note: If there are multiple service contexts which share the same server 
        !          5306: handle, only one can be in V7 mode at any time.
        !          5307: The action of this call can be reversed by passing the resulting Lda_Def to 
        !          5308: the OCILdaToSvcCtx() function.
        !          5309: Parameters
        !          5310: svchp (IN/OUT) - the service context handle. 
        !          5311: errhp (IN/OUT) - an error handle which can be passed to OCIErrorGet() for 
        !          5312: diagnostic information in the event of an error. 
        !          5313: ldap (IN/OUT) - a Logon Data Area for V7-style OCI calls which is initialized 
        !          5314: by this call. 
        !          5315: Related Functions
        !          5316: OCILdaToSvcCtx()
        !          5317: 
        !          5318: 
        !          5319: 
        !          5320: 
        !          5321: OCITransCommit()
        !          5322: Name
        !          5323: OCI TX (transaction) CoMmit
        !          5324: Purpose
        !          5325: Commits the transaction associated with a specified service context.
        !          5326: Syntax
        !          5327: sword OCITransCommit ( OCISvcCtx    *srvcp,
        !          5328:                      OCIError     *errhp,
        !          5329:                      ub4          flags );
        !          5330: Comments
        !          5331: The transaction currently associated with the service context is committed. If 
        !          5332: it is a distributed transaction that the server cannot commit, this call 
        !          5333: additionally retrieves the state of the transaction from the database to be 
        !          5334: returned to the user in the error handle.
        !          5335: If the application has defined multiple transactions, this function operates 
        !          5336: on the transaction currently associated with the service context. If the 
        !          5337: application is working with only the implicit local transaction created when 
        !          5338: database changes are made, that implicit transaction is committed.
        !          5339: If the application is running in the object mode, then the modified or updated 
        !          5340: objects in the object cache for this transaction are also committed.
        !          5341: The flags parameter is used for one-phase commit optimization in distributed 
        !          5342: transactions. If the transaction is non-distributed, the flags parameter is 
        !          5343: ignored, and OCI_DEFAULT can be passed as its value. OCI applications 
        !          5344: managing global transactions should pass a value of 
        !          5345: OCI_TRANS_TWOPHASE to the flags parameter for a two-phase commit. The 
        !          5346: default is one-phase commit.
        !          5347: Under normal circumstances, OCITransCommit() returns with a status 
        !          5348: indicating that the transaction has either been committed or rolled back. With 
        !          5349: distributed transactions, it is possible that the transaction is now in-doubt 
        !          5350: (i.e., neither committed nor aborted). In this case, OCITransCommit() 
        !          5351: attempts to retrieve the status of the transaction from the server. 
        !          5352: The status is returned.
        !          5353: Parameters
        !          5354: srvcp (IN) - the service context handle.
        !          5355: errhp (IN) - an error handle which can be passed to OCIErrorGet() for 
        !          5356: diagnostic information in the event of an error.
        !          5357: flags -see the "Comments" section above.
        !          5358: Related Functions
        !          5359: OCITransRollback()
        !          5360: 
        !          5361: 
        !          5362: 
        !          5363: 
        !          5364: OCITransDetach()
        !          5365: Name
        !          5366: OCI TX (transaction) DeTach
        !          5367: Purpose
        !          5368: Detaches a transaction.
        !          5369: Syntax
        !          5370: sword OCITransDetach ( OCISvcCtx    *srvcp,
        !          5371:                      OCIError     *errhp,
        !          5372:                      ub4          flags);
        !          5373: Comments
        !          5374: Detaches a global transaction from the service context handle. The transaction 
        !          5375: currently attached to the service context handle becomes inactive at the end 
        !          5376: of this call. The transaction may be resumed later by calling OCITransStart(), 
        !          5377: specifying  a flags value of OCI_TRANS_RESUME.
        !          5378: When a transaction is detached, the value which was specified in the timeout 
        !          5379: parameter of OCITransStart() when the transaction was started is used to 
        !          5380: determine the amount of time the branch can remain inactive before being 
        !          5381: deleted by the server's PMON process.
        !          5382: Note: The transaction can be resumed by a different process than the one 
        !          5383: that detached it, provided that the transaction has the same 
        !          5384: authorization.
        !          5385: Parameters
        !          5386: srvcp (IN) - the service context handle. 
        !          5387: errhp (IN) - an error handle which can be passed to OCIErrorGet() for 
        !          5388: diagnostic information in the event of an error.
        !          5389: flags (IN) - you must pass a value of OCI_DEFAULT for this parameter.
        !          5390: Related Functions
        !          5391: OCITransStart()
        !          5392: 
        !          5393: 
        !          5394: 
        !          5395: OCITransForget()
        !          5396: Name
        !          5397: OCI TX (transaction) ForGeT
        !          5398: Purpose
        !          5399: Causes the server to forget a heuristically completed global transaction.
        !          5400: Syntax
        !          5401: sword OCITransForget ( OCISvcCtx     *svchp, 
        !          5402:                      OCIError      *errhp,
        !          5403:                      ub4           flags);
        !          5404: 
        !          5405: Comments
        !          5406: 
        !          5407: Forgets a heuristically completed global transaction. The server deletes the 
        !          5408: status of the transaction from the system's pending transaction table.
        !          5409: The XID of the transaction to be forgotten is set as an attribute of the 
        !          5410: transaction handle (OCI_ATTR_XID).
        !          5411: Parameters
        !          5412: srvcp (IN) - the service context handle - the transaction is rolled back.
        !          5413: errhp (IN) - an error handle which can be passed to OCIErrorGet() for 
        !          5414: diagnostic information in the event of an error.
        !          5415: flags (IN) - you must pass OCI_DEFAULT for this parameter.
        !          5416: Related Functions
        !          5417: OCITransCommit(), OCITransRollback()
        !          5418: 
        !          5419: 
        !          5420: OCITransMultiPrepare() 
        !          5421: Name
        !          5422: OCI Trans(action) Multi-Branch Prepare
        !          5423: Purpose
        !          5424: Prepares a transaction with multiple branches in a single call.
        !          5425: Syntax
        !          5426: sword OCITransMultiPrepare ( OCISvcCtx    *svchp,
        !          5427:                              ub4           numBranches,
        !          5428:                              OCITrans     **txns,
        !          5429:                              OCIError     **errhp);
        !          5430: 
        !          5431: Comments
        !          5432: 
        !          5433: Prepares the specified global transaction for commit.
        !          5434: This call is valid only for distributed transactions.
        !          5435: This call is an advanced performance feature intended for use only in
        !          5436: situations where the caller is responsible for preparing all the branches
        !          5437: in a transaction. 
        !          5438: Parameters
        !          5439: srvcp (IN) - the service context handle. 
        !          5440: numBranches (IN) - This is the number of branches expected. It is also the
        !          5441: array size for the next two parameters.
        !          5442: txns (IN) - This is the array of transaction handles for the branches to
        !          5443: prepare. They should all have the OCI_ATTR_XID set. The global transaction
        !          5444: ID should be the same.
        !          5445: errhp (IN) - This is the array of error handles. If OCI_SUCCESS is not
        !          5446: returned, then these will indicate which branches received which errors.
        !          5447: Related Functions
        !          5448: OCITransPrepare()
        !          5449: 
        !          5450: 
        !          5451: OCITransPrepare()
        !          5452: Name
        !          5453: OCI TX (transaction) PREpare
        !          5454: Purpose
        !          5455: Prepares a transaction for commit.
        !          5456: Syntax
        !          5457: sword OCITransPrepare ( OCISvcCtx    *svchp, 
        !          5458:                       OCIError     *errhp,
        !          5459:                       ub4          flags);
        !          5460: 
        !          5461: Comments
        !          5462: 
        !          5463: Prepares the specified global transaction for commit.
        !          5464: This call is valid only for distributed transactions.
        !          5465: The call returns OCI_SUCCESS_WITH_INFO if the transaction has not made 
        !          5466: any changes. The error handle will indicate that the transaction is read-only. 
        !          5467: The flag parameter is not currently used. 
        !          5468: Parameters
        !          5469: srvcp (IN) - the service context handle. 
        !          5470: errhp (IN) - an error handle which can be passed to OCIErrorGet() for 
        !          5471: diagnostic information in the event of an error.
        !          5472: flags (IN) - you must pass OCI_DEFAULT for this parameter.
        !          5473: Related Functions
        !          5474: OCITransCommit(), OCITransForget()
        !          5475: 
        !          5476: 
        !          5477: 
        !          5478: 
        !          5479: OCITransRollback()
        !          5480: Name
        !          5481: OCI TX (transaction) RoLlback
        !          5482: Purpose
        !          5483: Rolls back the current transaction.
        !          5484: Syntax
        !          5485: sword OCITransRollback ( dvoid        *svchp, 
        !          5486:                        OCIError     *errhp,
        !          5487:                        ub4          flags );
        !          5488: Comments
        !          5489: The current transaction- defined as the set of statements executed since the 
        !          5490: last OCITransCommit() or since OCISessionBegin()-is rolled back.
        !          5491: If the application is running under object mode then the modified or updated 
        !          5492: objects in the object cache for this transaction are also rolled back.
        !          5493: An error is returned if an attempt is made to roll back a global transaction 
        !          5494: that is not currently active.
        !          5495: Parameters
        !          5496: svchp (IN) - a service context handle. The transaction currently set in the 
        !          5497: service context handle is rolled back.
        !          5498: errhp -(IN) - an error handle which can be passed to OCIErrorGet() for 
        !          5499: diagnostic information in the event of an error.
        !          5500: flags - you must pass a value of OCI_DEFAULT for this parameter.
        !          5501: Related Functions
        !          5502: OCITransCommit()
        !          5503: 
        !          5504: 
        !          5505: 
        !          5506: 
        !          5507: OCITransStart()
        !          5508: Name
        !          5509: OCI TX (transaction) STart
        !          5510: Purpose
        !          5511: Sets the beginning of a transaction.
        !          5512: Syntax
        !          5513: sword OCITransStart ( OCISvcCtx    *svchp, 
        !          5514:                     OCIError     *errhp, 
        !          5515:                     uword        timeout,
        !          5516:                     ub4          flags);
        !          5517: 
        !          5518: Comments
        !          5519: This function sets the beginning of a global or serializable transaction. The 
        !          5520: transaction context currently associated with the service context handle is 
        !          5521: initialized at the end of the call if the flags parameter specifies that a new 
        !          5522: transaction should be started.
        !          5523: The XID of the transaction is set as an attribute of the transaction handle 
        !          5524: (OCI_ATTR_XID)
        !          5525: Parameters
        !          5526: svchp (IN/OUT) - the service context handle. The transaction context in the 
        !          5527: service context handle is initialized at the end of the call if the flag 
        !          5528: specified a new transaction to be started.
        !          5529: errhp (IN/OUT) - The OCI error handle. If there is an error, it is recorded in 
        !          5530: err and this function returns OCI_ERROR. Diagnostic information can be 
        !          5531: obtained by calling OCIErrorGet().
        !          5532: timeout (IN) - the time, in seconds, to wait for a transaction to become 
        !          5533: available for resumption when OCI_TRANS_RESUME is specified. When 
        !          5534: OCI_TRANS_NEW is specified, this value is stored and may be used later by 
        !          5535: OCITransDetach().
        !          5536: flags (IN) - specifies whether a new transaction is being started or an 
        !          5537: existing transaction is being resumed. Also specifies serializiability or 
        !          5538: read-only status. More than a single value can be specified. By default, 
        !          5539: a read/write transaction is started. The flag values are:
        !          5540: OCI_TRANS_NEW - starts a new transaction branch. By default starts a 
        !          5541: tightly coupled and migratable branch.
        !          5542: OCI_TRANS_TIGHT - explicitly specifies a tightly coupled branch
        !          5543: OCI_TRANS_LOOSE - specifies a loosely coupled branch
        !          5544: OCI_TRANS_RESUME - resumes an existing transaction branch. 
        !          5545: OCI_TRANS_READONLY - start a readonly transaction
        !          5546: OCI_TRANS_SERIALIZABLE - start a serializable transaction
        !          5547: Related Functions
        !          5548: OCITransDetach()
        !          5549: 
        !          5550: 
        !          5551: 
        !          5552: 
        !          5553: 
        !          5554: ******************************************************************************/
        !          5555: /*-----------------------Dynamic Callback Function Pointers------------------*/
        !          5556:  
        !          5557:  
        !          5558: typedef sb4 (*OCICallbackInBind)(dvoid *ictxp, OCIBind *bindp, ub4 iter,
        !          5559:                                   ub4 index, dvoid **bufpp, ub4 *alenp,
        !          5560:                                   ub1 *piecep, dvoid **indp);
        !          5561:  
        !          5562: typedef sb4 (*OCICallbackOutBind)(dvoid *octxp, OCIBind *bindp, ub4 iter,
        !          5563:                                  ub4 index, dvoid **bufpp, ub4 **alenp,
        !          5564:                                  ub1 *piecep, dvoid **indp,
        !          5565:                                  ub2 **rcodep);
        !          5566:  
        !          5567: typedef sb4 (*OCICallbackDefine)(dvoid *octxp, OCIDefine *defnp, ub4 iter,
        !          5568:                                  dvoid **bufpp, ub4 **alenp, ub1 *piecep,
        !          5569:                                  dvoid **indp, ub2 **rcodep);
        !          5570: 
        !          5571: typedef sword (*OCIUserCallback)(dvoid *ctxp, dvoid *hndlp, ub4 type,
        !          5572:                                  ub4 fcode, ub4 when, sword returnCode,
        !          5573:                                  sb4 *errnop, va_list arglist);
        !          5574: 
        !          5575: typedef sword (*OCIEnvCallbackType)(OCIEnv *env, ub4 mode,
        !          5576:                                    size_t xtramem_sz, dvoid *usrmemp,
        !          5577:                                    OCIUcb *ucbDesc); 
        !          5578: 
        !          5579: typedef sb4 (*OCICallbackLobRead)(dvoid *ctxp, CONST dvoid *bufp,
        !          5580:                                              ub4 len, ub1 piece);
        !          5581: 
        !          5582: typedef sb4 (*OCICallbackLobWrite)(dvoid *ctxp, dvoid *bufp, 
        !          5583:                                           ub4 *lenp, ub1 *piece);
        !          5584: 
        !          5585: /*--------------------------Failover Callback Structure ---------------------*/
        !          5586: typedef sb4 (*OCICallbackFailover)(dvoid *svcctx, dvoid *envctx,
        !          5587:                                    dvoid *fo_ctx, ub4 fo_type,
        !          5588:                                    ub4 fo_event);
        !          5589: 
        !          5590: typedef struct
        !          5591: {
        !          5592:   OCICallbackFailover callback_function;
        !          5593:   dvoid *fo_ctx;
        !          5594: } 
        !          5595: OCIFocbkStruct;
        !          5596: 
        !          5597: /*****************************************************************************
        !          5598:                          ACTUAL PROTOTYPE DECLARATIONS
        !          5599: ******************************************************************************/
        !          5600: 
        !          5601: sword   OCIInitialize   (ub4 mode, dvoid *ctxp, 
        !          5602:                  dvoid *(*malocfp)(dvoid *ctxp, size_t size),
        !          5603:                  dvoid *(*ralocfp)(dvoid *ctxp, dvoid *memptr, size_t newsize),
        !          5604:                  void   (*mfreefp)(dvoid *ctxp, dvoid *memptr) );
        !          5605: 
        !          5606: sword   OCITerminate( ub4 mode);
        !          5607: 
        !          5608: sword   OCIEnvCreate (OCIEnv **envp, ub4 mode, dvoid *ctxp,
        !          5609:                  dvoid *(*malocfp)(dvoid *ctxp, size_t size),
        !          5610:                  dvoid *(*ralocfp)(dvoid *ctxp, dvoid *memptr, size_t newsize),
        !          5611:                  void   (*mfreefp)(dvoid *ctxp, dvoid *memptr),
        !          5612:                  size_t xtramem_sz, dvoid **usrmempp);
        !          5613: 
        !          5614: sword   OCIFEnvCreate (OCIEnv **envp, ub4 mode, dvoid *ctxp,
        !          5615:                  dvoid *(*malocfp)(dvoid *ctxp, size_t size),
        !          5616:                  dvoid *(*ralocfp)(dvoid *ctxp, dvoid *memptr, size_t newsize),
        !          5617:                  void   (*mfreefp)(dvoid *ctxp, dvoid *memptr),
        !          5618:                  size_t xtramem_sz, dvoid **usrmempp, dvoid *fupg);
        !          5619: 
        !          5620: sword   OCIHandleAlloc(CONST dvoid *parenth, dvoid **hndlpp, CONST ub4 type, 
        !          5621:                        CONST size_t xtramem_sz, dvoid **usrmempp);
        !          5622: 
        !          5623: sword   OCIHandleFree(dvoid *hndlp, CONST ub4 type);
        !          5624: 
        !          5625: 
        !          5626: sword   OCIDescriptorAlloc(CONST dvoid *parenth, dvoid **descpp, 
        !          5627:                            CONST ub4 type, CONST size_t xtramem_sz, 
        !          5628:                            dvoid **usrmempp);
        !          5629: 
        !          5630: sword   OCIDescriptorFree(dvoid *descp, CONST ub4 type);
        !          5631: 
        !          5632: sword   OCIEnvInit (OCIEnv **envp, ub4 mode, 
        !          5633:                     size_t xtramem_sz, dvoid **usrmempp);
        !          5634: 
        !          5635: sword   OCIServerAttach  (OCIServer *srvhp, OCIError *errhp,
        !          5636:                           CONST OraText *dblink, sb4 dblink_len, ub4 mode);
        !          5637: 
        !          5638: sword   OCIServerDetach  (OCIServer *srvhp, OCIError *errhp, ub4 mode);
        !          5639: 
        !          5640: sword   OCISessionBegin  (OCISvcCtx *svchp, OCIError *errhp, OCISession *usrhp,
        !          5641:                           ub4 credt, ub4 mode);
        !          5642: 
        !          5643: sword   OCISessionEnd   (OCISvcCtx *svchp, OCIError *errhp, OCISession *usrhp, 
        !          5644:                          ub4 mode);
        !          5645: 
        !          5646: sword   OCILogon (OCIEnv *envhp, OCIError *errhp, OCISvcCtx **svchp, 
        !          5647:                  CONST OraText *username, ub4 uname_len, 
        !          5648:                  CONST OraText *password, ub4 passwd_len, 
        !          5649:                  CONST OraText *dbname, ub4 dbname_len);
        !          5650: 
        !          5651: sword   OCILogoff (OCISvcCtx *svchp, OCIError *errhp);
        !          5652: 
        !          5653: 
        !          5654: sword   OCIPasswordChange   (OCISvcCtx *svchp, OCIError *errhp, 
        !          5655:                              CONST OraText *user_name, ub4 usernm_len, 
        !          5656:                              CONST OraText *opasswd, ub4 opasswd_len, 
        !          5657:                              CONST OraText *npasswd, ub4 npasswd_len, ub4 mode);
        !          5658: 
        !          5659: sword   OCIStmtPrepare   (OCIStmt *stmtp, OCIError *errhp, CONST OraText *stmt,
        !          5660:                           ub4 stmt_len, ub4 language, ub4 mode);
        !          5661: 
        !          5662: sword   OCIBindByPos  (OCIStmt *stmtp, OCIBind **bindp, OCIError *errhp,
        !          5663:                       ub4 position, dvoid *valuep, sb4 value_sz,
        !          5664:                       ub2 dty, dvoid *indp, ub2 *alenp, ub2 *rcodep,
        !          5665:                       ub4 maxarr_len, ub4 *curelep, ub4 mode);
        !          5666: 
        !          5667: sword   OCIBindByName   (OCIStmt *stmtp, OCIBind **bindp, OCIError *errhp,
        !          5668:                         CONST OraText *placeholder, sb4 placeh_len, 
        !          5669:                          dvoid *valuep, sb4 value_sz, ub2 dty, 
        !          5670:                          dvoid *indp, ub2 *alenp, ub2 *rcodep, 
        !          5671:                          ub4 maxarr_len, ub4 *curelep, ub4 mode);
        !          5672: 
        !          5673: sword   OCIBindObject  (OCIBind *bindp, OCIError *errhp, CONST OCIType *type, 
        !          5674:                        dvoid **pgvpp, ub4 *pvszsp, dvoid **indpp, 
        !          5675:                        ub4 *indszp);
        !          5676: 
        !          5677: sword   OCIBindDynamic   (OCIBind *bindp, OCIError *errhp, dvoid *ictxp,
        !          5678:                          OCICallbackInBind icbfp, dvoid *octxp,
        !          5679:                          OCICallbackOutBind ocbfp);
        !          5680: 
        !          5681: sword   OCIBindArrayOfStruct   (OCIBind *bindp, OCIError *errhp, 
        !          5682:                                 ub4 pvskip, ub4 indskip,
        !          5683:                                 ub4 alskip, ub4 rcskip);
        !          5684: 
        !          5685: sword   OCIStmtGetPieceInfo   (OCIStmt *stmtp, OCIError *errhp, 
        !          5686:                                dvoid **hndlpp, ub4 *typep,
        !          5687:                                ub1 *in_outp, ub4 *iterp, ub4 *idxp, 
        !          5688:                                ub1 *piecep);
        !          5689: 
        !          5690: sword   OCIStmtSetPieceInfo   (dvoid *hndlp, ub4 type, OCIError *errhp, 
        !          5691:                                CONST dvoid *bufp, ub4 *alenp, ub1 piece, 
        !          5692:                                CONST dvoid *indp, ub2 *rcodep);
        !          5693: 
        !          5694: sword   OCIStmtExecute  (OCISvcCtx *svchp, OCIStmt *stmtp, OCIError *errhp, 
        !          5695:                          ub4 iters, ub4 rowoff, CONST OCISnapshot *snap_in, 
        !          5696:                          OCISnapshot *snap_out, ub4 mode);
        !          5697: 
        !          5698: sword   OCIDefineByPos  (OCIStmt *stmtp, OCIDefine **defnp, OCIError *errhp,
        !          5699:                         ub4 position, dvoid *valuep, sb4 value_sz, ub2 dty,
        !          5700:                         dvoid *indp, ub2 *rlenp, ub2 *rcodep, ub4 mode);
        !          5701: 
        !          5702: sword   OCIDefineObject  (OCIDefine *defnp, OCIError *errhp, 
        !          5703:                           CONST OCIType *type, dvoid **pgvpp, 
        !          5704:                           ub4 *pvszsp, dvoid **indpp, ub4 *indszp);
        !          5705: 
        !          5706: sword   OCIDefineDynamic   (OCIDefine *defnp, OCIError *errhp, dvoid *octxp,
        !          5707:                             OCICallbackDefine ocbfp);
        !          5708: 
        !          5709: sword   OCIDefineArrayOfStruct  (OCIDefine *defnp, OCIError *errhp, ub4 pvskip,
        !          5710:                                  ub4 indskip, ub4 rlskip, ub4 rcskip);
        !          5711: 
        !          5712: sword   OCIStmtFetch   (OCIStmt *stmtp, OCIError *errhp, ub4 nrows, 
        !          5713:                         ub2 orientation, ub4 mode);
        !          5714: 
        !          5715: sword   OCIStmtGetBindInfo   (OCIStmt *stmtp, OCIError *errhp, ub4 size, 
        !          5716:                               ub4 startloc,
        !          5717:                               sb4 *found, OraText *bvnp[], ub1 bvnl[],
        !          5718:                               OraText *invp[], ub1 inpl[], ub1 dupl[],
        !          5719:                               OCIBind *hndl[]);
        !          5720: 
        !          5721: sword   OCIDescribeAny  (OCISvcCtx *svchp, OCIError *errhp, 
        !          5722:                          dvoid *objptr, 
        !          5723:                          ub4 objnm_len, ub1 objptr_typ, ub1 info_level,
        !          5724:                         ub1 objtyp, OCIDescribe *dschp);
        !          5725: 
        !          5726: sword   OCIParamGet (CONST dvoid *hndlp, ub4 htype, OCIError *errhp, 
        !          5727:                      dvoid **parmdpp, ub4 pos);
        !          5728: 
        !          5729: sword   OCIParamSet(dvoid *hdlp, ub4 htyp, OCIError *errhp, CONST dvoid *dscp,
        !          5730:                     ub4 dtyp, ub4 pos);
        !          5731: 
        !          5732: sword   OCITransStart  (OCISvcCtx *svchp, OCIError *errhp, 
        !          5733:                         uword timeout, ub4 flags );
        !          5734: 
        !          5735: sword   OCITransDetach  (OCISvcCtx *svchp, OCIError *errhp, ub4 flags );
        !          5736: 
        !          5737: sword   OCITransCommit  (OCISvcCtx *svchp, OCIError *errhp, ub4 flags);
        !          5738: 
        !          5739: sword   OCITransRollback  (OCISvcCtx *svchp, OCIError *errhp, ub4 flags);
        !          5740: 
        !          5741: sword   OCITransPrepare (OCISvcCtx *svchp, OCIError *errhp, ub4 flags);
        !          5742: 
        !          5743: sword   OCITransMultiPrepare (OCISvcCtx *svchp, ub4 numBranches, 
        !          5744:                               OCITrans **txns, OCIError **errhp);
        !          5745: 
        !          5746: sword   OCITransForget (OCISvcCtx *svchp, OCIError *errhp, ub4 flags);
        !          5747: 
        !          5748: sword   OCIErrorGet   (dvoid *hndlp, ub4 recordno, OraText *sqlstate,
        !          5749:                        sb4 *errcodep, OraText *bufp, ub4 bufsiz, ub4 type);
        !          5750: 
        !          5751: sword   OCILobAppend  (OCISvcCtx *svchp, OCIError *errhp, 
        !          5752:                        OCILobLocator *dst_locp,
        !          5753:                        OCILobLocator *src_locp);
        !          5754: 
        !          5755: sword   OCILobAssign (OCIEnv *envhp, OCIError *errhp, 
        !          5756:                       CONST OCILobLocator *src_locp, 
        !          5757:                       OCILobLocator **dst_locpp);
        !          5758: 
        !          5759: sword   OCILobCharSetForm (OCIEnv *envhp, OCIError *errhp, 
        !          5760:                            CONST OCILobLocator *locp, ub1 *csfrm);
        !          5761: 
        !          5762: sword   OCILobCharSetId (OCIEnv *envhp, OCIError *errhp, 
        !          5763:                          CONST OCILobLocator *locp, ub2 *csid);
        !          5764: 
        !          5765: sword   OCILobCopy (OCISvcCtx *svchp, OCIError *errhp, OCILobLocator *dst_locp,
        !          5766:                     OCILobLocator *src_locp, ub4 amount, ub4 dst_offset, 
        !          5767:                     ub4 src_offset);
        !          5768: 
        !          5769: sword OCILobCreateTemporary(OCISvcCtx          *svchp,
        !          5770:                             OCIError           *errhp,
        !          5771:                             OCILobLocator      *locp,
        !          5772:                             ub2                 csid,
        !          5773:                             ub1                 csfrm,
        !          5774:                             ub1                 lobtype,
        !          5775:                             boolean             cache,
        !          5776:                             OCIDuration         duration);
        !          5777: 
        !          5778: 
        !          5779: sword OCILobClose( OCISvcCtx        *svchp,
        !          5780:                    OCIError         *errhp,
        !          5781:                    OCILobLocator    *locp );
        !          5782: 
        !          5783: 
        !          5784: sword   OCILobDisableBuffering (OCISvcCtx      *svchp,
        !          5785:                                 OCIError       *errhp,
        !          5786:                                 OCILobLocator  *locp);
        !          5787: 
        !          5788: sword   OCILobEnableBuffering (OCISvcCtx      *svchp,
        !          5789:                                OCIError       *errhp,
        !          5790:                                OCILobLocator  *locp);
        !          5791: 
        !          5792: sword   OCILobErase (OCISvcCtx *svchp, OCIError *errhp, OCILobLocator *locp,
        !          5793:                       ub4 *amount, ub4 offset);
        !          5794: 
        !          5795: sword   OCILobFileClose (OCISvcCtx *svchp, OCIError *errhp, 
        !          5796:                          OCILobLocator *filep);
        !          5797: 
        !          5798: sword   OCILobFileCloseAll (OCISvcCtx *svchp, OCIError *errhp);
        !          5799: 
        !          5800: sword   OCILobFileExists (OCISvcCtx *svchp, OCIError *errhp, 
        !          5801:                          OCILobLocator *filep,
        !          5802:                          boolean *flag);
        !          5803: 
        !          5804: sword   OCILobFileGetName (OCIEnv *envhp, OCIError *errhp, 
        !          5805:                            CONST OCILobLocator *filep, 
        !          5806:                            OraText *dir_alias, ub2 *d_length, 
        !          5807:                            OraText *filename, ub2 *f_length);
        !          5808: 
        !          5809: sword   OCILobFileIsOpen (OCISvcCtx *svchp, OCIError *errhp, 
        !          5810:                           OCILobLocator *filep,
        !          5811:                           boolean *flag);
        !          5812: 
        !          5813: sword   OCILobFileOpen (OCISvcCtx *svchp, OCIError *errhp, 
        !          5814:                         OCILobLocator *filep,
        !          5815:                         ub1 mode);
        !          5816: 
        !          5817: sword   OCILobFileSetName (OCIEnv *envhp, OCIError *errhp, 
        !          5818:                            OCILobLocator **filepp, 
        !          5819:                            CONST OraText *dir_alias, ub2 d_length, 
        !          5820:                            CONST OraText *filename, ub2 f_length);
        !          5821: 
        !          5822: sword   OCILobFlushBuffer (OCISvcCtx       *svchp,
        !          5823:                            OCIError        *errhp,
        !          5824:                            OCILobLocator   *locp,
        !          5825:                            ub4              flag);
        !          5826: 
        !          5827: sword OCILobFreeTemporary(OCISvcCtx          *svchp,
        !          5828:                           OCIError           *errhp,
        !          5829:                           OCILobLocator      *locp);
        !          5830: 
        !          5831: sword OCILobGetChunkSize(OCISvcCtx         *svchp,
        !          5832:                          OCIError          *errhp,
        !          5833:                          OCILobLocator     *locp,
        !          5834:                          ub4               *chunksizep);
        !          5835: 
        !          5836: sword   OCILobGetLength  (OCISvcCtx *svchp, OCIError *errhp, 
        !          5837:                           OCILobLocator *locp,
        !          5838:                           ub4 *lenp);
        !          5839: 
        !          5840: sword   OCILobIsEqual  (OCIEnv *envhp, CONST OCILobLocator *x, 
        !          5841:                         CONST OCILobLocator *y, 
        !          5842:                         boolean *is_equal);
        !          5843: 
        !          5844: sword OCILobIsOpen( OCISvcCtx     *svchp,
        !          5845:                     OCIError      *errhp,
        !          5846:                     OCILobLocator *locp,
        !          5847:                     boolean       *flag);
        !          5848: 
        !          5849: sword OCILobIsTemporary(OCIEnv            *envp,
        !          5850:                         OCIError          *errhp,
        !          5851:                         OCILobLocator     *locp,
        !          5852:                         boolean           *is_temporary);
        !          5853: 
        !          5854: sword   OCILobLoadFromFile (OCISvcCtx *svchp, OCIError *errhp, 
        !          5855:                             OCILobLocator *dst_locp,
        !          5856:                                    OCILobLocator *src_filep, 
        !          5857:                             ub4 amount, ub4 dst_offset, 
        !          5858:                             ub4 src_offset);
        !          5859: 
        !          5860: sword   OCILobLocatorAssign  (OCISvcCtx *svchp, OCIError *errhp, 
        !          5861:                             CONST OCILobLocator *src_locp, 
        !          5862:                             OCILobLocator **dst_locpp);
        !          5863: 
        !          5864: 
        !          5865: sword   OCILobLocatorIsInit (OCIEnv *envhp, OCIError *errhp, 
        !          5866:                              CONST OCILobLocator *locp, 
        !          5867:                              boolean *is_initialized);
        !          5868: 
        !          5869: sword   OCILobOpen( OCISvcCtx        *svchp,
        !          5870:                    OCIError         *errhp,
        !          5871:                    OCILobLocator    *locp,
        !          5872:                    ub1               mode );
        !          5873:  
        !          5874: sword   OCILobRead  (OCISvcCtx *svchp, OCIError *errhp, OCILobLocator *locp,
        !          5875:                      ub4 *amtp, ub4 offset, dvoid *bufp, ub4 bufl, 
        !          5876:                      dvoid *ctxp, sb4 (*cbfp)(dvoid *ctxp, 
        !          5877:                                               CONST dvoid *bufp, 
        !          5878:                                               ub4 len, 
        !          5879:                                               ub1 piece),
        !          5880:                      ub2 csid, ub1 csfrm);
        !          5881: 
        !          5882: sword   OCILobTrim  (OCISvcCtx *svchp, OCIError *errhp, OCILobLocator *locp,
        !          5883:                      ub4 newlen);
        !          5884: 
        !          5885: sword   OCILobWrite  (OCISvcCtx *svchp, OCIError *errhp, OCILobLocator *locp,
        !          5886:                       ub4 *amtp, ub4 offset, dvoid *bufp, ub4 buflen, 
        !          5887:                       ub1 piece, dvoid *ctxp, 
        !          5888:                       sb4 (*cbfp)(dvoid *ctxp, 
        !          5889:                                   dvoid *bufp, 
        !          5890:                                   ub4 *len, 
        !          5891:                                   ub1 *piece),
        !          5892:                       ub2 csid, ub1 csfrm);
        !          5893: 
        !          5894: sword OCILobWriteAppend(OCISvcCtx *svchp, OCIError *errhp, 
        !          5895:                         OCILobLocator *lobp, ub4 *amtp, 
        !          5896:                         dvoid *bufp, ub4 bufl, ub1 piece, dvoid *ctxp,
        !          5897:                        sb4 (*cbfp)(dvoid *ctxp, dvoid *bufp, ub4 *len, 
        !          5898:                        ub1 *piece), 
        !          5899:                       ub2 csid, ub1 csfrm);
        !          5900: 
        !          5901: sword   OCIBreak (dvoid *hndlp, OCIError *errhp);
        !          5902: 
        !          5903: sword   OCIReset (dvoid *hndlp, OCIError *errhp);
        !          5904: 
        !          5905: sword   OCIServerVersion  (dvoid *hndlp, OCIError *errhp, OraText *bufp, 
        !          5906:                            ub4 bufsz,
        !          5907:                            ub1 hndltype);
        !          5908: 
        !          5909: 
        !          5910: sword   OCIAttrGet (CONST dvoid *trgthndlp, ub4 trghndltyp, 
        !          5911:                     dvoid *attributep, ub4 *sizep, ub4 attrtype, 
        !          5912:                     OCIError *errhp);
        !          5913: 
        !          5914: sword   OCIAttrSet (dvoid *trgthndlp, ub4 trghndltyp, dvoid *attributep,
        !          5915:                     ub4 size, ub4 attrtype, OCIError *errhp);
        !          5916: 
        !          5917: sword   OCISvcCtxToLda (OCISvcCtx *svchp, OCIError *errhp, Lda_Def *ldap);
        !          5918: 
        !          5919: sword   OCILdaToSvcCtx (OCISvcCtx **svchpp, OCIError *errhp, Lda_Def *ldap);
        !          5920: 
        !          5921: sword   OCIResultSetToStmt (OCIResult *rsetdp, OCIError *errhp);
        !          5922: 
        !          5923: sword OCIFileClose ( dvoid  *hndl, OCIError *err, OCIFileObject *filep );
        !          5924: 
        !          5925: sword  OCIUserCallbackRegister(dvoid *hndlp, ub4 type, dvoid *ehndlp,
        !          5926:                                     OCIUserCallback callback, dvoid *ctxp,
        !          5927:                                     ub4 fcode, ub4 when, OCIUcb *ucbDesc);
        !          5928: 
        !          5929: sword  OCIUserCallbackGet(dvoid *hndlp, ub4 type, dvoid *ehndlp,
        !          5930:                                ub4 fcode, ub4 when, OCIUserCallback *callbackp,
        !          5931:                                dvoid **ctxpp, OCIUcb *ucbDesc);
        !          5932: 
        !          5933: sword   OCISharedLibInit(dvoid *metaCtx, dvoid *libCtx, ub4 argfmt, sword argc,
        !          5934:                          dvoid *argv[], OCIEnvCallbackType envCallback);
        !          5935: 
        !          5936: sword OCIFileExists ( dvoid  *hndl, OCIError *err, OraText *filename,
        !          5937:                      OraText *path, ub1 *flag  );
        !          5938: 
        !          5939: sword OCIFileFlush( dvoid *hndl, OCIError *err, OCIFileObject *filep  );
        !          5940: 
        !          5941: 
        !          5942: sword OCIFileGetLength( dvoid *hndl, OCIError *err, OraText *filename,
        !          5943:                         OraText *path, ubig_ora *lenp  );
        !          5944: 
        !          5945: sword OCIFileInit ( dvoid *hndl, OCIError *err );
        !          5946: 
        !          5947: sword OCIFileOpen ( dvoid *hndl, OCIError *err, OCIFileObject **filep,
        !          5948:                     OraText *filename, OraText *path, ub4 mode, ub4 create, 
        !          5949:                     ub4 type );
        !          5950: 
        !          5951: sword OCIFileRead ( dvoid *hndl, OCIError *err, OCIFileObject *filep,
        !          5952:                     dvoid *bufp, ub4 bufl, ub4 *bytesread );
        !          5953: 
        !          5954: sword OCIFileSeek ( dvoid *hndl, OCIError *err, OCIFileObject *filep,
        !          5955:                      uword origin, ubig_ora offset, sb1 dir );
        !          5956: 
        !          5957: sword OCIFileTerm ( dvoid *hndl, OCIError *err );
        !          5958: 
        !          5959: 
        !          5960: sword OCIFileWrite ( dvoid *hndl, OCIError *err, OCIFileObject   *filep,
        !          5961:                      dvoid *bufp, ub4 buflen, ub4 *byteswritten );
        !          5962: 
        !          5963: 
        !          5964: /*
        !          5965:  ** Initialize the security package
        !          5966:  */
        !          5967: sword   OCISecurityInitialize (OCISecurity *sechandle, OCIError *error_handle);
        !          5968: 
        !          5969: sword   OCISecurityTerminate (OCISecurity *sechandle, OCIError *error_handle);
        !          5970: 
        !          5971: sword OCISecurityOpenWallet(OCISecurity *osshandle,
        !          5972:                             OCIError *error_handle,
        !          5973:                             size_t wrllen,
        !          5974:                             OraText *wallet_resource_locator,
        !          5975:                             size_t pwdlen,
        !          5976:                             OraText *password,
        !          5977:                             nzttWallet *wallet);
        !          5978: 
        !          5979: sword OCISecurityCloseWallet(OCISecurity *osshandle,
        !          5980:                              OCIError *error_handle,
        !          5981:                              nzttWallet *wallet);
        !          5982: 
        !          5983: sword OCISecurityCreateWallet(OCISecurity *osshandle,
        !          5984:                               OCIError *error_handle,
        !          5985:                               size_t wrllen,
        !          5986:                               OraText *wallet_resource_locator,
        !          5987:                               size_t pwdlen,
        !          5988:                               OraText *password,
        !          5989:                               nzttWallet *wallet);
        !          5990: 
        !          5991: sword OCISecurityDestroyWallet(OCISecurity *osshandle,
        !          5992:                                OCIError *error_handle,
        !          5993:                                size_t wrllen,
        !          5994:                                OraText *wallet_resource_locator,
        !          5995:                                size_t pwdlen,
        !          5996:                                OraText *password);
        !          5997: 
        !          5998: sword OCISecurityStorePersona(OCISecurity *osshandle,
        !          5999:                               OCIError *error_handle,
        !          6000:                               nzttPersona **persona,
        !          6001:                               nzttWallet *wallet);
        !          6002: 
        !          6003: sword OCISecurityOpenPersona(OCISecurity *osshandle,
        !          6004:                              OCIError *error_handle,
        !          6005:                              nzttPersona *persona);
        !          6006: 
        !          6007: sword OCISecurityClosePersona(OCISecurity *osshandle,
        !          6008:                               OCIError *error_handle,
        !          6009:                               nzttPersona *persona);
        !          6010: 
        !          6011: sword OCISecurityRemovePersona(OCISecurity *osshandle,
        !          6012:                                OCIError *error_handle,
        !          6013:                                nzttPersona **persona);
        !          6014: 
        !          6015: sword OCISecurityCreatePersona(OCISecurity *osshandle,
        !          6016:                                OCIError *error_handle,
        !          6017:                                nzttIdentType identity_type,
        !          6018:                                nzttCipherType cipher_type,
        !          6019:                                nzttPersonaDesc *desc,
        !          6020:                                nzttPersona **persona);
        !          6021: 
        !          6022: sword OCISecuritySetProtection(OCISecurity *osshandle,
        !          6023:                                OCIError *error_handle,
        !          6024:                                nzttPersona *persona,
        !          6025:                                nzttcef crypto_engine_function,
        !          6026:                                nztttdufmt data_unit_format,
        !          6027:                                nzttProtInfo *protection_info);
        !          6028: 
        !          6029: sword OCISecurityGetProtection(OCISecurity *osshandle,
        !          6030:                                OCIError *error_handle,
        !          6031:                                nzttPersona *persona,
        !          6032:                                nzttcef crypto_engine_function,
        !          6033:                                nztttdufmt * data_unit_format_ptr,
        !          6034:                                nzttProtInfo *protection_info);
        !          6035: 
        !          6036: sword OCISecurityRemoveIdentity(OCISecurity *osshandle,
        !          6037:                                 OCIError *error_handle,
        !          6038:                                 nzttIdentity **identity_ptr);
        !          6039: 
        !          6040: sword OCISecurityCreateIdentity(OCISecurity *osshandle,
        !          6041:                                 OCIError *error_handle,
        !          6042:                                 nzttIdentType type,
        !          6043:                                 nzttIdentityDesc *desc,
        !          6044:                                 nzttIdentity **identity_ptr);
        !          6045: 
        !          6046: sword OCISecurityAbortIdentity(OCISecurity *osshandle,
        !          6047:                                OCIError *error_handle,
        !          6048:                                nzttIdentity **identity_ptr);
        !          6049: 
        !          6050: sword OCISecurityFreeIdentity(OCISecurity *osshandle,
        !          6051:                              OCIError *error_handle,
        !          6052:                              nzttIdentity **identity_ptr);
        !          6053: 
        !          6054: 
        !          6055: sword OCISecurityStoreTrustedIdentity(OCISecurity *osshandle,
        !          6056:                                       OCIError *error_handle,
        !          6057:                                       nzttIdentity **identity_ptr,
        !          6058:                                       nzttPersona *persona);
        !          6059: 
        !          6060: sword OCISecuritySign(OCISecurity *osshandle,
        !          6061:                       OCIError *error_handle,
        !          6062:                       nzttPersona *persona,
        !          6063:                       nzttces signature_state,
        !          6064:                       size_t input_length,
        !          6065:                       ub1 *input,
        !          6066:                       nzttBufferBlock *buffer_block);
        !          6067: 
        !          6068: sword OCISecuritySignExpansion(OCISecurity *osshandle,
        !          6069:                                OCIError *error_handle,
        !          6070:                                nzttPersona *persona,
        !          6071:                                size_t inputlen,
        !          6072:                                size_t *signature_length);
        !          6073: 
        !          6074: sword OCISecurityVerify(OCISecurity *osshandle,
        !          6075:                         OCIError *error_handle,
        !          6076:                         nzttPersona *persona,
        !          6077:                         nzttces signature_state,
        !          6078:                         size_t siglen,
        !          6079:                         ub1 *signature,
        !          6080:                         nzttBufferBlock *extracted_message,
        !          6081:                         boolean *verified,
        !          6082:                         boolean *validated,
        !          6083:                         nzttIdentity **signing_party_identity);
        !          6084: 
        !          6085: sword OCISecurityValidate(OCISecurity *osshandle,
        !          6086:                           OCIError *error_handle,
        !          6087:                           nzttPersona *persona,
        !          6088:                           nzttIdentity *identity,
        !          6089:                           boolean *validated);
        !          6090: 
        !          6091: sword OCISecuritySignDetached(OCISecurity *osshandle,
        !          6092:                               OCIError *error_handle,
        !          6093:                               nzttPersona *persona,
        !          6094:                               nzttces signature_state,
        !          6095:                               size_t input_length,
        !          6096:                               ub1 * input,
        !          6097:                               nzttBufferBlock *signature);
        !          6098: 
        !          6099: sword OCISecuritySignDetExpansion(OCISecurity *osshandle,
        !          6100:                                   OCIError *error_handle,
        !          6101:                                   nzttPersona *persona,
        !          6102:                                   size_t input_length,
        !          6103:                                   size_t *required_buffer_length);
        !          6104: 
        !          6105: sword OCISecurityVerifyDetached(OCISecurity *osshandle,
        !          6106:                                 OCIError *error_handle,
        !          6107:                                 nzttPersona *persona,
        !          6108:                                 nzttces signature_state,
        !          6109:                                 size_t data_length,
        !          6110:                                 ub1 *data,
        !          6111:                                 size_t siglen,
        !          6112:                                 ub1 *signature,
        !          6113:                                 boolean *verified,
        !          6114:                                 boolean *validated,
        !          6115:                                 nzttIdentity **signing_party_identity);
        !          6116: 
        !          6117: sword OCISecurity_PKEncrypt(OCISecurity *osshandle,
        !          6118:                             OCIError *error_handle,
        !          6119:                             nzttPersona *persona,
        !          6120:                             size_t number_of_recipients,
        !          6121:                             nzttIdentity *recipient_list,
        !          6122:                             nzttces encryption_state,
        !          6123:                             size_t input_length,
        !          6124:                             ub1 *input,
        !          6125:                             nzttBufferBlock *encrypted_data);
        !          6126: 
        !          6127: sword OCISecurityPKEncryptExpansion(OCISecurity *osshandle,
        !          6128:                                     OCIError *error_handle,
        !          6129:                                     nzttPersona *persona,
        !          6130:                                     size_t number_recipients,
        !          6131:                                     size_t input_length,
        !          6132:                                     size_t *buffer_length_required);
        !          6133: 
        !          6134: sword OCISecurityPKDecrypt(OCISecurity *osshandle,
        !          6135:                            OCIError *error_handle,
        !          6136:                            nzttPersona *persona,
        !          6137:                            nzttces encryption_state,
        !          6138:                            size_t input_length,
        !          6139:                            ub1 *input,
        !          6140:                            nzttBufferBlock *encrypted_data);
        !          6141: 
        !          6142: sword OCISecurityEncrypt(OCISecurity *osshandle,
        !          6143:                          OCIError *error_handle,
        !          6144:                          nzttPersona *persona,
        !          6145:                          nzttces encryption_state,
        !          6146:                          size_t input_length,
        !          6147:                          ub1 *input,
        !          6148:                          nzttBufferBlock *encrypted_data);
        !          6149: 
        !          6150: sword OCISecurityEncryptExpansion(OCISecurity *osshandle,
        !          6151:                                   OCIError *error_handle,
        !          6152:                                   nzttPersona *persona,
        !          6153:                                   size_t input_length,
        !          6154:                                   size_t *encrypted_data_length);
        !          6155: 
        !          6156: sword OCISecurityDecrypt(OCISecurity *osshandle,
        !          6157:                          OCIError *error_handle,
        !          6158:                          nzttPersona *persona,
        !          6159:                          nzttces decryption_state,
        !          6160:                          size_t input_length,
        !          6161:                          ub1 *input,
        !          6162:                          nzttBufferBlock *decrypted_data);
        !          6163: 
        !          6164: sword OCISecurityEnvelope(OCISecurity *osshandle,
        !          6165:                           OCIError *error_handle,
        !          6166:                           nzttPersona *persona,
        !          6167:                           size_t number_of_recipients,
        !          6168:                           nzttIdentity *identity,
        !          6169:                           nzttces encryption_state,
        !          6170:                           size_t input_length,
        !          6171:                           ub1 *input,
        !          6172:                           nzttBufferBlock *enveloped_data);
        !          6173: 
        !          6174: sword OCISecurityDeEnvelope(OCISecurity *osshandle,
        !          6175:                             OCIError *error_handle,
        !          6176:                             nzttPersona *persona,
        !          6177:                             nzttces decryption_state,
        !          6178:                             size_t input_length,
        !          6179:                             ub1 *input,
        !          6180:                             nzttBufferBlock *output_message,
        !          6181:                             boolean *verified,
        !          6182:                             boolean *validated,
        !          6183:                             nzttIdentity **sender_identity);
        !          6184: 
        !          6185: sword OCISecurityKeyedHash(OCISecurity *osshandle,
        !          6186:                            OCIError *error_handle,
        !          6187:                            nzttPersona *persona,
        !          6188:                            nzttces hash_state,
        !          6189:                            size_t input_length,
        !          6190:                            ub1 *input,
        !          6191:                            nzttBufferBlock *keyed_hash);
        !          6192: 
        !          6193: sword OCISecurityKeyedHashExpansion(OCISecurity *osshandle,
        !          6194:                                     OCIError *error_handle,
        !          6195:                                     nzttPersona *persona,
        !          6196:                                     size_t input_length,
        !          6197:                                     size_t *required_buffer_length);
        !          6198: 
        !          6199: sword OCISecurityHash(OCISecurity *osshandle,
        !          6200:                       OCIError *error_handle,
        !          6201:                       nzttPersona *persona,
        !          6202:                       nzttces hash_state,
        !          6203:                       size_t input,
        !          6204:                       ub1 *input_length,
        !          6205:                       nzttBufferBlock *hash);
        !          6206: 
        !          6207: sword OCISecurityHashExpansion(OCISecurity *osshandle,
        !          6208:                                OCIError *error_handle,
        !          6209:                                nzttPersona *persona,
        !          6210:                                size_t input_length,
        !          6211:                                size_t *required_buffer_length);
        !          6212: 
        !          6213: sword OCISecuritySeedRandom(OCISecurity *osshandle,
        !          6214:                             OCIError *error_handle,
        !          6215:                             nzttPersona *persona,
        !          6216:                             size_t seed_length,
        !          6217:                             ub1 *seed);
        !          6218: 
        !          6219: sword OCISecurityRandomBytes(OCISecurity *osshandle,
        !          6220:                              OCIError *error_handle,
        !          6221:                              nzttPersona *persona,
        !          6222:                              size_t number_of_bytes_desired,
        !          6223:                              nzttBufferBlock *random_bytes);
        !          6224: 
        !          6225: sword OCISecurityRandomNumber(OCISecurity *osshandle,
        !          6226:                               OCIError *error_handle,
        !          6227:                               nzttPersona *persona,
        !          6228:                               uword *random_number_ptr);
        !          6229: 
        !          6230: sword OCISecurityInitBlock(OCISecurity *osshandle,
        !          6231:                            OCIError *error_handle,
        !          6232:                            nzttBufferBlock *buffer_block);
        !          6233: 
        !          6234: sword OCISecurityReuseBlock(OCISecurity *osshandle,
        !          6235:                             OCIError *error_handle,
        !          6236:                             nzttBufferBlock *buffer_block);
        !          6237: 
        !          6238: sword OCISecurityPurgeBlock(OCISecurity *osshandle,
        !          6239:                             OCIError *error_handle,
        !          6240:                             nzttBufferBlock *buffer_block);
        !          6241: 
        !          6242: sword OCISecuritySetBlock(OCISecurity *osshandle,
        !          6243:                           OCIError *error_handle,
        !          6244:                           uword flags_to_set,
        !          6245:                           size_t buffer_length,
        !          6246:                           size_t used_buffer_length,
        !          6247:                           ub1 *buffer,
        !          6248:                           nzttBufferBlock *buffer_block);
        !          6249: 
        !          6250: sword OCISecurityGetIdentity(OCISecurity   *osshandle,
        !          6251:                              OCIError      *error_handle,
        !          6252:                              size_t         namelen,
        !          6253:                              OraText          *distinguished_name,
        !          6254:                              nzttIdentity **identity);
        !          6255: 
        !          6256: sword OCIAQEnq(OCISvcCtx *svchp, OCIError *errhp, OraText *queue_name,
        !          6257:                 OCIAQEnqOptions *enqopt, OCIAQMsgProperties *msgprop,
        !          6258:                 OCIType *payload_tdo, dvoid **payload, dvoid **payload_ind, 
        !          6259:                 OCIRaw **msgid, ub4 flags); 
        !          6260: 
        !          6261: sword OCIAQDeq(OCISvcCtx *svchp, OCIError *errhp, OraText *queue_name,
        !          6262:                 OCIAQDeqOptions *deqopt, OCIAQMsgProperties *msgprop,
        !          6263:                 OCIType *payload_tdo, dvoid **payload, dvoid **payload_ind, 
        !          6264:                 OCIRaw **msgid, ub4 flags); 
        !          6265: 
        !          6266: sword OCIAQListen(/*_ OCISvcCtx *svchp, OCIError *errhp, 
        !          6267:                      OCIAQAgent **agent_list, ub4 num_agents,
        !          6268:                      sb4 wait, OCIAQAgent **agent,
        !          6269:                      ub4 flags _*/);
        !          6270: 
        !          6271: sword OCIExtractInit(dvoid *hndl, OCIError *err);
        !          6272: 
        !          6273: sword OCIExtractTerm(dvoid *hndl, OCIError *err);
        !          6274: 
        !          6275: sword OCIExtractReset(dvoid *hndl, OCIError *err);
        !          6276: 
        !          6277: sword OCIExtractSetNumKeys(dvoid *hndl, OCIError *err, uword numkeys);
        !          6278: 
        !          6279: sword OCIExtractSetKey(dvoid *hndl, OCIError *err, CONST OraText *name, 
        !          6280:                        ub1 type, ub4 flag, CONST dvoid *defval, 
        !          6281:                        CONST sb4 *intrange, CONST OraText *CONST *strlist);
        !          6282: 
        !          6283: sword OCIExtractFromFile(dvoid *hndl, OCIError *err, ub4 flag, 
        !          6284:                          OraText *filename);
        !          6285: 
        !          6286: sword OCIExtractFromStr(dvoid *hndl, OCIError *err, ub4 flag, OraText *input);
        !          6287: 
        !          6288: sword OCIExtractToInt(dvoid *hndl, OCIError *err, OraText *keyname, 
        !          6289:                       uword valno, sb4 *retval);
        !          6290: 
        !          6291: sword OCIExtractToBool(dvoid *hndl, OCIError *err, OraText *keyname, 
        !          6292:                        uword valno, ub1 *retval);
        !          6293: 
        !          6294: sword OCIExtractToStr(dvoid *hndl, OCIError *err, OraText *keyname, uword valno, 
        !          6295:                       OraText *retval, uword buflen);
        !          6296: 
        !          6297: sword OCIExtractToOCINum(dvoid *hndl, OCIError *err, OraText *keyname, 
        !          6298:                          uword valno, OCINumber *retval);
        !          6299: 
        !          6300: sword OCIExtractToList(dvoid *hndl, OCIError *err, uword *numkeys);
        !          6301: 
        !          6302: sword OCIExtractFromList(dvoid *hndl, OCIError *err, uword index, 
        !          6303:                         OraText **name, 
        !          6304:                          ub1 *type, uword *numvals, dvoid ***values);
        !          6305: 
        !          6306: /* Memory Related Service Interfaces */
        !          6307: 
        !          6308: sword OCIMemoryAlloc(dvoid *hdl, OCIError *err, dvoid **mem,
        !          6309:        OCIDuration dur, ub4 size, ub4 flags);
        !          6310: 
        !          6311: sword OCIMemoryResize(dvoid *hdl, OCIError *err, dvoid **mem,
        !          6312:                        ub4 newsize, ub4 flags);
        !          6313:                        
        !          6314: sword OCIMemoryFree(dvoid *hdl, OCIError *err, dvoid *mem);
        !          6315: 
        !          6316: sword OCIContextSetValue(dvoid *hdl, OCIError *err, OCIDuration duration,
        !          6317:                        ub1 *key, ub1 keylen, dvoid *ctx_value);
        !          6318: 
        !          6319: sword OCIContextGetValue(dvoid *hdl, OCIError *err, ub1 *key,
        !          6320:                        ub1 keylen, dvoid **ctx_value);
        !          6321: 
        !          6322: sword OCIContextClearValue(dvoid *hdl, OCIError *err, ub1 *key, 
        !          6323:                        ub1 keylen);
        !          6324: 
        !          6325: sword OCIContextGenerateKey(dvoid *hdl, OCIError *err, ub4 *key);
        !          6326: 
        !          6327: sword OCIMemorySetCurrentIDs(dvoid *hdl, OCIError *err, 
        !          6328:        ub4 curr_session_id, ub4 curr_trans_id, ub4 curr_stmt_id);
        !          6329: 
        !          6330: sword OCIPicklerTdsCtxInit(OCIEnv *env, OCIError *err, 
        !          6331:                            OCIPicklerTdsCtx **tdsc);
        !          6332: 
        !          6333: sword OCIPicklerTdsCtxFree(OCIEnv *env, OCIError *err, OCIPicklerTdsCtx *tdsc);
        !          6334: 
        !          6335: sword OCIPicklerTdsInit(OCIEnv *env, OCIError *err, OCIPicklerTdsCtx *tdsc, 
        !          6336:                                        OCIPicklerTds **tdsh);
        !          6337: 
        !          6338: sword OCIPicklerTdsFree(OCIEnv *env, OCIError *err, OCIPicklerTds *tdsh);
        !          6339: 
        !          6340: sword OCIPicklerTdsCreateElementNumber(OCIEnv *env, OCIError *err, 
        !          6341:                                        OCIPicklerTds *tdsh, ub1 prec, 
        !          6342:                                        sb1 scale, OCIPicklerTdsElement *elt);
        !          6343: 
        !          6344: sword OCIPicklerTdsCreateElementChar(OCIEnv *env, OCIError *err, 
        !          6345:                                     OCIPicklerTds *tdsh, ub2 len, 
        !          6346:                                     OCIPicklerTdsElement *elt);
        !          6347: 
        !          6348: sword OCIPicklerTdsCreateElementVarchar(OCIEnv *env, OCIError *err, 
        !          6349:                                         OCIPicklerTds *tdsh, ub2 len, 
        !          6350:                                         OCIPicklerTdsElement *elt);
        !          6351: 
        !          6352: sword OCIPicklerTdsCreateElementRaw(OCIEnv *env, OCIError *err, 
        !          6353:                                     OCIPicklerTds *tdsh, ub2 len, 
        !          6354:                                     OCIPicklerTdsElement *elt);
        !          6355: 
        !          6356: sword OCIPicklerTdsCreateElement(OCIEnv *env, OCIError *err, 
        !          6357:                                  OCIPicklerTds *tdsh, OCITypeCode dty, 
        !          6358:                                  OCIPicklerTdsElement *elt);
        !          6359: 
        !          6360: sword OCIPicklerTdsAddAttr(OCIEnv *env, OCIError *err, 
        !          6361:                            OCIPicklerTds *tdsh, OCIPicklerTdsElement elt);
        !          6362: 
        !          6363: sword OCIPicklerTdsGenerate(OCIEnv *env, OCIError *err, 
        !          6364:                                OCIPicklerTds *tdsh);
        !          6365: 
        !          6366: sword OCIPicklerTdsGetAttr(OCIEnv *env, OCIError *err, 
        !          6367:                                CONST OCIPicklerTds *tdsh, ub1  attrno,
        !          6368:                                OCITypeCode *typ, ub2  *len);
        !          6369: 
        !          6370: sword OCIPicklerFdoInit(OCIEnv *env, OCIError *err, 
        !          6371:                                OCIPicklerFdo **fdoh);
        !          6372: 
        !          6373: sword OCIPicklerFdoFree(OCIEnv *env, OCIError *err, 
        !          6374:                                OCIPicklerFdo *fdoh);
        !          6375: 
        !          6376: sword OCIPicklerImageInit(OCIEnv *env, OCIError *err, 
        !          6377:                           OCIPicklerFdo *fdoh, 
        !          6378:                           OCIPicklerTds *tdsh,
        !          6379:                          OCIPicklerImage **imgh);
        !          6380: 
        !          6381: sword OCIPicklerImageFree(OCIEnv *env, OCIError *err, 
        !          6382:                                OCIPicklerImage *imgh);
        !          6383:  
        !          6384: sword OCIPicklerImageAddScalar(OCIEnv *env, OCIError *err,  
        !          6385:                                OCIPicklerImage *imgh, dvoid *scalar, ub4  len);
        !          6386:  
        !          6387: sword OCIPicklerImageAddNullScalar(OCIEnv *env, OCIError *err, 
        !          6388:                                OCIPicklerImage *imgh);
        !          6389:  
        !          6390: sword OCIPicklerImageGenerate(OCIEnv *env, OCIError *err, 
        !          6391:                                OCIPicklerImage *imgh);
        !          6392:  
        !          6393: sword OCIPicklerImageGetScalarSize(OCIEnv *env, OCIError *err, 
        !          6394:                                OCIPicklerImage *imgh, 
        !          6395:                                ub4  attrno, ub4  *size);
        !          6396:  
        !          6397: sword OCIPicklerImageGetScalar(OCIEnv *env, OCIError *err, 
        !          6398:                                OCIPicklerImage *imgh, ub4  attrno, 
        !          6399:                                dvoid *buf, ub4  *len, OCIInd *ind);
        !          6400: 
        !          6401: sword OCIPicklerImageCollBegin(OCIEnv *env, OCIError *err,
        !          6402:                 OCIPicklerImage *imgh, CONST OCIPicklerTds *colltdsh);
        !          6403:  
        !          6404: sword OCIPicklerImageCollAddScalar( OCIEnv *env, OCIError *err,
        !          6405:                 OCIPicklerImage *imgh, dvoid *scalar,
        !          6406:                 ub4 buflen, OCIInd ind);
        !          6407:  
        !          6408: sword OCIPicklerImageCollEnd(OCIEnv *env, OCIError *err,
        !          6409:                 OCIPicklerImage *imgh);
        !          6410:  
        !          6411: /* should take svcctx for locator stuff */
        !          6412: sword OCIPicklerImageCollBeginScan(OCIEnv *env, OCIError *err,
        !          6413:                 OCIPicklerImage *imgh, CONST OCIPicklerTds *coll_tdsh,
        !          6414:                 ub4 attrnum, ub4 startidx, OCIInd *ind);
        !          6415:  
        !          6416: sword OCIPicklerImageCollGetScalarSize(OCIEnv *env, OCIError *err,
        !          6417:                 CONST OCIPicklerTds *coll_tdsh, ub4 *size);
        !          6418:  
        !          6419: sword OCIPicklerImageCollGetScalar(OCIEnv *env, OCIError *err,
        !          6420:                                    OCIPicklerImage *imgh, dvoid *buf,
        !          6421:                                    ub4 *buflen, OCIInd *ind);
        !          6422: 
        !          6423: sword OCIFormatInit(dvoid *hndl, OCIError *err);
        !          6424: 
        !          6425: sword OCIFormatString(dvoid *hndl, OCIError *err, OraText *buffer,
        !          6426:                       sbig_ora bufferLength, sbig_ora *returnLength,
        !          6427:                       CONST OraText *formatString, ...);
        !          6428: 
        !          6429: sword OCIFormatTerm(dvoid *hndl, OCIError *err);
        !          6430: 
        !          6431: sword OCIFormatTUb1(void);
        !          6432: sword OCIFormatTUb2(void);
        !          6433: sword OCIFormatTUb4(void);
        !          6434: sword OCIFormatTUword(void);
        !          6435: sword OCIFormatTUbig_ora(void);
        !          6436: sword OCIFormatTSb1(void);
        !          6437: sword OCIFormatTSb2(void);
        !          6438: sword OCIFormatTSb4(void);
        !          6439: sword OCIFormatTSword(void);
        !          6440: sword OCIFormatTSbig_ora(void);
        !          6441: sword OCIFormatTEb1(void);
        !          6442: sword OCIFormatTEb2(void);
        !          6443: sword OCIFormatTEb4(void);
        !          6444: sword OCIFormatTEword(void);
        !          6445: sword OCIFormatTChar(void);
        !          6446: sword OCIFormatTText(void);
        !          6447: sword OCIFormatTDouble(void);
        !          6448: sword OCIFormatTDvoid(void);
        !          6449: sword OCIFormatTEnd(void);
        !          6450: 
        !          6451: /*-------------------------- Extensions to XA interface ---------------------*/
        !          6452: /* ------------------------- xaosvch ----------------------------------------*/
        !          6453: /*
        !          6454:    NAME
        !          6455:      xaosvch  -  XA Oracle get SerViCe Handle
        !          6456:    DESCRIPTION
        !          6457:      Given a database name return the service handle that is used by the
        !          6458:      XA library
        !          6459:    NOTE
        !          6460:      This macro has been provided for backward compatibilty with 8.0.2
        !          6461: */
        !          6462: OCISvcCtx *xaosvch(OraText *dbname);
        !          6463: 
        !          6464: /* ------------------------- xaoSvcCtx --------------------------------------*/
        !          6465: /*
        !          6466:    NAME
        !          6467:      xaoSvcCtx  -  XA Oracle get SerViCe ConTeXt
        !          6468:    DESCRIPTION
        !          6469:      Given a database name return the service handle that is used by the
        !          6470:      XA library
        !          6471:    NOTE
        !          6472:      This routine has been provided for APs to get access to the service
        !          6473:      handle that XA library uses. Without this routine APs must use SQLLIB
        !          6474:      routine sqlld2 to get access to the Logon data area registered by the
        !          6475:      XA library
        !          6476: */
        !          6477: OCISvcCtx *xaoSvcCtx(OraText *dbname);
        !          6478: 
        !          6479: /* ------------------------- xaoEnv -----------------------------------------*/
        !          6480: /*
        !          6481:    NAME
        !          6482:      xaoEnv  -  XA Oracle get ENvironment Handle
        !          6483:    DESCRIPTION
        !          6484:      Given a database name return the environment handle that is used by the
        !          6485:      XA library
        !          6486:    NOTE
        !          6487:      This routine has been provided for APs to get access to the environment
        !          6488:      handle that XA library uses. Without this routine APs must use SQLLIB
        !          6489:      routine sqlld2 to get access to the Logon data area registered by the
        !          6490:      XA library
        !          6491: */
        !          6492: OCIEnv *xaoEnv(OraText *dbname);
        !          6493: 
        !          6494: /* ------------------------- xaosterr ---------------------------------------*/
        !          6495: /*
        !          6496:    NAME
        !          6497:      xaosterr  -  XA Oracle get xa STart ERRor code
        !          6498:    DESCRIPTION
        !          6499:      Given an oracle error code return the XA error code
        !          6500:  */
        !          6501: int xaosterr(OCISvcCtx *svch, sb4 error);
        !          6502: /*-------------------------- End Extensions ---------------------------------*/
        !          6503: /*---------------------- Extensions to NLS cartridge service ----------------*/
        !          6504: /* ----------------------- OCINlsGetInfo ------------------------------------*/
        !          6505: /*
        !          6506:    NAME
        !          6507:      OCINlsGetInfo - Get NLS info from OCI environment handle
        !          6508:    REMARKS
        !          6509:      This function generates language information specified by item from OCI 
        !          6510:      environment handle envhp into an array pointed to by buf within size 
        !          6511:      limitation as buflen.
        !          6512:    RETURNS
        !          6513:      OCI_SUCCESS, OCI_INVALID_HANDLE, or OCI_ERROR on wrong item.
        !          6514:    envhp(IN/OUT)
        !          6515:      OCI environment handle.
        !          6516:    errhp(IN/OUT)
        !          6517:      The OCI error handle. If there is an error, it is record in errhp and 
        !          6518:      this function returns a NULL pointer. Diagnostic information can be 
        !          6519:      obtained by calling OCIErrorGet().
        !          6520:    buf(OUT)
        !          6521:      Pointer to the destination buffer.
        !          6522:    buflen(IN)
        !          6523:      The size of destination buffer. The maximum length for each information
        !          6524:      is 32 bytes.
        !          6525:    item(IN)
        !          6526:      It specifies to get which item in OCI environment handle and can be one
        !          6527:      of following values:
        !          6528:        OCI_NLS_DAYNAME1 : Native name for Monday.
        !          6529:        OCI_NLS_DAYNAME2 : Native name for Tuesday.
        !          6530:        OCI_NLS_DAYNAME3 : Native name for Wednesday.
        !          6531:        OCI_NLS_DAYNAME4 : Native name for Thursday.
        !          6532:        OCI_NLS_DAYNAME5 : Native name for Friday.
        !          6533:        OCI_NLS_DAYNAME6 : Native name for for Saturday.
        !          6534:        OCI_NLS_DAYNAME7 : Native name for for Sunday.
        !          6535:        OCI_NLS_ABDAYNAME1 : Native abbreviated name for Monday.
        !          6536:        OCI_NLS_ABDAYNAME2 : Native abbreviated name for Tuesday.
        !          6537:        OCI_NLS_ABDAYNAME3 : Native abbreviated name for Wednesday.
        !          6538:        OCI_NLS_ABDAYNAME4 : Native abbreviated name for Thursday.
        !          6539:        OCI_NLS_ABDAYNAME5 : Native abbreviated name for Friday.
        !          6540:        OCI_NLS_ABDAYNAME6 : Native abbreviated name for for Saturday.
        !          6541:        OCI_NLS_ABDAYNAME7 : Native abbreviated name for for Sunday.
        !          6542:        OCI_NLS_MONTHNAME1 : Native name for January.
        !          6543:        OCI_NLS_MONTHNAME2 : Native name for February.
        !          6544:        OCI_NLS_MONTHNAME3 : Native name for March.
        !          6545:        OCI_NLS_MONTHNAME4 : Native name for April.
        !          6546:        OCI_NLS_MONTHNAME5 : Native name for May.
        !          6547:        OCI_NLS_MONTHNAME6 : Native name for June.
        !          6548:        OCI_NLS_MONTHNAME7 : Native name for July.
        !          6549:        OCI_NLS_MONTHNAME8 : Native name for August.
        !          6550:        OCI_NLS_MONTHNAME9 : Native name for September.
        !          6551:        OCI_NLS_MONTHNAME10 : Native name for October.
        !          6552:        OCI_NLS_MONTHNAME11 : Native name for November.
        !          6553:        OCI_NLS_MONTHNAME12 : Native name for December.
        !          6554:        OCI_NLS_ABMONTHNAME1 : Native abbreviated name for January.
        !          6555:        OCI_NLS_ABMONTHNAME2 : Native abbreviated name for February.
        !          6556:        OCI_NLS_ABMONTHNAME3 : Native abbreviated name for March.
        !          6557:        OCI_NLS_ABMONTHNAME4 : Native abbreviated name for April.
        !          6558:        OCI_NLS_ABMONTHNAME5 : Native abbreviated name for May.
        !          6559:        OCI_NLS_ABMONTHNAME6 : Native abbreviated name for June.
        !          6560:        OCI_NLS_ABMONTHNAME7 : Native abbreviated name for July.
        !          6561:        OCI_NLS_ABMONTHNAME8 : Native abbreviated name for August.
        !          6562:        OCI_NLS_ABMONTHNAME9 : Native abbreviated name for September.
        !          6563:        OCI_NLS_ABMONTHNAME10 : Native abbreviated name for October.
        !          6564:        OCI_NLS_ABMONTHNAME11 : Native abbreviated name for November.
        !          6565:        OCI_NLS_ABMONTHNAME12 : Native abbreviated name for December.
        !          6566:        OCI_NLS_YES : Native string for affirmative response.
        !          6567:        OCI_NLS_NO : Native negative response. 
        !          6568:        OCI_NLS_AM : Native equivalent string of AM.
        !          6569:        OCI_NLS_PM : Native equivalent string of PM.
        !          6570:        OCI_NLS_AD : Native equivalent string of AD.
        !          6571:        OCI_NLS_BC : Native equivalent string of BC.
        !          6572:        OCI_NLS_DECIMAL : decimal character.
        !          6573:        OCI_NLS_GROUP : group separator.
        !          6574:        OCI_NLS_DEBIT : Native symbol of debit.
        !          6575:        OCI_NLS_CREDIT : Native sumbol of credit.
        !          6576:        OCI_NLS_DATEFORMAT : Oracle date format.
        !          6577:        OCI_NLS_INT_CURRENCY: International currency symbol.
        !          6578:        OCI_NLS_LOC_CURRENCY : Locale currency symbol.
        !          6579:        OCI_NLS_LANGUAGE : Language name.
        !          6580:        OCI_NLS_ABLANGUAGE : Abbreviation for language name.
        !          6581:        OCI_NLS_TERRITORY : Territory name.
        !          6582:        OCI_NLS_CHARACTER_SET : Character set name.
        !          6583:        OCI_NLS_LINGUISTIC : Linguistic name.
        !          6584:        OCI_NLS_CALENDAR : Calendar name.
        !          6585:        OCI_NLS_DUAL_CURRENCY : Dual currency symbol.
        !          6586: */
        !          6587: sword OCINlsGetInfo(dvoid *envhp, OCIError *errhp, OraText *buf,
        !          6588:                     size_t buflen, ub2 item);
        !          6589: 
        !          6590: 
        !          6591: /* -------------------- OCIMultiByteToWideChar ------------------------------*/
        !          6592: /*
        !          6593:    NAME
        !          6594:      OCIMultiByteToWideChar - Convert a null terminated multibyte string into 
        !          6595:                               wchar
        !          6596:    REMARKS
        !          6597:      This routine converts an entire null-terminated string into the wchar 
        !          6598:      format. The wchar output buffer will be null-terminated.
        !          6599:    RETURNS
        !          6600:      OCI_SUCCESS, OCI_INVALID_HANDLE or OCI_ERROR
        !          6601:    envhp(IN/OUT)
        !          6602:      OCI environment handle to determine the character set of string.
        !          6603:    dst (OUT)
        !          6604:      Destination buffer for wchar.
        !          6605:    src (IN)
        !          6606:      Source string to be converted.
        !          6607:    rsize (OUT)
        !          6608:      Number of characters converted including null-terminator.
        !          6609:      If it is a NULL pointer, no number return
        !          6610: */
        !          6611: sword OCIMultiByteToWideChar(dvoid *envhp, OCIWchar *dst, CONST OraText *src,
        !          6612:                              size_t *rsize);
        !          6613: 
        !          6614: 
        !          6615: /* --------------------- OCIMultiByteInSizeToWideChar -----------------------*/
        !          6616: /*
        !          6617:    NAME
        !          6618:      OCIMultiByteInSizeToWideChar - Convert a mulitbyte string in length into
        !          6619:                                     wchar
        !          6620:    REMARKS
        !          6621:      This routine converts part of string into the wchar format. It will
        !          6622:      convert as many complete characters as it can until it reaches output
        !          6623:      buffer size or input buffer size or it reaches a null-terminator in
        !          6624:      source string. The output buffer will be null-terminated if space permits.
        !          6625:      If dstsz is zero, this function will only return number of characters not
        !          6626:      including ending null terminator for converted string.
        !          6627:    RETURNS
        !          6628:      OCI_SUCCESS, OCI_INVALID_HANDLE or OCI_ERROR
        !          6629:    envhp(IN/OUT)
        !          6630:      OCI environment handle to determine the character set of string.
        !          6631:    dst (OUT)
        !          6632:      Pointer to a destination buffer for wchar. It can be NULL pointer when
        !          6633:      dstsz is zero.
        !          6634:    dstsz(IN)
        !          6635:      Destination buffer size in character. If it is zero, this function just
        !          6636:      returns number of characters will be need for the conversion.
        !          6637:    src (IN)
        !          6638:      Source string to be converted.
        !          6639:    srcsz(IN)
        !          6640:      Length of source string in byte.
        !          6641:    rsize(OUT)
        !          6642:      Number of characters written into destination buffer, or number of
        !          6643:      characters for converted string is dstsz is zero.
        !          6644:      If it is NULL pointer, nothing to return.
        !          6645: */
        !          6646: sword OCIMultiByteInSizeToWideChar(dvoid *envhp, OCIWchar *dst,
        !          6647:                                   size_t dstsz, CONST OraText *src, 
        !          6648:                                   size_t srcsz, size_t *rsize);
        !          6649: 
        !          6650: 
        !          6651: /* ---------------------- OCIWideCharToMultiByte ----------------------------*/
        !          6652: /*
        !          6653:    NAME
        !          6654:      OCIWideCharToMultiByte - Convert a null terminated wchar string into
        !          6655:                               multibyte
        !          6656:    REMARKS
        !          6657:      This routine converts an entire null-terminated wide character string into
        !          6658:      multi-byte string. The output buffer will be null-terminated.
        !          6659:    RETURNS
        !          6660:      OCI_SUCCESS, OCI_INVALID_HANDLE or OCI_ERROR
        !          6661:    envhp(IN/OUT)
        !          6662:      OCI environment handle to determine the character set of string.
        !          6663:    dst (OUT)
        !          6664:      Destination buffer for multi-byte string.
        !          6665:    src (IN)
        !          6666:      Source wchar string to be converted.
        !          6667:    rsize (OUT)
        !          6668:      Number of bytes written into the destination buffer.
        !          6669:      If it is NULL pointer, nothing to return.
        !          6670: */
        !          6671: sword OCIWideCharToMultiByte(dvoid *envhp, OraText *dst, CONST OCIWchar *src,
        !          6672:                              size_t *rsize);
        !          6673: 
        !          6674: 
        !          6675: /* ---------------------- OCIWideCharInSizeToMultiByte ----------------------*/
        !          6676: /*
        !          6677:    NAME
        !          6678:      OCIWideCharInSizeToMultiByte - Convert a wchar string in length into 
        !          6679:                                     mulitbyte
        !          6680:    REMARKS
        !          6681:      This routine converts part of wchar string into the multi-byte format.
        !          6682:      It will convert as many complete characters as it can until it reaches
        !          6683:      output buffer size or input buffer size or it reaches a null-terminator
        !          6684:      in source string. The output buffer will be null-terminated if space
        !          6685:      permits. If dstsz is zero, the function just returns the size of byte not 
        !          6686:      including ending null-terminator need to store the converted string.
        !          6687:    RETURNS
        !          6688:      OCI_SUCCESS, OCI_INVALID_HANDLE or OCI_ERROR
        !          6689:    envhp(IN/OUT)
        !          6690:      OCI environment handle to determine the character set of string.
        !          6691:    dst (OUT)
        !          6692:      Destination buffer for multi-byte. It can be NULL pointer if dstsz is zero.
        !          6693:    dstsz(IN)
        !          6694:      Destination buffer size in byte. If it is zero, it just returns the size
        !          6695:      of bytes need for converted string.
        !          6696:    src (IN)
        !          6697:      Source wchar string to be converted.
        !          6698:    srcsz(IN)
        !          6699:      Length of source string in character.
        !          6700:    rsize(OUT)
        !          6701:      Number of bytes written into destination buffer, or number of bytes need
        !          6702:      to store the converted string if dstsz is zero.
        !          6703:      If it is NULL pointer, nothing to return.
        !          6704: */
        !          6705: sword OCIWideCharInSizeToMultiByte(dvoid *envhp, OraText *dst,
        !          6706:                                     size_t dstsz, CONST OCIWchar *src,
        !          6707:                                     size_t srcsz, size_t *rsize);
        !          6708: 
        !          6709: 
        !          6710: 
        !          6711: /* ----------------------- OCIWideCharIsAlnum -------------------------------*/
        !          6712: /*
        !          6713:    NAME
        !          6714:      OCIWideCharIsAlnum - test whether wc is a letter or decimal digit
        !          6715:    REMARKS
        !          6716:      It tests whether wc is a letter or decimal digit.
        !          6717:    RETURNS
        !          6718:      TRUE or FLASE.
        !          6719:    envhp(IN/OUT)
        !          6720:      OCI environment handle to determine the character set .
        !          6721:    wc(IN)
        !          6722:      Wchar for testing.
        !          6723: */
        !          6724: boolean OCIWideCharIsAlnum(dvoid *envhp, OCIWchar wc);
        !          6725: 
        !          6726: 
        !          6727: /* ----------------------- OCIWideCharIsAlpha -------------------------------*/
        !          6728: /*
        !          6729:    NAME
        !          6730:      OCIWideCharIsAlpha - test whether wc is an alphabetic letter
        !          6731:    REMARKS
        !          6732:      It tests whether wc is an alphabetic letter
        !          6733:    RETURNS
        !          6734:      TRUE or FLASE.
        !          6735:    envhp(IN/OUT)
        !          6736:      OCI environment handle to determine the character set .
        !          6737:    wc(IN)
        !          6738:      Wchar for testing.
        !          6739: */
        !          6740: boolean OCIWideCharIsAlpha(dvoid *envhp, OCIWchar wc);
        !          6741: 
        !          6742: 
        !          6743: /* --------------------- OCIWideCharIsCntrl ---------------------------------*/
        !          6744: /*
        !          6745:    NAME
        !          6746:      OCIWideCharIsCntrl - test whether wc is a control character
        !          6747:    REMARKS
        !          6748:      It tests whether wc is a control character.
        !          6749:    RETURNS
        !          6750:      TRUE or FLASE.
        !          6751:    envhp(IN/OUT)
        !          6752:      OCI environment handle to determine the character set .
        !          6753:    wc(IN)
        !          6754:      Wchar for testing.
        !          6755: */
        !          6756: boolean OCIWideCharIsCntrl(dvoid *envhp, OCIWchar wc);
        !          6757: 
        !          6758: 
        !          6759: /* ----------------------- OCIWideCharIsDigit -------------------------------*/
        !          6760: /*
        !          6761:    NAME
        !          6762:      OCIWideCharIsDigit - test whether wc is a decimal digit character
        !          6763:    REMARKS
        !          6764:      It tests whether wc is a decimal digit character.
        !          6765:    RETURNS
        !          6766:      TRUE or FLASE.
        !          6767:    envhp(IN/OUT)
        !          6768:      OCI environment handle to determine the character set .
        !          6769:    wc(IN)
        !          6770:      Wchar for testing.
        !          6771: */
        !          6772: boolean OCIWideCharIsDigit(dvoid *envhp, OCIWchar wc);
        !          6773: 
        !          6774: 
        !          6775: /* ----------------------- OCIWideCharIsGraph -------------------------------*/
        !          6776: /*
        !          6777:    NAME
        !          6778:      OCIWideCharIsGraph - test whether wc is a graph character
        !          6779:    REMARKS
        !          6780:      It tests whether wc is a graph character. A graph character is character
        !          6781:      with a visible representation and normally includes alphabetic letter,
        !          6782:      decimal digit, and punctuation.
        !          6783:    RETURNS
        !          6784:      TRUE or FLASE.
        !          6785:    envhp(IN/OUT)
        !          6786:      OCI environment handle to determine the character set .
        !          6787:    wc(IN)
        !          6788:      Wchar for testing.
        !          6789: */
        !          6790: boolean OCIWideCharIsGraph(dvoid *envhp, OCIWchar wc);
        !          6791: 
        !          6792: 
        !          6793: /* ----------------------- OCIWideCharIsLower -------------------------------*/
        !          6794: /*
        !          6795:    NAME
        !          6796:      OCIWideCharIsLower - test whether wc is a lowercase letter
        !          6797:    REMARKS
        !          6798:      It tests whether wc is a lowercase letter.
        !          6799:    RETURNS
        !          6800:      TRUE or FLASE.
        !          6801:    envhp(IN/OUT)
        !          6802:      OCI environment handle to determine the character set .
        !          6803:    wc(IN)
        !          6804:      Wchar for testing.
        !          6805: */
        !          6806: boolean OCIWideCharIsLower(dvoid *envhp, OCIWchar wc);
        !          6807: 
        !          6808: 
        !          6809: /* ----------------------- OCIWideCharIsPrint -------------------------------*/
        !          6810: /*
        !          6811:    NAME
        !          6812:      OCIWideCharIsPrint - test whether wc is a printable character
        !          6813:    REMARKS
        !          6814:      It tests whether wc is a printable character.
        !          6815:    RETURNS
        !          6816:      TRUE or FLASE.
        !          6817:    envhp(IN/OUT)
        !          6818:      OCI environment handle to determine the character set .
        !          6819:    wc(IN)
        !          6820:      Wchar for testing.
        !          6821: */
        !          6822: boolean OCIWideCharIsPrint(dvoid *envhp, OCIWchar wc);
        !          6823: 
        !          6824: 
        !          6825: /* ----------------------- OCIWideCharIsPunct -------------------------------*/
        !          6826: /*
        !          6827:    NAME
        !          6828:      OCIWideCharIsPunct - test whether wc is a punctuation character
        !          6829:    REMARKS
        !          6830:      It tests whether wc is a punctuation character.
        !          6831:    RETURNS
        !          6832:      TRUE or FLASE.
        !          6833:    envhp(IN/OUT)
        !          6834:      OCI environment handle to determine the character set .
        !          6835:    wc(IN)
        !          6836:      Wchar for testing.
        !          6837: */
        !          6838: boolean OCIWideCharIsPunct(dvoid *envhp, OCIWchar wc);
        !          6839: 
        !          6840: 
        !          6841: /* ----------------------- OCIWideCharIsSpace -------------------------------*/
        !          6842: /*
        !          6843:    NAME
        !          6844:      OCIWideCharIsSpace - test whether wc is a space character
        !          6845:    REMARKS
        !          6846:      It tests whether wc is a space character. A space character only causes
        !          6847:      white space in displayed text(for example, space, tab, carriage return,
        !          6848:      newline, vertical tab or form feed).
        !          6849:    RETURNS
        !          6850:      TRUE or FLASE.
        !          6851:    envhp(IN/OUT)
        !          6852:      OCI environment handle to determine the character set .
        !          6853:    wc(IN)
        !          6854:      Wchar for testing.
        !          6855: */
        !          6856: boolean OCIWideCharIsSpace(dvoid *envhp, OCIWchar wc);
        !          6857: 
        !          6858: 
        !          6859: /* ----------------------- OCIWideCharIsUpper -------------------------------*/
        !          6860: /*
        !          6861:    NAME
        !          6862:      OCIWideCharIsUpper - test whether wc is a uppercase letter
        !          6863:    REMARKS
        !          6864:      It tests whether wc is a uppercase letter.
        !          6865:    RETURNS
        !          6866:      TRUE or FLASE.
        !          6867:    envhp(IN/OUT)
        !          6868:      OCI environment handle to determine the character set .
        !          6869:    wc(IN)
        !          6870:      Wchar for testing.
        !          6871: */
        !          6872: boolean OCIWideCharIsUpper(dvoid *envhp, OCIWchar wc);
        !          6873: 
        !          6874: 
        !          6875: /*----------------------- OCIWideCharIsXdigit -------------------------------*/
        !          6876: /*
        !          6877:    NAME
        !          6878:      OCIWideCharIsXdigit - test whether wc is a hexadecimal digit
        !          6879:    REMARKS
        !          6880:      It tests whether wc is a hexadecimal digit ( 0-9, A-F, a-f ).
        !          6881:    RETURNS
        !          6882:      TRUE or FLASE.
        !          6883:    envhp(IN/OUT)
        !          6884:      OCI environment handle to determine the character set .
        !          6885:    wc(IN)
        !          6886:      Wchar for testing.
        !          6887: */
        !          6888: boolean OCIWideCharIsXdigit(dvoid *envhp, OCIWchar wc);
        !          6889: 
        !          6890: 
        !          6891: /* --------------------- OCIWideCharIsSingleByte ----------------------------*/
        !          6892: /*
        !          6893:    NAME
        !          6894:      OCIWideCharIsSingleByte - test whether wc is a single-byte character
        !          6895:    REMARKS
        !          6896:      It tests whether wc is a single-byte character when converted into
        !          6897:      multi-byte.
        !          6898:    RETURNS
        !          6899:      TRUE or FLASE.
        !          6900:    envhp(IN/OUT)
        !          6901:      OCI environment handle to determine the character set .
        !          6902:    wc(IN)
        !          6903:      Wchar for testing.
        !          6904: */
        !          6905: boolean OCIWideCharIsSingleByte(dvoid *envhp, OCIWchar wc);
        !          6906: 
        !          6907: 
        !          6908: /* ----------------------- OCIWideCharToLower -------------------------------*/
        !          6909: /*
        !          6910:    NAME
        !          6911:      OCIWideCharToLower - Convert a wchar into the lowercase
        !          6912:    REMARKS
        !          6913:      If there is a lower-case character mapping for wc in the specified locale,
        !          6914:      it will return the lower-case in wchar, else return wc itself.
        !          6915:    RETURNS
        !          6916:      A wchar
        !          6917:    envhp(IN/OUT)
        !          6918:      OCI environment handle to determine the character set .
        !          6919:    wc(IN)
        !          6920:      Wchar for lowercase mapping.
        !          6921: */
        !          6922: OCIWchar OCIWideCharToLower(dvoid *envhp, OCIWchar wc);
        !          6923: 
        !          6924: 
        !          6925: /* ----------------------- OCIWideCharToUpper -------------------------------*/
        !          6926: /*
        !          6927:    NAME
        !          6928:      OCIWideCharToUpper - Convert a wchar into the uppercase
        !          6929:    REMARKS
        !          6930:      If there is a upper-case character mapping for wc in the specified locale,
        !          6931:      it will return the upper-case in wchar, else return wc itself.
        !          6932:    RETURNS
        !          6933:      A wchar
        !          6934:    envhp(IN/OUT)
        !          6935:      OCI environment handle to determine the character set .
        !          6936:    wc(IN)
        !          6937:      Wchar for uppercase mapping.
        !          6938: */
        !          6939: OCIWchar OCIWideCharToUpper(dvoid *envhp, OCIWchar wc);
        !          6940: 
        !          6941: 
        !          6942: /* ----------------------- OCIWideCharStrcmp --------------------------------*/
        !          6943: /*
        !          6944:    NAME
        !          6945:      OCIWideCharStrcmp - compare two null terminated wchar string
        !          6946:    REMARKS
        !          6947:      It compares two wchar string in binary ( based on wchar encoding value ),
        !          6948:      linguistic, or case-insensitive.
        !          6949:    RETURNS
        !          6950:      0, if wstr1 == wstr2.
        !          6951:      Positive, if wstr1 > wstr2.
        !          6952:      Negative, if wstr1 < wstr2.
        !          6953:    envhp(IN/OUT)
        !          6954:      OCI environment handle to determine the character set.
        !          6955:    wstr1(IN)
        !          6956:      Pointer to a null-terminated wchar string.
        !          6957:    wstr2(IN)
        !          6958:      Pointer to a null-terminated wchar string.
        !          6959:    flag(IN)
        !          6960:      It is used to decide the comparison method. It can be taken one of the
        !          6961:      following values:
        !          6962:        OCI_NLS_BINARY : for the binary comparison, this is default value.
        !          6963:        OCI_NLS_LINGUISTIC : for linguistic comparison specified in the locale.
        !          6964:      This flag can be ORed with OCI_NLS_CASE_INSENSITIVE for case-insensitive
        !          6965:      comparison.
        !          6966: */
        !          6967: int OCIWideCharStrcmp(dvoid *envhp, CONST OCIWchar *wstr1, 
        !          6968:                 CONST OCIWchar *wstr2, int flag);
        !          6969: 
        !          6970: 
        !          6971: /* ----------------------- OCIWideCharStrncmp -------------------------------*/
        !          6972: /*
        !          6973:    NAME
        !          6974:      OCIWideCharStrncmp - compare twe wchar string in length
        !          6975:    REMARKS
        !          6976:      This function is similar to OCIWideCharStrcmp(), except that at most len1
        !          6977:      characters from wstr1 and len2 characters from wstr1 are compared. The
        !          6978:      null-terminator will be taken into the comparison.
        !          6979:    RETURNS
        !          6980:      0, if wstr1 = wstr2
        !          6981:      Positive, if wstr1 > wstr2
        !          6982:      Negative, if wstr1 < wstr2
        !          6983:    envhp(IN/OUT)
        !          6984:      OCI environment handle to determine the character set .
        !          6985:    wstr1(IN)
        !          6986:      Pointer to the first wchar string
        !          6987:    len1(IN)
        !          6988:      The length for the first string for comparison
        !          6989:    wstr2(IN)
        !          6990:      Pointer to the second wchar string
        !          6991:    len2(IN)
        !          6992:      The length for the second string for comparison.
        !          6993:    flag(IN)
        !          6994:      It is used to decide the comparison method. It can be taken one of the
        !          6995:      following values:
        !          6996:        OCI_NLS_BINARY : for the binary comparison, this is default value.
        !          6997:        OCI_NLS_LINGUISTIC : for linguistic comparison specified in the locale.
        !          6998:      This flag can be ORed with OCI_NLS_CASE_INSENSITIVE for case-insensitive 
        !          6999:      comparison.
        !          7000: */
        !          7001: int OCIWideCharStrncmp(dvoid *envhp, CONST OCIWchar *wstr1, size_t len1,
        !          7002:                  CONST OCIWchar *wstr2, size_t len2, int flag);
        !          7003: 
        !          7004: 
        !          7005: /* ----------------------- OCIWideCharStrcat --------------------------------*/
        !          7006: /*
        !          7007:    NAME
        !          7008:      OCIWideCharStrcat - concatenate two wchar strings
        !          7009:    REMARKS
        !          7010:      This function appends a copy of the wchar string pointed to by wsrcstr,
        !          7011:      including the null-terminator to the end of wchar string pointed to by
        !          7012:      wdststr. It returns the number of character in the result string not
        !          7013:      including the ending null-terminator.
        !          7014:    RETURNS
        !          7015:      number of characters in the result string not including the ending
        !          7016:      null-terminator.
        !          7017:    envhp(IN/OUT)
        !          7018:      OCI environment handle to determine the character set .
        !          7019:    wdststr(IN/OUT)
        !          7020:      Pointer to the destination wchar string for appending.
        !          7021:    wsrcstr(IN)
        !          7022:      Pointer to the source wchar string to append.
        !          7023: */
        !          7024: size_t OCIWideCharStrcat(dvoid *envhp, OCIWchar *wdststr,
        !          7025:                          CONST OCIWchar *wsrcstr);
        !          7026: 
        !          7027: 
        !          7028: /* ----------------------- OCIWideCharStrchr --------------------------------*/
        !          7029: /*
        !          7030:    NAME
        !          7031:      OCIWideCharStrchr - Search the first occurrence of wchar in a wchar string
        !          7032:    REMARKS
        !          7033:      This function searchs for the first occurrence of wc in the wchar string
        !          7034:      pointed to by wstr. It returns a pointer to the whcar if successful, or
        !          7035:      a null pointer.
        !          7036:    RETURNS
        !          7037:      wchar pointer if successful, otherwise a null pointer.
        !          7038:    envhp(IN/OUT)
        !          7039:      OCI environment handle to determine the character set .
        !          7040:    wstr(IN)
        !          7041:      Pointer to the wchar string to search
        !          7042:    wc(IN)
        !          7043:      Wchar to search for.
        !          7044: */
        !          7045: OCIWchar *OCIWideCharStrchr(dvoid *envhp, CONST OCIWchar *wstr,
        !          7046:                             OCIWchar wc);
        !          7047: 
        !          7048: 
        !          7049: /* ----------------------- OCIWideCharStrcpy --------------------------------*/
        !          7050: /*
        !          7051:    NAME
        !          7052:      OCIWideCharStrcpy - copy a wchar string
        !          7053:    REMARKS
        !          7054:      This function copies the wchar string pointed to by wsrcstr, including the 
        !          7055:      null-terminator, into the array pointed to by wdststr. It returns the
        !          7056:      number of character copied not including the ending null-terminator.
        !          7057:    RETURNS
        !          7058:      number of characters copied not including the ending null-terminator.
        !          7059:    envhp(IN/OUT)
        !          7060:      OCI environment handle to determine the character set .
        !          7061:    wdststr(OUT)
        !          7062:      Pointer to the destination wchar buffer.
        !          7063:    wsrcstr(IN)
        !          7064:      Pointer to the source wchar string.
        !          7065: */
        !          7066: size_t OCIWideCharStrcpy(dvoid *envhp, OCIWchar *wdststr,
        !          7067:                          CONST OCIWchar *wsrcstr);
        !          7068: 
        !          7069: 
        !          7070: /* ----------------------- OCIWideCharStrlen --------------------------------*/
        !          7071: /*
        !          7072:    NAME
        !          7073:      OCIWideCharStrlen - Return number of character in a wchar string
        !          7074:    REMARKS
        !          7075:      This function computes the number of characters in the wchar string
        !          7076:      pointed to by wstr, not including the null-terminator, and returns
        !          7077:     this number. 
        !          7078:    RETURNS
        !          7079:      number of characters not including ending null-terminator.
        !          7080:    envhp(IN/OUT)
        !          7081:      OCI environment handle to determine the character set .
        !          7082:    wstr(IN)
        !          7083:      Pointer to the source wchar string.
        !          7084: */
        !          7085: size_t OCIWideCharStrlen(dvoid *envhp, CONST OCIWchar *wstr);
        !          7086: 
        !          7087: 
        !          7088: /* ----------------------- OCIWideCharStrncat -------------------------------*/
        !          7089: /*
        !          7090:    NAME
        !          7091:      OCIWideCharStrncat - Concatenate wchar string in length
        !          7092:    REMARKS
        !          7093:      This function is similar to OCIWideCharStrcat(), except that at most n
        !          7094:      characters from wsrcstr are appended to wdststr. Note that the
        !          7095:      null-terminator in wsrcstr will stop appending. wdststr will be
        !          7096:      null-terminated.. 
        !          7097:    RETURNS
        !          7098:      Number of characters in the result string not including the ending
        !          7099:      null-terminator.
        !          7100:    envhp(IN/OUT)
        !          7101:      OCI environment handle to determine the character set .
        !          7102:    wdststr(IN/OUT)
        !          7103:      Pointer to the destination wchar string for appending.
        !          7104:    wsrcstr(IN)
        !          7105:      Pointer to the source wchar string to append.
        !          7106:    n(IN)
        !          7107:      Number of characters from wsrcstr to append.
        !          7108: */
        !          7109: size_t OCIWideCharStrncat(dvoid *envhp, OCIWchar *wdststr,
        !          7110:                           CONST OCIWchar *wsrcstr, size_t n);
        !          7111: 
        !          7112: 
        !          7113: /* ----------------------- OCIWideCharStrncpy -------------------------------*/
        !          7114: /*
        !          7115:    NAME
        !          7116:      OCIWideCharStrncpy - Copy wchar string in length
        !          7117:    REMARKS
        !          7118:      This function is similar to OCIWideCharStrcpy(), except that at most n
        !          7119:      characters are copied from the array pointed to by wsrcstr to the array
        !          7120:      pointed to by wdststr. Note that the null-terminator in wdststr will
        !          7121:      stop coping and result string will be null-terminated.
        !          7122:    RETURNS
        !          7123:      number of characters copied not including the ending null-terminator.
        !          7124:    envhp(IN/OUT)
        !          7125:      OCI environment handle to determine the character set .
        !          7126:    wdststr(OUT)
        !          7127:      Pointer to the destination wchar buffer.
        !          7128:    wsrcstr(IN)
        !          7129:      Pointer to the source wchar string.
        !          7130:    n(IN)
        !          7131:      Number of characters from wsrcstr to copy.
        !          7132: */
        !          7133: size_t OCIWideCharStrncpy(dvoid *envhp, OCIWchar *wdststr,
        !          7134:                           CONST OCIWchar *wsrcstr, size_t n);
        !          7135: 
        !          7136: 
        !          7137: /* ----------------------- OCIWideCharStrrchr -------------------------------*/
        !          7138: /*
        !          7139:    NAME
        !          7140:      OCIWideCharStrrchr - search the last occurrence of a wchar in wchar string
        !          7141:    REMARKS
        !          7142:      This function searchs for the last occurrence of wc in the wchar string
        !          7143:      pointed to by wstr. It returns a pointer to the whcar if successful, or
        !          7144:      a null pointer.
        !          7145:    RETURNS
        !          7146:      wchar pointer if successful, otherwise a null pointer.
        !          7147:    envhp(IN/OUT)
        !          7148:      OCI environment handle to determine the character set .
        !          7149:    wstr(IN)
        !          7150:      Pointer to the wchar string to search
        !          7151:    wc(IN)
        !          7152:      Wchar to search for.
        !          7153: */
        !          7154: OCIWchar *OCIWideCharStrrchr(dvoid *envhp, CONST OCIWchar *wstr,
        !          7155:                              OCIWchar wc);
        !          7156: 
        !          7157: 
        !          7158: /* --------------------- OCIWideCharStrCaseConversion -----------------------*/
        !          7159: /*
        !          7160:    NAME
        !          7161:      OCIWideCharStrCaseConversion - convert a wchar string into lowercase or
        !          7162:                                     uppercase
        !          7163:    REMARKS
        !          7164:      This function convert the wide char string pointed to by wsrcstr into the
        !          7165:      uppercase or lowercase specified by flag and copies the result into the
        !          7166:      array pointed to by wdststr. The result string will be null-terminated.
        !          7167:    RETURNS
        !          7168:      number of characters for result string not including null-terminator.
        !          7169:    envhp(IN/OUT)
        !          7170:      OCI environment handle.
        !          7171:    wdststr(OUT)
        !          7172:      Pointer to destination array.
        !          7173:    wsrcstr(IN)
        !          7174:      Pointer to source string.
        !          7175:    flag(IN)
        !          7176:      Specify the case to convert:
        !          7177:        OCI_NLS_UPPERCASE : convert to uppercase.
        !          7178:        OCI_NLS_LOWERCASE: convert to lowercase.
        !          7179:      This flag can be ORed with OCI_NLS_LINGUISTIC to specify that the
        !          7180:      linguistic setting in the locale will be used for case conversion.
        !          7181: */
        !          7182: size_t OCIWideCharStrCaseConversion(dvoid *envhp, OCIWchar *wdststr,
        !          7183:                                     CONST OCIWchar *wsrcstr, ub4 flag);
        !          7184: 
        !          7185: 
        !          7186: /*---------------------- OCIWideCharDisplayLength ---------------------------*/
        !          7187: /*
        !          7188:    NAME
        !          7189:      OCIWideCharDisplayLength - Calculate the display length for a wchar
        !          7190:    REMARKS
        !          7191:      This function determines the number of column positions required for wc
        !          7192:      in display. It returns number of column positions, or 0 if wc is 
        !          7193:      null-terminator.
        !          7194:    RETURNS
        !          7195:      Number of display positions.
        !          7196:    envhp(IN/OUT)
        !          7197:      OCI environment handle to determine the character set .
        !          7198:    wc(IN)
        !          7199:      Wchar character.
        !          7200: */
        !          7201: size_t OCIWideCharDisplayLength(dvoid *envhp, OCIWchar wc );
        !          7202: 
        !          7203: 
        !          7204: /*---------------------- OCIWideCharMultiByteLength -------------------------*/
        !          7205: /*
        !          7206:    NAME
        !          7207:      OCIWideCharMultiByteLength - Determine byte size in multi-byte encoding
        !          7208:    REMARKS
        !          7209:      This function determines the number of byte required for wc in multi-byte
        !          7210:      encoding. It returns number of bytes in multi-byte for wc.
        !          7211:    RETURNS
        !          7212:      Number of bytes.
        !          7213:    envhp(IN/OUT)
        !          7214:      OCI environment handle to determine the character set .
        !          7215:    wc(IN)
        !          7216:      Wchar character.
        !          7217: */
        !          7218: size_t OCIWideCharMultiByteLength(dvoid *envhp, OCIWchar wc);
        !          7219: 
        !          7220: 
        !          7221: /* ----------------------- OCIMultiByteStrcmp -------------------------------*/
        !          7222: /*
        !          7223:    NAME
        !          7224:      OCIMultiByteStrcmp - Compare two multi-byte strings
        !          7225:    REMARKS
        !          7226:      It compares two multi-byte strings in binary ( based on encoding value ),
        !          7227:      linguistic, or case-insensitive.
        !          7228:    RETURNS
        !          7229:      0, if str1 == str2.
        !          7230:      Positive, if str1 > str2.
        !          7231:      Negative, if str1 < str2.
        !          7232:    envhp(IN/OUT)
        !          7233:      OCI environment handle to determine the character set.
        !          7234:    str1(IN)
        !          7235:      Pointer to a null-terminated string.
        !          7236:    str2(IN)
        !          7237:      Pointer to a null-terminated string.
        !          7238:    flag(IN)
        !          7239:      It is used to decide the comparison method. It can be taken one of the
        !          7240:      following values:
        !          7241:        OCI_NLS_BINARY: for the binary comparison, this is default value.
        !          7242:        OCI_NLS_LINGUISTIC: for linguistic comparison specified in the locale.
        !          7243:      This flag can be ORed with OCI_NLS_CASE_INSENSITIVE for case-insensitive 
        !          7244:      comparison.
        !          7245: */
        !          7246: int OCIMultiByteStrcmp(dvoid *envhp, CONST OraText *str1,
        !          7247:                        CONST OraText *str2, int flag);
        !          7248: 
        !          7249: 
        !          7250: /*----------------------- OCIMultiByteStrncmp -------------------------------*/
        !          7251: /*
        !          7252:    NAME
        !          7253:      OCIMultiByteStrncmp - compare two strings in length
        !          7254:    REMARKS
        !          7255:      This function is similar to OCIMultiBytestrcmp(), except that at most len1 bytes
        !          7256:      from str1 and len2 bytes from str2 are compared. The null-terminator will
        !          7257:      be taken into the comparison.
        !          7258:    RETURNS
        !          7259:      0, if str1 = str2
        !          7260:      Positive, if str1 > str2
        !          7261:      Negative, if str1 < str2
        !          7262:    envhp(IN/OUT)
        !          7263:      OCI environment handle to determine the character set.
        !          7264:    str1(IN)
        !          7265:      Pointer to the first string
        !          7266:    len1(IN)
        !          7267:      The length for the first string for comparison
        !          7268:    str2(IN)
        !          7269:      Pointer to the second string
        !          7270:    len2(IN)
        !          7271:      The length for the second string for comparison.
        !          7272:    flag(IN)
        !          7273:      It is used to decide the comparison method. It can be taken one of the
        !          7274:      following values:
        !          7275:        OCI_NLS_BINARY: for the binary comparison, this is default value.
        !          7276:        OCI_NLS_LINGUISTIC: for linguistic comparison specified in the locale.
        !          7277:      This flag can be ORed with OCI_NLS_CASE_INSENSITIVE for case-insensitive 
        !          7278:      comparison.
        !          7279: */
        !          7280: int OCIMultiByteStrncmp(dvoid *envhp, CONST OraText *str1, size_t len1,
        !          7281:                         OraText *str2, size_t len2, int flag);
        !          7282: 
        !          7283: 
        !          7284: /*----------------------- OCIMultiByteStrcat --------------------------------*/
        !          7285: /*
        !          7286:    NAME
        !          7287:      OCIMultiByteStrcat - concatenate multibyte strings
        !          7288:    REMARKS
        !          7289:      This function appends a copy of the multi-byte string pointed to by
        !          7290:      srcstr, including the null-terminator to the end of string pointed to by
        !          7291:      dststr. It returns the number of bytes in the result string not including
        !          7292:      the ending null-terminator.
        !          7293:    RETURNS
        !          7294:      number of bytes in the result string not including the ending
        !          7295:      null-terminator.
        !          7296:    envhp(IN/OUT)
        !          7297:      Pointer to OCI environment handle
        !          7298:    dststr(IN/OUT)
        !          7299:      Pointer to the destination multi-byte string for appending.
        !          7300:    srcstr(IN)
        !          7301:      Pointer to the source string to append.
        !          7302: */
        !          7303: size_t OCIMultiByteStrcat(dvoid *envhp, OraText *dststr,
        !          7304:                           CONST OraText *srcstr);
        !          7305: 
        !          7306: 
        !          7307: /*------------------------- OCIMultiByteStrcpy ------------------------------*/
        !          7308: /*
        !          7309:    NAME
        !          7310:      OCIMultiByteStrcpy - copy multibyte string
        !          7311:    REMARKS
        !          7312:      This function copies the multi-byte string pointed to by srcstr,
        !          7313:      including the null-terminator, into the array pointed to by dststr. It
        !          7314:      returns the number of bytes copied not including the ending 
        !          7315:      null-terminator.
        !          7316:    RETURNS
        !          7317:      number of bytes copied not including the ending null-terminator.
        !          7318:    envhp(IN/OUT)
        !          7319:      Pointer to the OCI environment handle.
        !          7320:    srcstr(OUT)
        !          7321:      Pointer to the destination buffer.
        !          7322:    dststr(IN)
        !          7323:      Pointer to the source multi-byte string.
        !          7324: */
        !          7325: size_t OCIMultiByteStrcpy(dvoid *envhp, OraText *dststr,
        !          7326:                           CONST OraText *srcstr);
        !          7327: 
        !          7328: 
        !          7329: /*----------------------- OCIMultiByteStrlen --------------------------------*/
        !          7330: /*
        !          7331:    NAME
        !          7332:      OCIMultiByteStrlen - Calculate multibyte string length
        !          7333:    REMARKS
        !          7334:      This function computes the number of bytes in the multi-byte string
        !          7335:      pointed to by str, not including the null-terminator, and returns this
        !          7336:      number. 
        !          7337:    RETURNS
        !          7338:      number of bytes not including ending null-terminator.
        !          7339:    str(IN)
        !          7340:      Pointer to the source multi-byte string.
        !          7341: */
        !          7342: size_t OCIMultiByteStrlen(dvoid *envhp, CONST OraText *str);
        !          7343: 
        !          7344: 
        !          7345: /*----------------------- OCIMultiByteStrncat -------------------------------*/
        !          7346: /*
        !          7347:    NAME
        !          7348:      OCIMultiByteStrncat - concatenate string in length
        !          7349:    REMARKS
        !          7350:      This function is similar to OCIMultiBytestrcat(), except that at most n
        !          7351:      bytes from srcstr are appended to dststr. Note that the null-terminator in
        !          7352:      srcstr will stop appending and the function will append as many character
        !          7353:      as possible within n bytes. dststr will be null-terminated. 
        !          7354:    RETURNS
        !          7355:      Number of bytes in the result string not including the ending
        !          7356:      null-terminator.
        !          7357:    envhp(IN/OUT)
        !          7358:      Pointer to OCI environment handle.
        !          7359:    srcstr(IN/OUT)
        !          7360:      Pointer to the destination multi-byte string for appending.
        !          7361:    dststr(IN)
        !          7362:      Pointer to the source multi-byte string to append.
        !          7363:    n(IN)
        !          7364:      Number of bytes from srcstr to append.
        !          7365: */
        !          7366: size_t OCIMultiByteStrncat(dvoid *envhp, OraText *dststr,
        !          7367:                            CONST OraText *srcstr, size_t n);
        !          7368: 
        !          7369: 
        !          7370: /*----------------------- OCIMultiByteStrncpy -------------------------------*/
        !          7371: /*
        !          7372:    NAME
        !          7373:      OCIMultiByteStrncpy - copy multibyte string in length
        !          7374:    REMARKS
        !          7375:      This function is similar to OCIMultiBytestrcpy(), except that at most n
        !          7376:      bytes are copied from the array pointed to by srcstr to the array pointed
        !          7377:      to by dststr. Note that the null-terminator in srcstr will stop coping and
        !          7378:      the function will copy as many character as possible within n bytes. The 
        !          7379:      result string will be null-terminated.
        !          7380:    RETURNS
        !          7381:      number of bytes copied not including the ending null-terminator.
        !          7382:    envhp(IN/OUT)
        !          7383:      Pointer to a OCI environment handle.
        !          7384:    dststr(IN)
        !          7385:      Pointer to the source multi-byte string.
        !          7386:    srcstr(OUT)
        !          7387:      Pointer to the destination buffer.
        !          7388:    n(IN)
        !          7389:      Number of bytes from srcstr to copy.
        !          7390: */
        !          7391: size_t OCIMultiByteStrncpy(dvoid *envhp, OraText *dststr,
        !          7392:                            CONST OraText *srcstr, size_t n);
        !          7393: 
        !          7394: 
        !          7395: /*----------------------- OCIMultiByteStrnDisplayLength ---------------------*/
        !          7396: /*
        !          7397:    NAME
        !          7398:      OCIMultiByteStrnDisplayLength - calculate the display length for a
        !          7399:                                      multibyt string
        !          7400:    REMARKS
        !          7401:      This function returns the number of display positions occupied by the 
        !          7402:      complete characters within the range of n bytes.
        !          7403:    RETURNS
        !          7404:      number of display positions.
        !          7405:    envhp(IN/OUT)
        !          7406:      OCI environment handle.
        !          7407:    str(IN)
        !          7408:      Pointer to a multi-byte string.
        !          7409:    n(IN)
        !          7410:      Number of bytes to examine.
        !          7411: */
        !          7412: size_t OCIMultiByteStrnDisplayLength(dvoid *envhp, CONST OraText *str1,
        !          7413:                                      size_t n);
        !          7414: 
        !          7415: 
        !          7416: /*---------------------- OCIMultiByteStrCaseConversion  ---------------------*/
        !          7417: /*
        !          7418:    NAME
        !          7419:      OCIMultiByteStrCaseConversion
        !          7420:    REMARKS
        !          7421:      This function convert the multi-byte string pointed to by srcstr into the
        !          7422:      uppercase or lowercase specified by flag and copies the result into the
        !          7423:      array pointed to by dststr. The result string will be null-terminated.
        !          7424:    RETURNS
        !          7425:      number of bytes for result string not including null-terminator.
        !          7426:    envhp(IN/OUT)
        !          7427:      OCI environment handle.
        !          7428:    dststr(OUT)
        !          7429:      Pointer to destination array.
        !          7430:    srcstr(IN)
        !          7431:      Pointer to source string.
        !          7432:    flag(IN)
        !          7433:      Specify the case to convert:
        !          7434:        OCI_NLS_UPPERCASE: convert to uppercase.
        !          7435:        OCI_NLS_LOWERCASE: convert to lowercase.
        !          7436:      This flag can be ORed with OCI_NLS_LINGUISTIC to specify that the 
        !          7437:      linguistic setting in the locale will be used for case conversion.
        !          7438: */
        !          7439: size_t OCIMultiByteStrCaseConversion(dvoid *envhp, OraText *dststr,
        !          7440:                                      CONST OraText *srcstr, ub4 flag);
        !          7441: 
        !          7442: 
        !          7443: /*------------------------- OCICharSetToUnicode -----------------------------*/
        !          7444: /*
        !          7445:    NAME
        !          7446:      OCICharSetToUnicode - convert multibyte string into Unicode as UCS2
        !          7447:    REMARKS
        !          7448:      This function converts a multi-byte string pointed to by src to Unicode 
        !          7449:      into the array pointed to by dst. The conversion will stop when it reach
        !          7450:      to the source limitation or destination limitation. 
        !          7451:      The function will return number of characters converted into Unicode.
        !          7452:      If dstlen is zero, it will just return the number of characters for the
        !          7453:      result without real conversion.
        !          7454:    RETURNS
        !          7455:      OCI_SUCCESS, OCI_INVALID_HANDLE or OCI_ERROR
        !          7456:    envhp(IN/OUT)
        !          7457:      Pointer to an OCI environment handle
        !          7458:    dst(OUT)
        !          7459:      Pointer to a destination buffer
        !          7460:    dstlen(IN)
        !          7461:      Size of destination buffer in character
        !          7462:    src(IN)
        !          7463:      Pointer to multi-byte source string.
        !          7464:    srclen(IN)
        !          7465:      Size of source string in bytes.
        !          7466:    rsize(OUT)
        !          7467:      Number of characters converted.
        !          7468:      If it is a NULL pointer, nothing to return.
        !          7469: */
        !          7470: sword OCICharSetToUnicode(dvoid *envhp, ub2 *dst, size_t dstlen,
        !          7471:                           CONST OraText *src, size_t  srclen, size_t *rsize);
        !          7472: 
        !          7473: 
        !          7474: /*------------------------- OCIUnicodeToCharSet -----------------------------*/
        !          7475: /*
        !          7476:    NAME
        !          7477:      OCIUnicodeToCharSet - convert Unicode into multibyte
        !          7478:    REMARKS
        !          7479:      This function converts a Unicode string pointed to by src to multi-byte
        !          7480:      into the array pointed to by dst. The conversion will stop when it reach
        !          7481:      to the source limitation or destination limitation. The function will
        !          7482:      return number of bytes converted into multi-byte. If dstlen is zero, it
        !          7483:      will just return the number of bytes for the result without real 
        !          7484:      conversion. If a Unicode character is not convertible for the character
        !          7485:      set specified in OCI environment handle, a replacement character will be
        !          7486:      used for it. In this case, OCICharSetConversionIsReplacementUsed() will
        !          7487:      return ture.
        !          7488:    RETURNS
        !          7489:      OCI_SUCCESS, OCI_INVALID_HANDLE or OCI_ERROR
        !          7490:    envhp(IN/OUT)
        !          7491:      Pointer to an OCI environment handle.
        !          7492:    dst(OUT)
        !          7493:      Pointer to a destination buffer.
        !          7494:    dstlen(IN)
        !          7495:      Size of destination buffer in byte.
        !          7496:    src(IN)
        !          7497:      Pointer to a Unicode string.
        !          7498:    srclen(IN)
        !          7499:      Size of source string in characters.
        !          7500:    rsize(OUT)
        !          7501:      Number of bytes converted.
        !          7502:      If it is a NULL pointer, nothing to return.
        !          7503: */
        !          7504: sword OCIUnicodeToCharSet(dvoid *envhp, OraText *dst, size_t dstlen, 
        !          7505:                            CONST ub2 *src, size_t srclen, size_t *rsize);
        !          7506: 
        !          7507: 
        !          7508: /* ------------------- OCICharsetConversionIsReplacementUsed ----------------*/
        !          7509: /*
        !          7510:    NAME
        !          7511:      OCICharsetConversionIsReplacementUsed - chech if replacement is used in 
        !          7512:                                              conversion
        !          7513:    REMARKS
        !          7514:      This function indicates whether or not the replacement character was used
        !          7515:      for nonconvertible characters in character set conversion in last invoke
        !          7516:      of OCICharsetUcs2ToMb().
        !          7517:    RETURNS
        !          7518:      TRUE is the replacement character was used in last OCICharsetUcs2ToMb()
        !          7519:      invoking, else FALSE.
        !          7520:    envhp(IN/OUT)
        !          7521:      OCI environment handle. This should be the first handle passed to 
        !          7522:      OCICharsetUcs2ToMb().
        !          7523: */
        !          7524: boolean OCICharSetConversionIsReplacementUsed(dvoid *envhp);
        !          7525: 
        !          7526: 
        !          7527: /*------------------------- OCIMessageOpen ----------------------------------*/
        !          7528: /*
        !          7529:    NAME
        !          7530:      OCIMessageOpen - open a locale message file
        !          7531:    REMARKS
        !          7532:      This function opens a message handle for facility of product in a language
        !          7533:      pointed to by envhp. It first try to open the message file corresponding
        !          7534:      to envhp for the facility. If it successes, it will use that file to
        !          7535:      initialize a message handle, else it will use the default message file
        !          7536:      which is for American language for the facility. The function return a
        !          7537:      pointer pointed to a message handle into msghp parameter.
        !          7538:    RETURNS
        !          7539:      OCI_SUCCESS, OCI_INVALID_HANDLE or OCI_ERROR
        !          7540:    envhp(IN/OUT)
        !          7541:      A pointer to OCI environment handle for message language.
        !          7542:    errhp(IN/OUT)
        !          7543:      The OCI error handle. If there is an error, it is record in errhp and this
        !          7544:      function returns a NULL pointer. Diagnostic information can be obtained by
        !          7545:      calling OCIErrorGet().
        !          7546:    msghp(OUT)
        !          7547:      a message handle for return
        !          7548:    product(IN)
        !          7549:      A pointer to a product name. Product name is used to locate the directory
        !          7550:      for message in a system dependent way. For example, in Solaris, the
        !          7551:      directory of message files for the product `rdbms' is
        !          7552:      `${ORACLE_HOME}/rdbms'.
        !          7553:    facility(IN)
        !          7554:      A pointer to a facility name in the product. It is used to construct a
        !          7555:      message file name. A message file name follows the conversion with 
        !          7556:      facility as prefix. For example, the message file name for facility
        !          7557:      `img' in American language will be `imgus.msb' where `us' is the 
        !          7558:      abbreviation of American language and `msb' as message binary file 
        !          7559:      extension.
        !          7560:    dur(IN)
        !          7561:      Duration for memory allocation for the return message handle. It can be
        !          7562:      the following values:
        !          7563:         OCI_DURATION_CALL
        !          7564:         OCI_DURATION_STATEMENT
        !          7565:         OCI_DURATION_SESSION
        !          7566:         OCI_DURATION_TRANSACTION
        !          7567:      For the detail description, please refer to Memory Related Service
        !          7568:      Interfaces section.
        !          7569: */
        !          7570: sword OCIMessageOpen(dvoid *envhp, OCIError *errhp, OCIMsg **msghp,
        !          7571:                       CONST OraText *product, CONST OraText *facility, 
        !          7572:                       OCIDuration dur);
        !          7573:  
        !          7574: 
        !          7575: /*------------------------- OCIMessageGet -----------------------------------*/
        !          7576: /*
        !          7577:    NAME
        !          7578:      OCIMessageGet - get a locale message from a message handle
        !          7579:    REMARKS
        !          7580:      This function will get message with message number identified by msgno and
        !          7581:      if buflen is not zero, the function will copy the message into the buffer
        !          7582:      pointed to by msgbuf. If buflen is zero, the message will be copied into
        !          7583:      a message buffer inside the message handle pointed to by msgh. For both
        !          7584:      cases. it will return the pointer to the null-terminated message string.
        !          7585:      If it cannot get the message required, it will return a NULL pointer.
        !          7586:    RETURNS
        !          7587:      A pointer to a null-terminated message string on success, otherwise a NULL
        !          7588:      pointer.
        !          7589:    msgh(IN/OUT)
        !          7590:      Pointer to a message handle which was previously opened by OCIMessageOpen().
        !          7591:    msgno(IN)
        !          7592:      The message number for getting message.
        !          7593:    msgbuf(OUT)
        !          7594:      Pointer to a destination buffer to the message retrieved. If buflen is
        !          7595:      zero, it can be NULL pointer.
        !          7596:    buflen(IN)
        !          7597:      The size of the above destination buffer.
        !          7598: */
        !          7599: OraText *OCIMessageGet(OCIMsg *msgh, ub4 msgno, OraText *msgbuf, size_t buflen);
        !          7600: 
        !          7601: 
        !          7602: /*------------------------- OCIMessageClose ---------------------------------*/
        !          7603: /*
        !          7604:    NAME
        !          7605:      OCIMessageClose - close a message handle
        !          7606:    REMARKS
        !          7607:      This function closes a message handle pointed to by msgh and frees any
        !          7608:      memory associated with this handle.
        !          7609:    RETURNS
        !          7610:      OCI_SUCCESS, OCI_INVALID_HANDLE or OCI_ERROR
        !          7611:    envhp(IN/OUT)
        !          7612:      A pointer to OCI environment handle for message language.
        !          7613:    errhp(IN/OUT)
        !          7614:      The OCI error handle. If there is an error, it is record in errhp and this
        !          7615:      function returns a NULL pointer. Diagnostic information can be obtained by
        !          7616:      calling OCIErrorGet().
        !          7617:    msghp(IN/OUT)
        !          7618:      A pointer to a message handle which was previously opened by
        !          7619:      OCIMessageOpen().
        !          7620: */
        !          7621: sword OCIMessageClose(dvoid *envhp, OCIError *errhp, OCIMsg *msghp);
        !          7622: 
        !          7623: /*--------------- End of Extensions to NLS cartridge service ----------------*/
        !          7624: 
        !          7625: 
        !          7626: /*----------------- Extensions to OCI Thread interface ---------------------*/
        !          7627: /*****************************************************************************
        !          7628:                               DESCRIPTION
        !          7629: ******************************************************************************
        !          7630: 1 Threads Interface
        !          7631: 
        !          7632: The OCIThread package provides a number of commonly used threading
        !          7633: primitives for use by Oracle customers.  It offers a portable interface to
        !          7634: threading capabilities native to various platforms.  It does not implement
        !          7635: threading on platforms which do not have native threading capability.
        !          7636: 
        !          7637: OCIThread does not provide a portable implementation of multithreaded 
        !          7638: facilities.  It only serves as a set of portable covers for native 
        !          7639: multithreaded facilities.  Therefore, platforms that do not have native 
        !          7640: support for multi-threading will only be able to support a limited 
        !          7641: implementation of OCIThread.  As a result, products that rely on all of 
        !          7642: OCIThread's functionality will not port to all platforms.  Products that must 
        !          7643: port to all platforms must use only a subset of OCIThread's functionality.  
        !          7644: This issue is discussed further in later sections of this document.
        !          7645: 
        !          7646: The OCIThread API is split into four main parts.  Each part is described
        !          7647: briefly here.  The following subsections describe each in greater detail.
        !          7648: 
        !          7649:  1. Initialization and Termination Calls
        !          7650: 
        !          7651:      These calls deal with the initialization and termination of OCIThread.
        !          7652:      Initialization of OCIThread initializes the OCIThread context which is
        !          7653:      a member of the OCI environment or session handle.  This context is 
        !          7654:      required for other OCIThread calls.
        !          7655: 
        !          7656:  2. Passive Threading Primitives
        !          7657: 
        !          7658:      The passive threading primitives include primitives to manipulate mutual
        !          7659:      exclusion (mutex) locks, thread ID's, and thread-specific data keys.
        !          7660: 
        !          7661:      The reason that these primitives are described as 'passive' is that while
        !          7662:      their specifications allow for the existence of multiple threads, they do
        !          7663:      not require it.  This means that it is possible for these primitives to
        !          7664:      be implemented according to specification in both single-threaded and
        !          7665:      multi-threaded environments.
        !          7666: 
        !          7667:      As a result, OCIThread clients that use only these primitives will not
        !          7668:      require the existence of multiple threads in order to work correctly,
        !          7669:      i.e., they will be able to work in single-threaded environments without 
        !          7670:      branching code.
        !          7671: 
        !          7672:  3. Active Threading Primitives
        !          7673: 
        !          7674:      Active threading primitives include primitives dealing with the creation,
        !          7675:      termination, and other manipulation of threads.
        !          7676: 
        !          7677:      The reason that these primitives are described as 'active' is that they
        !          7678:      can only be used in true multi-threaded environments.  Their
        !          7679:      specifications explicitly require that it be possible to have multiple
        !          7680:      threads.  If you need to determine at runtime whether or not you are in a
        !          7681:      multi-threaded environment, call OCIThreadIsMulti() before calling an
        !          7682:      OCIThread active primitive.
        !          7683: 
        !          7684: 
        !          7685: 1.1 Initialization & Termination
        !          7686: ==================================
        !          7687: 
        !          7688: The types and functions described in this section are associated with the
        !          7689: initialization and termination of the OCIThread package.  OCIThread must
        !          7690: be properly initialized before any of its functionality can be used.
        !          7691: OCIThread's process initialization function, 'OCIThreadProcessInit()',
        !          7692: must be called with care; see below.
        !          7693: 
        !          7694: The observed behavior of the initialization and termination functions is the
        !          7695: same regardless of whether OCIThread is in single-threaded or multi-threaded
        !          7696: environment.  It is OK to call the initialization functions from both generic
        !          7697: and operating system specific (OSD) code.
        !          7698: 
        !          7699: 1.1.1 Types
        !          7700: 
        !          7701:   OCIThreadContext - OCIThread Context
        !          7702:   -------------------------------------
        !          7703: 
        !          7704:     Most calls to OCIThread functions take the OCI environment or session 
        !          7705:     handle as a parameter.  The OCIThread context is part of the OCI 
        !          7706:     environment or session handle and it must be initialized by calling 
        !          7707:     'OCIThreadInit()'.  Termination of the OCIThread context occurs by calling
        !          7708:     'OCIThreadTerm()'.
        !          7709: 
        !          7710:     The OCIThread context is a private data structure.  Clients must NEVER
        !          7711:     attempt to examine the contents of the context.
        !          7712: 
        !          7713: 1.1.2  OCIThreadProcessInit
        !          7714: 
        !          7715:   OCIThreadProcessInit - OCIThread Process INITialization
        !          7716:   --------------------------------------------------------
        !          7717: 
        !          7718:     Description
        !          7719: 
        !          7720:       This function should be called to perform OCIThread process
        !          7721:       initialization.
        !          7722: 
        !          7723:     Prototype
        !          7724: 
        !          7725:       void OCIThreadProcessInit();
        !          7726: 
        !          7727:     Returns
        !          7728: 
        !          7729:       Nothing.
        !          7730: 
        !          7731:     Notes
        !          7732: 
        !          7733:       Whether or not this function needs to be called depends on how OCI
        !          7734:       Thread is going to be used.
        !          7735: 
        !          7736:         * In a single-threaded application, calling this function is optional.
        !          7737:           If it is called at all, the first call to it must occur before calls
        !          7738:           to any other OCIThread functions.  Subsequent calls can be made
        !          7739:           without restriction; they will not have any effect.
        !          7740: 
        !          7741:         * In a multi-threaded application, this function MUST be called.  The
        !          7742:           first call to it MUST occur 'strictly before' any other OCIThread
        !          7743:           calls; i.e., no other calls to OCIThread functions (including other
        !          7744:           calls to this one) can be concurrent with the first call.
        !          7745:           Subsequent calls to this function can be made without restriction;
        !          7746:           they will not have any effect.
        !          7747: 
        !          7748: 
        !          7749: 1.1.3 OCIThreadInit
        !          7750: 
        !          7751:   OCIThreadInit - OCIThread INITialize
        !          7752:   -------------------------------------
        !          7753: 
        !          7754:     Description
        !          7755: 
        !          7756:       This initializes OCIThread context.
        !          7757: 
        !          7758:     Prototype
        !          7759: 
        !          7760:       sword OCIThreadInit(dvoid *hndl, OCIError *err);
        !          7761: 
        !          7762:         hndl(IN/OUT): The OCI environment or session handle.
        !          7763: 
        !          7764:         err(IN/OUT): The OCI error handle.  If there is an error and OCI_ERROR
        !          7765:                      is returned, the error is recorded in err and diagnostic 
        !          7766:                      information can be obtained by calling OCIErrorGet().
        !          7767: 
        !          7768:     Returns
        !          7769: 
        !          7770:       OCI_SUCCESS, OCI_ERROR or OCI_INVALID_HANDLE.
        !          7771: 
        !          7772:     Notes
        !          7773: 
        !          7774:       It is illegal for OCIThread clients to try an examine the memory
        !          7775:       pointed to by the returned pointer.
        !          7776: 
        !          7777:       It is safe to make concurrent calls to 'OCIThreadInit()'.  Unlike
        !          7778:       'OCIThreadProcessInit()',  there is no need to have a first call
        !          7779:       that occurs before all the others.
        !          7780: 
        !          7781:       The first time 'OCIThreadInit()' is called, it initilaizes the OCI
        !          7782:       Thread context.  It also saves a pointer to the context in some system
        !          7783:       dependent manner.  Subsequent calls to 'OCIThreadInit()' will return
        !          7784:       the same context.
        !          7785: 
        !          7786:       Each call to 'OCIThreadInit()' must eventually be matched by a call to
        !          7787:       'OCIThreadTerm()'.
        !          7788: 
        !          7789:   OCIThreadTerm - OCIThread TERMinate
        !          7790:   ------------------------------------
        !          7791: 
        !          7792:     Description
        !          7793: 
        !          7794:       This should be called to release the OCIThread context.  It should be
        !          7795:       called exactly once for each call made to 'OCIThreadInit()'.
        !          7796: 
        !          7797:     Prototype
        !          7798: 
        !          7799:       sword OCIThreadTerm(dvoid *hndl, OCIError *err);
        !          7800: 
        !          7801:         hndl(IN/OUT): The OCI environment or session handle.
        !          7802: 
        !          7803:         err(IN/OUT): The OCI error handle.  If there is an error and OCI_ERROR
        !          7804:                      is returned, the error is recorded in err and diagnostic 
        !          7805:                      information can be obtained by calling OCIErrorGet().
        !          7806: 
        !          7807:     Returns
        !          7808: 
        !          7809:       OCI_SUCCESS, OCI_ERROR or OCI_INVALID_HANDLE.
        !          7810: 
        !          7811:     Notes
        !          7812: 
        !          7813:       It is safe to make concurrent calls to 'OCIThreadTerm()'.
        !          7814: 
        !          7815:       'OCIThreadTerm()' will not do anything until it has been called as
        !          7816:       many times as 'OCIThreadInit()' has been called.  When that happens,
        !          7817:       it terminates the OCIThread layer and frees the memory allocated for
        !          7818:       the context.  Once this happens, the context should not be re-used.
        !          7819:       It will be necessary to obtain a new one by calling 'OCIThreadInit()'.
        !          7820: 
        !          7821: 
        !          7822:   OCIThreadIsMulti - OCIThread Is Multi-Threaded?
        !          7823:   ------------------------------------------------
        !          7824: 
        !          7825:     Description
        !          7826: 
        !          7827:       This tells the caller whether the application is running in a
        !          7828:       multi-threaded environment or a single-threaded environment.
        !          7829: 
        !          7830:     Prototype
        !          7831:       boolean OCIThreadIsMulti(void);
        !          7832: 
        !          7833:     Returns
        !          7834: 
        !          7835:       TRUE if the environment is multi-threaded;
        !          7836:       FALSE if the environment is single-threaded.
        !          7837: 
        !          7838: 
        !          7839: 1.2 Passive Threading Primitives
        !          7840: ==================================
        !          7841: 
        !          7842: 1.2.1 Types
        !          7843: 
        !          7844: The passive threading primitives deal with the manipulation of mutex, 
        !          7845: thread ID's, and thread-specific data.  Since the specifications of these 
        !          7846: primitives do not require the existence of multiple threads, they can be 
        !          7847: used both on multithreaded and single-threaded platforms.
        !          7848: 
        !          7849: 1.2.1.1  OCIThreadMutex - OCIThread Mutual Exclusion Lock
        !          7850: -----------------------------------------------------------
        !          7851: 
        !          7852:   The type 'OCIThreadMutex' is used to represent a mutual exclusion lock
        !          7853:   (mutex).  A mutex is typically used for one of two purposes: (i) to
        !          7854:   ensure that only one thread accesses a given set of data at a time, or
        !          7855:   (ii) to ensure that only one thread executes a given critical section of
        !          7856:   code at a time.
        !          7857: 
        !          7858:   Mutexes pointer can be declared as parts of client structures or as 
        !          7859:   stand-alone variables.  Before they can be used, they must be initialized 
        !          7860:   using 'OCIThreadMutexInit()'.  Once they are no longer needed, they must be
        !          7861:   destroyed using 'OCIThreadMutexDestroy()'.  A mutex pointer must NOT be 
        !          7862:   used after it is destroyed.
        !          7863: 
        !          7864:   A thread can acquire a mutex by using either 'OCIThreadMutexAcquire()' or
        !          7865:   'OCIThreadMutexTry()'.  They both ensure that only one thread at a time is
        !          7866:   allowed to hold a given mutex.  A thread that holds a mutex can release it
        !          7867:   by calling 'OCIThreadMutexRelease()'.
        !          7868: 
        !          7869: 
        !          7870: 1.2.1.2  OCIThreadKey - OCIThread Key for Thread-Specific Data
        !          7871: ----------------------------------------------------------------
        !          7872: 
        !          7873:   A key can be thought of as a process-wide variable that has a
        !          7874:   thread-specific value.  What this means is that all the threads in a
        !          7875:   process can use any given key.  However, each thread can examine or modify
        !          7876:   that key independently of the other threads.  The value that a thread sees
        !          7877:   when it examines the key will always be the same as the value that it last
        !          7878:   set for the key.  It will not see any values set for the key by the other
        !          7879:   threads.
        !          7880: 
        !          7881:   The type of the value held by a key is a 'dvoid *' generic pointer.
        !          7882: 
        !          7883:   Keys can be created using 'OCIThreadKeyInit()'.  When a key is created, its
        !          7884:   value is initialized to 'NULL' for all threads.
        !          7885: 
        !          7886:   A thread can set a key's value using 'OCIThreadKeySet()'.  A thread can
        !          7887:   get a key's value using 'OCIThreadKeyGet()'.
        !          7888: 
        !          7889:   The OCIThread key functions will save and retrieve data SPECIFIC TO THE
        !          7890:   THREAD.  When clients maintain a pool of threads and assign the threads to
        !          7891:   different tasks, it *may not* be appropriate for a task to use OCIThread
        !          7892:   key functions to save data associated with it.  Here is a scenario of how
        !          7893:   things can fail: A thread is assigned to execute the initialization of a
        !          7894:   task.  During the initialization, the task stored some data related to it
        !          7895:   in the thread using OCIThread key functions.  After the initialization,
        !          7896:   the thread is returned back to the threads pool.  Later, the threads pool
        !          7897:   manager assigned another thread to perform some operations on the task,
        !          7898:   and the task needs to retrieve those data it stored earlier in
        !          7899:   initialization.  Since the task is running in another thread, it will not
        !          7900:   be able to retrieve the same data back!  Applications that use thread
        !          7901:   pools should be aware of this and be cautious when using OCIThread key
        !          7902:   functions.
        !          7903: 
        !          7904: 
        !          7905: 1.2.1.3  OCIThreadKeyDestFunc - OCIThread Key Destructor Function Type
        !          7906: ------------------------------------------------------------------------
        !          7907: 
        !          7908:   This is the type of a pointer to a key's destructor routine.  Keys can be
        !          7909:   associated with a destructor routine when they are created (see
        !          7910:   'OCIThreadKeyInit()').
        !          7911: 
        !          7912:   A key's destructor routine will be called whenever a thread that has a
        !          7913:   non-NULL value for the key terminates.
        !          7914: 
        !          7915:   The destructor routine returns nothing and takes one parameter.  The
        !          7916:   parameter will be the value that was set for key when the thread
        !          7917:   terminated.
        !          7918: 
        !          7919:   The destructor routine is guaranteed to be called on a thread's value
        !          7920:   in the key after the termination of the thread and before process
        !          7921:   termination.  No more precise guarantee can be made about the timing
        !          7922:   of the destructor routine call; thus no code in the process may assume
        !          7923:   any post-condition of the destructor routine.  In particular, the
        !          7924:   destructor is not guaranteed to execute before a join call on the
        !          7925:   terminated thread returns.
        !          7926: 
        !          7927: 
        !          7928: 1.2.1.4  OCIThreadId - OCIThread Thread ID
        !          7929: --------------------------------------------
        !          7930: 
        !          7931:   Type 'OCIThreadId' is the type that will be used to identify a thread.
        !          7932:   At any given time, no two threads will ever have the same 'OCIThreadId'.
        !          7933:   However, 'OCIThreadId' values can be recycled; i.e., once a thread dies,
        !          7934:   a new thread may be created that has the same 'OCIThreadId' as the one
        !          7935:   that died.  In particular, the thread ID must uniquely identify a thread
        !          7936:   T within a process, and it must be consistent and valid in all threads U
        !          7937:   of the process for which it can be guaranteed that T is running
        !          7938:   concurrently with U.  The thread ID for a thread T must be retrievable
        !          7939:   within thread T.  This will be done via OCIThreadIdGet().
        !          7940: 
        !          7941:   The 'OCIThreadId' type supports the concept of a NULL thread ID: the NULL
        !          7942:   thread ID will never be the same as the ID of an actual thread.
        !          7943: 
        !          7944: 
        !          7945: 
        !          7946: 1.2.2 Function prototypes for passive primitives
        !          7947: --------------------------------------------------
        !          7948: 
        !          7949: 1.2.2.1 Mutex functions
        !          7950: -------------------------
        !          7951: 
        !          7952:   OCIThreadMutexInit - OCIThread MuteX Initialize
        !          7953:   -----------------------------------------------
        !          7954: 
        !          7955:     Description
        !          7956: 
        !          7957:       This allocate and initializes a mutex.  All mutexes must be 
        !          7958:       initialized prior to use.
        !          7959: 
        !          7960:     Prototype
        !          7961: 
        !          7962:       sword OCIThreadMutexInit(dvoid *hndl, OCIError *err, 
        !          7963:                                OCIThreadMutex **mutex);
        !          7964: 
        !          7965:         hndl(IN/OUT): The OCI environment or session handle.
        !          7966: 
        !          7967:         err(IN/OUT): The OCI error handle.  If there is an error and OCI_ERROR
        !          7968:                      is returned, the error is recorded in err and diagnostic 
        !          7969:                      information can be obtained by calling OCIErrorGet().
        !          7970: 
        !          7971:         mutex(OUT):  The mutex to initialize.
        !          7972: 
        !          7973:     Returns
        !          7974: 
        !          7975:       OCI_SUCCESS, OCI_ERROR or OCI_INVALID_HANDLE.
        !          7976: 
        !          7977:     Notes
        !          7978: 
        !          7979:       Multiple threads must not initialize the same mutex simultaneously.
        !          7980:       Also, a mutex must not be reinitialized until it has been destroyed (see
        !          7981:       'OCIThreadMutexDestroy()').
        !          7982: 
        !          7983:   OCIThreadMutexDestroy - OCIThread MuteX Destroy
        !          7984:   -----------------------------------------------
        !          7985: 
        !          7986:     Description
        !          7987: 
        !          7988:       This destroys and deallocate a mutex.  Each mutex must be destroyed 
        !          7989:       once it is no longer needed.
        !          7990: 
        !          7991:     Prototype
        !          7992: 
        !          7993:       sword OCIThreadMutexDestroy(dvoid *hndl, OCIError *err,
        !          7994:                                   OCIThreadMutex **mutex);
        !          7995: 
        !          7996:         hndl(IN/OUT): The OCI environment or session handle.
        !          7997: 
        !          7998:         err(IN/OUT): The OCI error handle.  If there is an error and OCI_ERROR
        !          7999:                      is returned, the error is recorded in err and diagnostic 
        !          8000:                      information can be obtained by calling OCIErrorGet().
        !          8001: 
        !          8002:         mutex(IN/OUT):   The mutex to destroy.
        !          8003: 
        !          8004:     Returns
        !          8005: 
        !          8006:       OCI_SUCCESS, OCI_ERROR or OCI_INVALID_HANDLE.
        !          8007: 
        !          8008:     Notes
        !          8009: 
        !          8010:       It is not legal to destroy a mutex that is uninitialized or is currently
        !          8011:       held by a thread.  The destruction of a mutex must not occur concurrently
        !          8012:       with any other operations on the mutex.  A mutex must not be used after
        !          8013:       it has been destroyed.
        !          8014: 
        !          8015: 
        !          8016:   OCIThreadMutexAcquire - OCIThread MuteX Acquire
        !          8017:   -----------------------------------------------
        !          8018: 
        !          8019:     Description
        !          8020: 
        !          8021:       This acquires a mutex for the thread in which it is called.  If the mutex
        !          8022:       is held by another thread, the calling thread is blocked until it can
        !          8023:       acquire the mutex.
        !          8024: 
        !          8025:     Prototype
        !          8026: 
        !          8027:      sword OCIThreadMutexAcquire(dvoid *hndl, OCIError *err,
        !          8028:                                  OCIThreadMutex *mutex);
        !          8029: 
        !          8030:         hndl(IN/OUT): The OCI environment or session handle.
        !          8031: 
        !          8032:         err(IN/OUT): The OCI error handle.  If there is an error, it is 
        !          8033:                      recorded in err and this function returns OCI_ERROR.  
        !          8034:                      Diagnostic information can be obtained by calling 
        !          8035:                      OCIErrorGet().
        !          8036: 
        !          8037:         mutex(IN/OUT):   The mutex to acquire.
        !          8038: 
        !          8039:     Returns
        !          8040: 
        !          8041:       OCI_SUCCESS, OCI_ERROR or OCI_INVALID_HANDLE.
        !          8042: 
        !          8043:     Notes
        !          8044: 
        !          8045:       It is illegal to attempt to acquire an uninitialized mutex.
        !          8046: 
        !          8047:       This function's behavior is undefined if it is used by a thread to
        !          8048:       acquire a mutex that is already held by that thread.
        !          8049: 
        !          8050: 
        !          8051: 
        !          8052:   OCIThreadMutexRelease - OCIThread MuteX Release
        !          8053:   -----------------------------------------------
        !          8054: 
        !          8055:     Description
        !          8056: 
        !          8057:       This releases a mutex.  If there are any threads blocked on the mutex,
        !          8058:       one of them will acquire it and become unblocked.
        !          8059: 
        !          8060:     Prototype
        !          8061: 
        !          8062:       sword OCIThreadMutexRelease(dvoid *hndl, OCIError *err,
        !          8063:                                   OCIThreadMutex *mutex);
        !          8064: 
        !          8065:         hndl(IN/OUT): The OCI environment or session handle.
        !          8066: 
        !          8067:         err(IN/OUT): The OCI error handle.  If there is an error and OCI_ERROR
        !          8068:                      is returned, the error is recorded in err and diagnostic 
        !          8069:                      information can be obtained by calling OCIErrorGet().
        !          8070: 
        !          8071:         mutex(IN/OUT):   The mutex to release.
        !          8072: 
        !          8073:     Returns
        !          8074: 
        !          8075:       OCI_SUCCESS, OCI_ERROR or OCI_INVALID_HANDLE.
        !          8076: 
        !          8077:     Notes
        !          8078: 
        !          8079:       It is illegal to attempt to release an uninitialized mutex.  It is also
        !          8080:       illegal for a thread to release a mutex that it does not hold.
        !          8081: 
        !          8082: 
        !          8083:   OCIThreadKeyInit - OCIThread KeY Initialize
        !          8084:   -------------------------------------------
        !          8085: 
        !          8086:     Description
        !          8087: 
        !          8088:       This creates a key.  Each call to this routine allocate and generates 
        !          8089:       a new key that is distinct from all other keys.
        !          8090: 
        !          8091:     Prototype
        !          8092: 
        !          8093:       sword OCIThreadKeyInit(dvoid *hndl, OCIError *err, OCIThreadKey **key,
        !          8094:                              OCIThreadKeyDestFunc destFn);
        !          8095: 
        !          8096:         hndl(IN/OUT): The OCI environment or session handle.
        !          8097: 
        !          8098:         err(IN/OUT): The OCI error handle.  If there is an error and OCI_ERROR
        !          8099:                      is returned, the error is recorded in err and diagnostic 
        !          8100:                      information can be obtained by calling OCIErrorGet().
        !          8101: 
        !          8102:         key(OUT):    The 'OCIThreadKey' in which to create the new key.
        !          8103: 
        !          8104:         destFn(IN):  The destructor for the key.  NULL is permitted.
        !          8105: 
        !          8106:     Returns
        !          8107: 
        !          8108:       OCI_SUCCESS, OCI_ERROR or OCI_INVALID_HANDLE.
        !          8109: 
        !          8110:     Notes
        !          8111: 
        !          8112:       Once this function executes successfully, a pointer to an allocated and 
        !          8113:       initialized key is return.  That key can be used with 'OCIThreadKeyGet()'
        !          8114:       and 'OCIThreadKeySet()'.  The initial value of the key will be 'NULL' for
        !          8115:       all threads.
        !          8116: 
        !          8117:       It is illegal for this function to be called more than once to create the
        !          8118:       same key (i.e., to be called more than once with the same value for the
        !          8119:       'key' parameter).
        !          8120: 
        !          8121:       If the 'destFn' parameter is not NULL, the routine pointed to by 'destFn'
        !          8122:       will be called whenever a thread that has a non-NULL value for the key
        !          8123:       terminates.  The routine will be called with one parameter.  The
        !          8124:       parameter will be the key's value for the thread at the time at which the
        !          8125:       thread terminated.
        !          8126:       If the key does not need a destructor function, pass NULL for 'destFn'.
        !          8127: 
        !          8128: 
        !          8129:   OCIThreadKeyDestroy - OCIThread KeY DESTROY
        !          8130:   -------------------------------------------
        !          8131: 
        !          8132:    Description
        !          8133: 
        !          8134:      Destroy and deallocate the key pointed to by 'key'.
        !          8135: 
        !          8136:     Prototype
        !          8137: 
        !          8138:       sword OCIThreadKeyDestroy(dvoid *hndl, OCIError *err, 
        !          8139:                                 OCIThreadKey **key);
        !          8140: 
        !          8141:         hndl(IN/OUT): The OCI environment or session handle.
        !          8142: 
        !          8143:         err(IN/OUT): The OCI error handle.  If there is an error and OCI_ERROR
        !          8144:                      is returned, the error is recorded in err and diagnostic 
        !          8145:                      information can be obtained by calling OCIErrorGet().
        !          8146: 
        !          8147:         key(IN/OUT):  The 'OCIThreadKey' in which to destroy the key.
        !          8148:  
        !          8149:     Returns
        !          8150: 
        !          8151:       OCI_SUCCESS, OCI_ERROR or OCI_INVALID_HANDLE.
        !          8152: 
        !          8153:     Notes
        !          8154: 
        !          8155:       This is different from the destructor function callback passed to the
        !          8156:       key create routine.  This new destroy function 'OCIThreadKeyDestroy' is 
        !          8157:       used to terminate any resources OCI THREAD acquired when it created 
        !          8158:       'key'.  [The 'OCIThreadKeyDestFunc' callback type is a key VALUE 
        !          8159:       destructor; it does in no way operate on the key itself.]
        !          8160: 
        !          8161:       This must be called once the user has finished using the key.  Not
        !          8162:       calling the key destroy function may result in memory leaks.
        !          8163: 
        !          8164: 
        !          8165: 
        !          8166: 
        !          8167: 1.2.2.2 Thread Key operations
        !          8168: -------------------------------
        !          8169: 
        !          8170:   OCIThreadKeyGet - OCIThread KeY Get value
        !          8171:   -----------------------------------------
        !          8172: 
        !          8173:     Description
        !          8174: 
        !          8175:       This gets the calling thread's current value for a key.
        !          8176: 
        !          8177:     Prototype
        !          8178: 
        !          8179:       sword OCIThreadKeyGet(dvoid *hndl, OCIError *err, OCIThreadKey *key,
        !          8180:                             dvoid **pValue);
        !          8181: 
        !          8182:         hndl(IN/OUT): The OCI environment or session handle.
        !          8183: 
        !          8184:         err(IN/OUT): The OCI error handle.  If there is an error and OCI_ERROR
        !          8185:                      is returned, the error is recorded in err and diagnostic 
        !          8186:                      information can be obtained by calling OCIErrorGet().
        !          8187: 
        !          8188:         key(IN):          The key.
        !          8189: 
        !          8190:         pValue(IN/OUT):   The location in which to place the thread-specific
        !          8191:                           key value.
        !          8192: 
        !          8193:     Returns
        !          8194: 
        !          8195:       OCI_SUCCESS, OCI_ERROR or OCI_INVALID_HANDLE.
        !          8196: 
        !          8197:     Notes
        !          8198: 
        !          8199:       It is illegal to use this function on a key that has not been created
        !          8200:       using 'OCIThreadKeyInit()'.
        !          8201: 
        !          8202:       If the calling thread has not yet assigned a value to the key, 'NULL' is
        !          8203:       placed in the location pointed to by 'pValue'.
        !          8204: 
        !          8205: 
        !          8206:   OCIThreadKeySet - OCIThread KeY Set value
        !          8207:   -----------------------------------------
        !          8208: 
        !          8209:     Description
        !          8210: 
        !          8211:       This sets the calling thread's value for a key.
        !          8212: 
        !          8213:     Prototype
        !          8214: 
        !          8215:       sword OCIThreadKeySet(dvoid *hndl, OCIError *err, OCIThreadKey *key,
        !          8216:                             dvoid *value);
        !          8217: 
        !          8218:         hndl(IN/OUT): The OCI environment or session handle.
        !          8219: 
        !          8220:         err(IN/OUT): The OCI error handle.  If there is an error and OCI_ERROR
        !          8221:                      is returned, the error is recorded in err and diagnostic 
        !          8222:                      information can be obtained by calling OCIErrorGet().
        !          8223: 
        !          8224:         key(IN/OUT): The key.
        !          8225: 
        !          8226:         value(IN):   The thread-specific value to set in the key.
        !          8227: 
        !          8228:     Returns
        !          8229: 
        !          8230:       OCI_SUCCESS, OCI_ERROR or OCI_INVALID_HANDLE.
        !          8231: 
        !          8232:     Notes
        !          8233: 
        !          8234:       It is illegal to use this function on a key that has not been created
        !          8235:       using 'OCIThreadKeyInit()'.
        !          8236: 
        !          8237: 1.2.2.3  Thread Id
        !          8238: --------------------
        !          8239: 
        !          8240:   OCIThreadIdInit - OCIThread Thread Id INITialize
        !          8241:   --------------------------------------------------
        !          8242: 
        !          8243:     Description
        !          8244: 
        !          8245:       Allocate and initialize the thread id 'tid'.
        !          8246: 
        !          8247:     Prototype
        !          8248: 
        !          8249:       sword OCIThreadIdInit(dvoid *hndl, OCIError *err, OCIThreadId **tid);
        !          8250: 
        !          8251:         hndl(IN/OUT): The OCI environment or session handle.
        !          8252: 
        !          8253:         err(IN/OUT): The OCI error handle.  If there is an error and OCI_ERROR
        !          8254:                      is returned, the error is recorded in err and diagnostic 
        !          8255:                      information can be obtained by calling OCIErrorGet().
        !          8256: 
        !          8257:         tid (OUT):   Pointer to the thread ID to initialize.
        !          8258: 
        !          8259:     Returns
        !          8260: 
        !          8261:       OCI_SUCCESS, OCI_ERROR or OCI_INVALID_HANDLE.
        !          8262: 
        !          8263: 
        !          8264:   OCIThreadIdDestroy - OCIThread Thread Id DESTROY
        !          8265:   --------------------------------------------------
        !          8266: 
        !          8267:     Description
        !          8268: 
        !          8269:       Destroy and deallocate the thread id 'tid'.
        !          8270: 
        !          8271:     Prototype
        !          8272: 
        !          8273:       sword OCIThreadIdDestroy(dvoid *hndl, OCIError *err, OCIThreadId **tid);
        !          8274: 
        !          8275:         hndl(IN/OUT): The OCI environment or session handle.
        !          8276: 
        !          8277:         err(IN/OUT): The OCI error handle.  If there is an error and OCI_ERROR
        !          8278:                      is returned, the error is recorded in err and diagnostic 
        !          8279:                      information can be obtained by calling OCIErrorGet().
        !          8280: 
        !          8281:         tid(IN/OUT):        Pointer to the thread ID to destroy.
        !          8282: 
        !          8283:     Returns
        !          8284: 
        !          8285:       OCI_SUCCESS, OCI_ERROR or OCI_INVALID_HANDLE.
        !          8286: 
        !          8287:     Note
        !          8288: 
        !          8289:       'tid' should be initialized by OCIThreadIdInit().
        !          8290: 
        !          8291: 
        !          8292:   OCIThreadIdSet - OCIThread Thread Id Set
        !          8293:   -----------------------------------------
        !          8294: 
        !          8295:     Description
        !          8296: 
        !          8297:       This sets one 'OCIThreadId' to another.
        !          8298: 
        !          8299:     Prototype
        !          8300: 
        !          8301:       sword OCIThreadIdSet(dvoid *hndl, OCIError *err, 
        !          8302:                            OCIThreadId *tidDest,
        !          8303:                            OCIThreadId *tidSrc);
        !          8304: 
        !          8305:         hndl(IN/OUT): The OCI environment or session handle.
        !          8306: 
        !          8307:         err(IN/OUT): The OCI error handle.  If there is an error and OCI_ERROR
        !          8308:                      is returned, the error is recorded in err and diagnostic 
        !          8309:                      information can be obtained by calling OCIErrorGet().
        !          8310: 
        !          8311:         tidDest(OUT):   This should point to the location of the 'OCIThreadId'
        !          8312:                         to be set to.
        !          8313: 
        !          8314:         tidSrc(IN):     This should point to the 'OCIThreadId' to set from.
        !          8315: 
        !          8316:     Returns
        !          8317: 
        !          8318:       OCI_SUCCESS, OCI_ERROR or OCI_INVALID_HANDLE.
        !          8319: 
        !          8320:     Notes
        !          8321: 
        !          8322:       'tid' should be initialized by OCIThreadIdInit().
        !          8323: 
        !          8324: 
        !          8325:   OCIThreadIdSetNull - OCIThread Thread Id Set Null
        !          8326:   ---------------------------------------------------------
        !          8327: 
        !          8328:     Description
        !          8329: 
        !          8330:       This sets the NULL thread ID to a given 'OCIThreadId'.
        !          8331: 
        !          8332:     Prototype
        !          8333: 
        !          8334:       sword OCIThreadIdSetNull(dvoid *hndl, OCIError *err,
        !          8335:                                OCIThreadId *tid);
        !          8336: 
        !          8337:         hndl(IN/OUT): The OCI environment or session handle.
        !          8338: 
        !          8339:         err(IN/OUT): The OCI error handle.  If there is an error, it is 
        !          8340:                      recorded in err and this function returns OCI_ERROR.  
        !          8341:                      Diagnostic information can be obtained by calling 
        !          8342:                      OCIErrorGet().
        !          8343: 
        !          8344:         tid(OUT):    This should point to the 'OCIThreadId' in which to put
        !          8345:                      the NULL thread ID.
        !          8346: 
        !          8347:     Returns
        !          8348: 
        !          8349:       OCI_SUCCESS, OCI_ERROR or OCI_INVALID_HANDLE.
        !          8350: 
        !          8351:     Notes
        !          8352: 
        !          8353:       'tid' should be initialized by OCIThreadIdInit().
        !          8354: 
        !          8355: 
        !          8356:   OCIThreadIdGet - OCIThread Thread Id Get
        !          8357:   ------------------------------------------
        !          8358: 
        !          8359:     Description
        !          8360: 
        !          8361:       This retrieves the 'OCIThreadId' of the thread in which it is called.
        !          8362: 
        !          8363:     Prototype
        !          8364: 
        !          8365:       sword OCIThreadIdGet(dvoid *hndl, OCIError *err,
        !          8366:                            OCIThreadId *tid);
        !          8367: 
        !          8368:         hndl(IN/OUT): The OCI environment or session handle.
        !          8369: 
        !          8370:         err(IN/OUT): The OCI error handle.  If there is an error and OCI_ERROR
        !          8371:                      is returned, the error is recorded in err and diagnostic 
        !          8372:                      information can be obtained by calling OCIErrorGet().
        !          8373: 
        !          8374:         tid(OUT):    This should point to the location in which to place the
        !          8375:                      ID of the calling thread.
        !          8376: 
        !          8377:     Returns
        !          8378: 
        !          8379:       OCI_SUCCESS, OCI_ERROR or OCI_INVALID_HANDLE.
        !          8380: 
        !          8381:     Notes
        !          8382: 
        !          8383:       'tid' should be initialized by OCIThreadIdInit().
        !          8384: 
        !          8385:       When OCIThread is used in a single-threaded environment,
        !          8386:       OCIThreadIdGet() will always place the same value in the location
        !          8387:       pointed to by 'tid'.  The exact value itself is not important.  The
        !          8388:       important thing is that it is not the same as the NULL thread ID and
        !          8389:       that it is always the same value.
        !          8390: 
        !          8391: 
        !          8392:   OCIThreadIdSame - OCIThread Thread Ids Same?
        !          8393:   ----------------------------------------------
        !          8394: 
        !          8395:     Description
        !          8396: 
        !          8397:       This determines whether or not two 'OCIThreadId's represent the same
        !          8398:       thread.
        !          8399: 
        !          8400:     Prototype
        !          8401: 
        !          8402:       sword OCIThreadIdSame(dvoid *hndl, OCIError *err,
        !          8403:                             OCIThreadId *tid1, OCIThreadId *tid2,
        !          8404:                             boolean *result);
        !          8405: 
        !          8406:         hndl(IN/OUT): The OCI environment or session handle.
        !          8407: 
        !          8408:         err(IN/OUT): The OCI error handle.  If there is an error and OCI_ERROR
        !          8409:                      is returned, the error is recorded in err and diagnostic 
        !          8410:                      information can be obtained by calling OCIErrorGet().
        !          8411: 
        !          8412:         tid1(IN):   Pointer to the first 'OCIThreadId'.
        !          8413: 
        !          8414:         tid2(IN):   Pointer to the second 'OCIThreadId'.
        !          8415:        
        !          8416:        result(IN/OUT): Pointer to the result.
        !          8417: 
        !          8418:     Returns
        !          8419: 
        !          8420:       OCI_SUCCESS, OCI_ERROR or OCI_INVALID_HANDLE.
        !          8421: 
        !          8422:     Notes
        !          8423: 
        !          8424:       If 'tid1' and 'tid2' represent the same thread, 'result' is set to TRUE.
        !          8425:       Otherwise, 'result' is set to FALSE.
        !          8426: 
        !          8427:       'result' is set to TRUE if both 'tid1' and 'tid2' are the NULL thread ID.
        !          8428: 
        !          8429:       'ti1d' and 'tid2' should be initialized by OCIThreadIdInit().
        !          8430: 
        !          8431: 
        !          8432:   OCIThreadIdNull - OCIThread Thread Id NULL?
        !          8433:   ---------------------------------------------
        !          8434: 
        !          8435:     Description
        !          8436: 
        !          8437:       This determines whether or not a given 'OCIThreadId' is the NULL thread
        !          8438:       ID.
        !          8439: 
        !          8440:     Prototype
        !          8441: 
        !          8442:       sword OCIThreadIdNull(dvoid *hndl, OCIError *err,
        !          8443:                             OCIThreadId *tid,
        !          8444:                             boolean *result);
        !          8445: 
        !          8446:         hndl(IN/OUT): The OCI environment or session handle.
        !          8447: 
        !          8448:         err(IN/OUT): The OCI error handle.  If there is an error and OCI_ERROR
        !          8449:                      is returned, the error is recorded in err and diagnostic 
        !          8450:                      information can be obtained by calling OCIErrorGet().
        !          8451: 
        !          8452:         tid(IN):    Pointer to the 'OCIThreadId' to check.
        !          8453: 
        !          8454:        result(IN/OUT): Pointer to the result.
        !          8455: 
        !          8456:     Returns
        !          8457: 
        !          8458:       OCI_SUCCESS, OCI_ERROR or OCI_INVALID_HANDLE.
        !          8459: 
        !          8460:     Notes
        !          8461: 
        !          8462:       If 'tid' is the NULL thread ID, 'result' is set to TRUE.  Otherwise, 
        !          8463:       'result' is set to FALSE.
        !          8464: 
        !          8465:       'tid' should be initialized by OCIThreadIdInit().
        !          8466: 
        !          8467: 
        !          8468: 1.3 Active Threading Primitives
        !          8469: =================================
        !          8470: 
        !          8471: The active threading primitives deal with the manipulation of actual
        !          8472: threads.  Because the specifications of most of these primitives require
        !          8473: that it be possible to have multiple threads, they work correctly only in
        !          8474: the enabled OCIThread; In the disabled OCIThread, they always return
        !          8475: failure.  The exception is OCIThreadHandleGet(); it may be called in a 
        !          8476: single-threaded environment, in which case it will have no effect.
        !          8477: 
        !          8478: Active primitives should only be called by code running in a multi-threaded
        !          8479: environment.  You can call OCIThreadIsMulti() to determine whether the 
        !          8480: environment is multi-threaded or single-threaded.
        !          8481: 
        !          8482: 
        !          8483: 1.3.1  Types
        !          8484: --------------
        !          8485: 
        !          8486: 1.3.1.1    OCIThreadHandle - OCIThread Thread Handle
        !          8487: ------------------------------------------------------
        !          8488: 
        !          8489:   Type 'OCIThreadHandle' is used to manipulate a thread in the active
        !          8490:   primitives:  OCIThreadJoin()and OCIThreadClose().  A thread handle opened by
        !          8491:   OCIThreadCreate() must be closed in a matching call to
        !          8492:   OCIThreadClose().  A thread handle is invalid after the call to
        !          8493:   OCIThreadClose().
        !          8494: 
        !          8495:   The distinction between a thread ID and a thread handle in OCIThread usage
        !          8496:   follows the distinction between the thread ID and the thread handle on
        !          8497:   Windows NT.  On many platforms, the underlying native types are the same.
        !          8498: 
        !          8499: 
        !          8500: 1.3.2  Functions
        !          8501: ------------------
        !          8502: 
        !          8503:   OCIThreadHndInit - OCIThread HaNDle Initialize
        !          8504:   ----------------------------------------------
        !          8505: 
        !          8506:     Description
        !          8507: 
        !          8508:       Allocate and initialize the thread handle.
        !          8509: 
        !          8510:     Prototype
        !          8511: 
        !          8512:       sword OCIThreadHndInit(dvoid *hndl, OCIError *err, 
        !          8513:                              OCIThreadHandle **thnd);
        !          8514: 
        !          8515:         hndl(IN/OUT): The OCI environment or session handle.
        !          8516: 
        !          8517:         err(IN/OUT): The OCI error handle.  If there is an error and OCI_ERROR
        !          8518:                      is returned, the error is recorded in err and diagnostic 
        !          8519:                      information can be obtained by calling OCIErrorGet().
        !          8520: 
        !          8521:         thnd(OUT):   The address of pointer to the thread handle to initialize.
        !          8522: 
        !          8523:     Returns
        !          8524: 
        !          8525:       OCI_SUCCESS, OCI_ERROR or OCI_INVALID_HANDLE.
        !          8526: 
        !          8527: 
        !          8528:   OCIThreadHndDestroy - OCIThread HaNDle Destroy
        !          8529:   ----------------------------------------------
        !          8530: 
        !          8531:     Description
        !          8532: 
        !          8533:       Destroy and deallocate the thread handle.
        !          8534: 
        !          8535:     Prototype
        !          8536: 
        !          8537:       sword OCIThreadHndDestroy(dvoid *hndl, OCIError *err, 
        !          8538:                                 OCIThreadHandle **thnd);
        !          8539: 
        !          8540:         hndl(IN/OUT): The OCI environment or session handle.
        !          8541: 
        !          8542:         err(IN/OUT): The OCI error handle.  If there is an error and OCI_ERROR
        !          8543:                      is returned, the error is recorded in err and diagnostic 
        !          8544:                      information can be obtained by calling OCIErrorGet().
        !          8545: 
        !          8546:         thnd(IN/OUT):  The address of pointer to the thread handle to destroy.
        !          8547: 
        !          8548:     Returns
        !          8549: 
        !          8550:       OCI_SUCCESS, OCI_ERROR or OCI_INVALID_HANDLE.
        !          8551: 
        !          8552:     Notes
        !          8553: 
        !          8554:       'thnd' should be initialized by OCIThreadHndInit().
        !          8555: 
        !          8556: 
        !          8557:   OCIThreadCreate - OCIThread Thread Create
        !          8558:   -----------------------------------------
        !          8559: 
        !          8560:     Description
        !          8561: 
        !          8562:       This creates a new thread.
        !          8563: 
        !          8564:     Prototype
        !          8565: 
        !          8566:       sword OCIThreadCreate(dvoid *hndl, OCIError *err,
        !          8567:                             void (*start)(dvoid *), dvoid *arg,
        !          8568:                             OCIThreadId *tid, OCIThreadHandle *tHnd);
        !          8569: 
        !          8570:         hndl(IN/OUT): The OCI environment or session handle.
        !          8571: 
        !          8572:         err(IN/OUT): The OCI error handle.  If there is an error and OCI_ERROR
        !          8573:                      is returned, the error is recorded in err and diagnostic 
        !          8574:                      information can be obtained by calling OCIErrorGet().
        !          8575: 
        !          8576:         start(IN):    The function in which the new thread should begin
        !          8577:                       execution.
        !          8578: 
        !          8579:         arg(IN):      The argument to give the function pointed to by 'start'.
        !          8580: 
        !          8581:         tid(IN/OUT):  If not NULL, gets the ID for the new thread.
        !          8582: 
        !          8583:         tHnd(IN/OUT): If not NULL, gets the handle for the new thread.
        !          8584: 
        !          8585:     Returns
        !          8586: 
        !          8587:       OCI_SUCCESS, OCI_ERROR or OCI_INVALID_HANDLE.
        !          8588: 
        !          8589:     Notes
        !          8590: 
        !          8591:       The new thread will start by executing a call to the function pointed
        !          8592:       to by 'start' with the argument given by 'arg'.  When that function
        !          8593:       returns, the new thread will terminate.  The function should not
        !          8594:       return a value and should accept one parameter, a 'dvoid *'.
        !          8595: 
        !          8596:       The call to OCIThreadCreate() must be matched by a call to
        !          8597:       OCIThreadClose() if and only if tHnd is non-NULL.
        !          8598: 
        !          8599:       If tHnd is NULL, a thread ID placed in *tid will not be valid in the
        !          8600:       calling thread because the timing of the spawned thread's termination
        !          8601:       is unknown.
        !          8602: 
        !          8603:       'tid' should be initialized by OCIThreadIdInit().
        !          8604: 
        !          8605:       'thnd' should be initialized by OCIThreadHndInit().
        !          8606: 
        !          8607: 
        !          8608: 
        !          8609:   OCIThreadJoin - OCIThread Thread Join
        !          8610:   -------------------------------------
        !          8611: 
        !          8612:     Description
        !          8613: 
        !          8614:       This function allows the calling thread to 'join' with another thread.
        !          8615:       It blocks the caller until the specified thread terminates.
        !          8616: 
        !          8617:     Prototype
        !          8618: 
        !          8619:       sword OCIThreadJoin(dvoid *hndl, OCIError *err, OCIThreadHandle *tHnd);
        !          8620: 
        !          8621:         hndl(IN/OUT): The OCI environment or session handle.
        !          8622: 
        !          8623:         err(IN/OUT): The OCI error handle.  If there is an error and OCI_ERROR
        !          8624:                      is returned, the error is recorded in err and diagnostic 
        !          8625:                      information can be obtained by calling OCIErrorGet().
        !          8626: 
        !          8627:         tHnd(IN):    The 'OCIThreadHandle' of the thread to join with.
        !          8628: 
        !          8629:     Returns
        !          8630: 
        !          8631:       OCI_SUCCESS, OCI_ERROR or OCI_INVALID_HANDLE.
        !          8632: 
        !          8633:     Notes
        !          8634: 
        !          8635:       'thnd' should be initialized by OCIThreadHndInit().
        !          8636: 
        !          8637:       The result of multiple threads all trying to join with the same thread is
        !          8638:       undefined.
        !          8639: 
        !          8640: 
        !          8641:   OCIThreadClose - OCIThread Thread Close
        !          8642:   ---------------------------------------
        !          8643: 
        !          8644:    Description
        !          8645: 
        !          8646:      This function should be called to close a thread handle.
        !          8647: 
        !          8648:    Prototype
        !          8649: 
        !          8650:      sword OCIThreadClose(dvoid *hndl, OCIError *err, OCIThreadHandle *tHnd);
        !          8651: 
        !          8652:         hndl(IN/OUT): The OCI environment or session handle.
        !          8653: 
        !          8654:         err(IN/OUT): The OCI error handle.  If there is an error and OCI_ERROR
        !          8655:                      is returned, the error is recorded in err and diagnostic 
        !          8656:                      information can be obtained by calling OCIErrorGet().
        !          8657: 
        !          8658:         tHnd(IN/OUT):    The OCIThread thread handle to close.
        !          8659: 
        !          8660:    Returns
        !          8661: 
        !          8662:       OCI_SUCCESS, OCI_ERROR or OCI_INVALID_HANDLE.
        !          8663: 
        !          8664:    Notes
        !          8665: 
        !          8666:       'thnd' should be initialized by OCIThreadHndInit().
        !          8667: 
        !          8668:       Both thread handle and the thread ID that was returned by the same call
        !          8669:       to OCIThreadCreate() are invalid after the call to OCIThreadClose().
        !          8670: 
        !          8671: 
        !          8672: 
        !          8673:   OCIThreadHandleGet - OCIThread Thread Get Handle
        !          8674:   ------------------------------------------------
        !          8675: 
        !          8676:     Description
        !          8677: 
        !          8678:       Retrieve the 'OCIThreadHandle' of the thread in which it is called.
        !          8679: 
        !          8680:     Prototype
        !          8681: 
        !          8682:       sword OCIThreadHandleGet(dvoid *hndl, OCIError *err,
        !          8683:                                OCIThreadHandle *tHnd);
        !          8684: 
        !          8685:         hndl(IN/OUT): The OCI environment or session handle.
        !          8686: 
        !          8687:         err(IN/OUT): The OCI error handle.  If there is an error and OCI_ERROR
        !          8688:                      is returned, the error is recorded in err and diagnostic 
        !          8689:                      information can be obtained by calling OCIErrorGet().
        !          8690: 
        !          8691:         tHnd(IN/OUT):      If not NULL, the location to place the thread
        !          8692:                            handle for the thread.
        !          8693: 
        !          8694:      Returns
        !          8695: 
        !          8696:       OCI_SUCCESS, OCI_ERROR or OCI_INVALID_HANDLE.
        !          8697: 
        !          8698:     Notes
        !          8699: 
        !          8700:       'thnd' should be initialized by OCIThreadHndInit().   
        !          8701: 
        !          8702:       The thread handle 'tHnd' retrieved by this function must be closed 
        !          8703:       with OCIThreadClose() and destroyed by OCIThreadHndDestroy() after it
        !          8704:       is used.
        !          8705: 
        !          8706: 
        !          8707: 
        !          8708: 
        !          8709: 1.4 Using OCIThread
        !          8710: =====================
        !          8711: 
        !          8712: This section summarizes some of the more important details relating to the use
        !          8713: of OCIThread.
        !          8714: 
        !          8715:   * Process initialization
        !          8716: 
        !          8717:     OCIThread only requires that the process initialization function
        !          8718:     ('OCIThreadProcessInit()') be called when OCIThread is being used in a
        !          8719:     multi-threaded application.  Failing to call 'OCIThreadProcessInit()' in
        !          8720:     a single-threaded application is not an error.
        !          8721: 
        !          8722:   * OCIThread initialization
        !          8723: 
        !          8724:     Separate calls to 'OCIThreadInit()' will all return the same OCIThread
        !          8725:     context.
        !          8726: 
        !          8727:     Also, remember that each call to 'OCIThreadInit()' must eventually be
        !          8728:     matched by a call to 'OCIThreadTerm()'.
        !          8729: 
        !          8730:   * Active vs. Passive Threading primitives
        !          8731: 
        !          8732:     OCIThread client code written without using any active primitives can be
        !          8733:     compiled and used without change on both single-threaded and
        !          8734:     multi-threaded platforms.
        !          8735: 
        !          8736:     OCIThread client code written using active primitives will only work
        !          8737:     correctly on multi-threaded platforms.  In order to write a version of the
        !          8738:     same application to run on single-threaded platform, it is necessary to 
        !          8739:     branch the your code, whether by branching versions of the source file or 
        !          8740:     by branching at runtime with the OCIThreadIsMulti() call.
        !          8741: 
        !          8742: ******************************************************************************/
        !          8743: 
        !          8744: /*****************************************************************************
        !          8745:                          ACTUAL PROTOTYPE DECLARATIONS
        !          8746: ******************************************************************************/
        !          8747: 
        !          8748: void OCIThreadProcessInit();
        !          8749: 
        !          8750: sword OCIThreadInit(dvoid *hndl, OCIError *err);
        !          8751: 
        !          8752: sword OCIThreadTerm(dvoid *hndl, OCIError *err);
        !          8753: 
        !          8754: boolean OCIThreadIsMulti();
        !          8755: 
        !          8756: sword OCIThreadMutexInit(dvoid *hndl, OCIError *err,  
        !          8757:                          OCIThreadMutex **mutex); 
        !          8758: 
        !          8759: sword OCIThreadMutexDestroy(dvoid *hndl, OCIError *err, 
        !          8760:                             OCIThreadMutex **mutex);
        !          8761: 
        !          8762: sword OCIThreadMutexAcquire(dvoid *hndl, OCIError *err,
        !          8763:                             OCIThreadMutex *mutex);
        !          8764: 
        !          8765: sword OCIThreadMutexRelease(dvoid *hndl, OCIError *err,
        !          8766:                             OCIThreadMutex *mutex);
        !          8767: 
        !          8768: sword OCIThreadKeyInit(dvoid *hndl, OCIError *err, OCIThreadKey **key,
        !          8769:                        OCIThreadKeyDestFunc destFn);
        !          8770: 
        !          8771: sword OCIThreadKeyDestroy(dvoid *hndl, OCIError *err, 
        !          8772:                           OCIThreadKey **key);
        !          8773: 
        !          8774: sword OCIThreadKeyGet(dvoid *hndl, OCIError *err, OCIThreadKey *key,
        !          8775:                       dvoid **pValue);
        !          8776: 
        !          8777: sword OCIThreadKeySet(dvoid *hndl, OCIError *err, OCIThreadKey *key,
        !          8778:                       dvoid *value);
        !          8779: 
        !          8780: sword OCIThreadIdInit(dvoid *hndl, OCIError *err, OCIThreadId **tid);
        !          8781: 
        !          8782: sword OCIThreadIdDestroy(dvoid *hndl, OCIError *err, OCIThreadId **tid);
        !          8783: 
        !          8784: sword OCIThreadIdSet(dvoid *hndl, OCIError *err, 
        !          8785:                      OCIThreadId *tidDest, OCIThreadId *tidSrc);
        !          8786: 
        !          8787: sword OCIThreadIdSetNull(dvoid *hndl, OCIError *err, OCIThreadId *tid);
        !          8788: 
        !          8789: sword OCIThreadIdGet(dvoid *hndl, OCIError *err, OCIThreadId *tid);
        !          8790: 
        !          8791: sword OCIThreadIdSame(dvoid *hndl, OCIError *err,
        !          8792:                       OCIThreadId *tid1, OCIThreadId *tid2,
        !          8793:                       boolean *result);
        !          8794: 
        !          8795: sword OCIThreadIdNull(dvoid *hndl, OCIError *err,
        !          8796:                       OCIThreadId *tid, boolean *result);
        !          8797: 
        !          8798: sword OCIThreadHndInit(dvoid *hndl, OCIError *err, OCIThreadHandle **thnd);
        !          8799: 
        !          8800: sword OCIThreadHndDestroy(dvoid *hndl, OCIError *err, OCIThreadHandle **thnd);
        !          8801: 
        !          8802: sword OCIThreadCreate(dvoid *hndl, OCIError *err,
        !          8803:                       void (*start)(dvoid *), dvoid *arg,
        !          8804:                       OCIThreadId *tid, OCIThreadHandle *tHnd);
        !          8805: 
        !          8806: sword OCIThreadJoin(dvoid *hndl, OCIError *err, OCIThreadHandle *tHnd);
        !          8807: 
        !          8808: sword OCIThreadClose(dvoid *hndl, OCIError *err, OCIThreadHandle *tHnd);
        !          8809: 
        !          8810: sword OCIThreadHandleGet(dvoid *hndl, OCIError *err, OCIThreadHandle *tHnd);
        !          8811: /*----------------- End OCI Thread interface Extensions ---------------------*/
        !          8812: 
        !          8813: /*--------------- Begin OCI Client Notification Interfaces ------------------*/
        !          8814: 
        !          8815: typedef ub4 (*OCISubscriptionNotify)(dvoid *ctx, OCISubscription *subscrhp, 
        !          8816:                                     dvoid *pay, ub4 payl, 
        !          8817:                                     dvoid *desc, ub4 mode);
        !          8818: 
        !          8819: sword OCISubscriptionRegister(OCISvcCtx *svchp, OCISubscription **subscrhpp, 
        !          8820:                              ub2 count, OCIError *errhp, ub4 mode);
        !          8821: 
        !          8822: 
        !          8823: sword OCISubscriptionPost(OCISvcCtx *svchp, OCISubscription **subscrhpp, 
        !          8824:                              ub2 count, OCIError *errhp, ub4 mode);
        !          8825: 
        !          8826: sword OCISubscriptionUnRegister(OCISvcCtx *svchp, OCISubscription *subscrhp, 
        !          8827:                              OCIError *errhp, ub4 mode);
        !          8828: 
        !          8829: sword OCISubscriptionDisable(OCISubscription *subscrhp, 
        !          8830:                           OCIError *errhp, ub4 mode);
        !          8831: 
        !          8832: sword OCISubscriptionEnable(OCISubscription *subscrhp, 
        !          8833:                          OCIError *errhp, ub4 mode);
        !          8834: 
        !          8835: /*------------------- End OCI Publish/Subscribe Interfaces ------------------*/
        !          8836: 
        !          8837: /*----------------- Extensions to Datetime interfaces -----------------------*/
        !          8838: /*--------------------- Actual Prototypes -----------------------------------*/
        !          8839: sword OCIDateTimeGetTime(dvoid *hndl, OCIError *err, OCIDateTime *datetime, 
        !          8840:                         ub1 *hr, ub1 *mm, ub1 *ss, ub4 *fsec);
        !          8841: 
        !          8842: sword OCIDateTimeGetDate(dvoid *hndl, OCIError *err,  CONST OCIDateTime *date, 
        !          8843:                 sb2 *yr, ub1 *mnth, ub1 *dy );
        !          8844: 
        !          8845: sword OCIDateTimeGetTimeZoneOffset(dvoid *hndl,OCIError *err,
        !          8846:                  CONST OCIDateTime   *datetime,sb1 *hr,sb1 *mm);
        !          8847: 
        !          8848: sword OCIDateTimeConstruct(dvoid  *hndl,OCIError *err,OCIDateTime *datetime,
        !          8849:                sb2 yr,ub1 mnth,ub1 dy,ub1 hr,ub1 mm,ub1 ss,ub4 fsec,
        !          8850:                OraText  *timezone,size_t timezone_length);
        !          8851: 
        !          8852: sword OCIDateTimeSysTimeStamp(dvoid *hndl, OCIError *err, 
        !          8853:                              OCIDateTime *sys_date );
        !          8854: 
        !          8855: sword OCIDateTimeAssign(dvoid *hndl, OCIError *err, CONST OCIDateTime *from, 
        !          8856:                       OCIDateTime *to);
        !          8857: 
        !          8858: sword OCIDateTimeToText(dvoid *hndl, OCIError *err, CONST OCIDateTime *date, 
        !          8859:                         CONST OraText *fmt, ub1 fmt_length, ub1 fsprec, 
        !          8860:                         CONST OraText *lang_name, size_t lang_length, 
        !          8861:                         size_t *buf_size, OraText *buf );
        !          8862: 
        !          8863: sword OCIDateTimeFromText(dvoid *hndl, OCIError *err, CONST OraText *date_str, 
        !          8864:              size_t dstr_length, CONST OraText *fmt, ub1 fmt_length,
        !          8865:              CONST OraText *lang_name, size_t lang_length, OCIDateTime *date );
        !          8866: 
        !          8867: sword OCIDateTimeCompare(dvoid *hndl, OCIError *err, CONST OCIDateTime *date1, 
        !          8868:                      CONST OCIDateTime *date2,  sword *result );
        !          8869: 
        !          8870: sword OCIDateTimeCheck(dvoid *hndl, OCIError *err, CONST OCIDateTime *date, 
        !          8871:                 ub4 *valid );
        !          8872: 
        !          8873: sword OCIDateTimeConvert(dvoid *hndl, OCIError *err, OCIDateTime *indate,
        !          8874:                                OCIDateTime *outdate);
        !          8875: 
        !          8876: sword OCIDateTimeSubtract(dvoid *hndl, OCIError *err, OCIDateTime *indate1, 
        !          8877:                OCIDateTime *indate2,    OCIInterval *inter);
        !          8878: 
        !          8879: sword OCIDateTimeIntervalAdd(dvoid *hndl, OCIError *err, OCIDateTime *datetime,
        !          8880:         OCIInterval *inter, OCIDateTime *outdatetime);
        !          8881: 
        !          8882: sword OCIDateTimeIntervalSub(dvoid *hndl, OCIError *err, OCIDateTime *datetime,
        !          8883:         OCIInterval *inter, OCIDateTime *outdatetime);
        !          8884: 
        !          8885: sword OCIIntervalSubtract(dvoid *hndl, OCIError *err, OCIInterval *minuend, 
        !          8886:                            OCIInterval *subtrahend, OCIInterval *result );
        !          8887: 
        !          8888: sword OCIIntervalAdd(dvoid *hndl, OCIError *err, OCIInterval *addend1, 
        !          8889:                        OCIInterval *addend2, OCIInterval *result );
        !          8890: 
        !          8891: sword OCIIntervalMultiply(dvoid *hndl, OCIError *err, CONST OCIInterval *inter,
        !          8892:                        OCINumber *nfactor, OCIInterval *result );
        !          8893: 
        !          8894: sword OCIIntervalDivide(dvoid *hndl, OCIError *err, OCIInterval *dividend, 
        !          8895:                OCINumber *divisor, OCIInterval *result );
        !          8896: 
        !          8897: sword OCIIntervalCompare(dvoid *hndl, OCIError *err, OCIInterval *inter1, 
        !          8898:                        OCIInterval *inter2, sword *result );
        !          8899: 
        !          8900: sword OCIIntervalFromNumber(dvoid *hndl, OCIError *err, OCIInterval *inter, 
        !          8901:                        OCINumber *number);
        !          8902: 
        !          8903: sword OCIIntervalFromText( dvoid *hndl, OCIError *err, CONST OraText *inpstr, 
        !          8904:                size_t str_len, OCIInterval *result );
        !          8905: 
        !          8906: sword OCIIntervalToText( dvoid *hndl, OCIError *err, CONST OCIInterval *inter,
        !          8907:                          ub1 lfprec, ub1 fsprec, 
        !          8908:                        OraText *buffer, size_t buflen, size_t *resultlen );
        !          8909: 
        !          8910: sword OCIIntervalToNumber(dvoid *hndl, OCIError *err,const OCIInterval *inter, 
        !          8911:                        OCINumber *number);
        !          8912: 
        !          8913: sword OCIIntervalCheck(dvoid *hndl, OCIError *err, CONST OCIInterval *interval,
        !          8914:                         ub4 *valid );
        !          8915: 
        !          8916: sword OCIIntervalAssign(dvoid *hndl, OCIError *err, CONST OCIInterval *ininter,
        !          8917:                        OCIInterval *outinter );
        !          8918: 
        !          8919: sword OCIIntervalSetYearMonth(dvoid *hndl, OCIError *err, sb4 yr, sb4 mnth,
        !          8920:                         OCIInterval *result );
        !          8921: 
        !          8922: sword OCIIntervalGetYearMonth(dvoid *hndl, OCIError *err, sb4 *yr, sb4 *mnth,
        !          8923:                         CONST OCIInterval *result );
        !          8924: 
        !          8925: sword OCIIntervalSetDaySecond(dvoid *hndl, OCIError *err, sb4 dy, sb4 hr,
        !          8926:                         sb4 mm, sb4 ss, sb4 fsec, OCIInterval *result );
        !          8927: 
        !          8928: sword OCIIntervalGetDaySecond(dvoid *hndl, OCIError *err, sb4 *dy, sb4 *hr,
        !          8929:                      sb4 *mm, sb4 *ss, sb4 *fsec, CONST OCIInterval *result );
        !          8930: 
        !          8931: /*----------------- End Datetime interface Extensions -----------------------*/
        !          8932: 
        !          8933: 
        !          8934: /*---------------------------------------------------------------------------
        !          8935:                           PRIVATE FUNCTIONS
        !          8936:   ---------------------------------------------------------------------------*/
        !          8937: 
        !          8938:             /* the following functions are depracated and should not be used */
        !          8939: #ifdef NEVER
        !          8940: sword   OCIStmtBindByPos  (OCIStmt *stmtp, OCIBind *bindp, OCIError *errhp,
        !          8941:                   ub4 position, dvoid *valuep, sb4 value_sz,
        !          8942:                   ub2 dty, dvoid *indp, ub2 *alenp, ub2 *rcodep,
        !          8943:                   ub4 maxarr_len, ub4 *curelep, ub4 mode);
        !          8944: 
        !          8945: 
        !          8946: sword   OCIStmtBindByName  (OCIStmt *stmtp, OCIBind *bindp, OCIError *errhp,
        !          8947:                   CONST OraText *placeholder, sb4 placeh_len, dvoid *valuep, 
        !          8948:                   sb4 value_sz, ub2 dty, dvoid *indp, ub2 *alenp, 
        !          8949:                   ub2 *rcodep, ub4 maxarr_len, ub4 *curelep, ub4 mode);
        !          8950: 
        !          8951: sword   ocidefn  (OCIStmt *stmtp, OCIDefine *defnp, OCIError *errhp,
        !          8952:                   ub4 position, dvoid *valuep, sb4 value_sz, ub2 dty,
        !          8953:                   dvoid *indp, ub2 *rlenp, ub2 *rcodep, ub4 mode);
        !          8954: #endif /* NEVER */
        !          8955: 
        !          8956: #endif                                                       /* OCIAP_ORACLE */

E-mail: