Annotation of win32/sql/oracle/include/oci/orl.h, revision 1.1.1.1

1.1       parser      1: /* Copyright (c) 1993, 1995, 1996, 1997, 1998, 1999 by Oracle Corporation */
                      2: 
                      3: /*
                      4:   Author:             Srinath Krishnaswamy
                      5:   Date:               11/24/93
                      6:   Source documents:   "Functional Specification for C Language Mapping of
                      7:                       OTS Types, Object Management Subsystem", "Oracle C
                      8:                       Coding Standards version 2.2", and the header file
                      9:                      template
                     10:   Rule sets:          the generic and .h file rule sets
                     11:   Quality status:     not exited
                     12:   Identification tag: [ one or more letters to identify the .h file ]
                     13:   Revision code:      11/24/93
                     14:  
                     15:   NAME
                     16: 
                     17:     ORL - ORacle's external C Language interface to primitive OTS types
                     18:  
                     19:   DESCRIPTION
                     20: 
                     21:     This header file contains C langauge interface to the OTS primitive
                     22:     types. The interface includes C mapping of OTS primitive types and
                     23:     the prototype of the pre-defined operations on the primitive types.
                     24:  
                     25:     ***********************************************************************
                     26:     *** NOTE: The OCI functions for objects requires the                ***
                     27:     ***       application to be running in OBJECT mode. That is, during ***
                     28:     ***       process initialization OCIInitialize(), the mode          ***
                     29:     ***       specified should be OBJECT mode.                          ***
                     30:     **                OCIInitialize(OCI_OBJECT, ..);                    ***
                     31:     ***********************************************************************
                     32: 
                     33:   RELATED DOCUMENTS
                     34: 
                     35:     [1] Krishnaswamy, Srinath and Nguyen, Tin A., "Functional Specification
                     36:         for C Language Mapping of OTS Types, Object Management Subsystem",
                     37:        March 1994.
                     38:     [2] Nguyen, Tin A., "The Open Type System", Oracle Corporation,
                     39:        February 1994.
                     40:     [3] Klein, Jonathan D., "Large Field Management", Oracle Corporation,
                     41:        October 1993.
                     42:  
                     43:   PUBLIC FUNCTIONS
                     44:  
                     45:     OCI - OCI functions to manipulate Oracle Number, float and decimal
                     46:       ARITHMETIC
                     47:        OCINumberInc - OCINumber INCrement (optimized)
                     48:        OCINumberDec - OCINumber DECrement (optimized)
                     49:         OCINumberAdd - OCINumber ADD numbers
                     50:         OCINumberSub - OCINumber SUBtract numbers
                     51:         OCINumberMul - OCINumber MULtiply numbers
                     52:         OCINumberDiv - OCINumber DIVide numbers
                     53:        OCINumberMod - OCINumber MODulo division
                     54:        OCINumberIntPower - OCINumber integer PoWeR
                     55:        OCINumberShift - OCINumber decimal ShiFT number
                     56:        OCINumberNeg - OCINumber NEGate number
                     57:        OCINumberAbs - OCINumber ABSolute value
                     58:        OCINumberCeil - OCINumber CEiling of number
                     59:        OCINumberFloor - OCINumber FLooR of number
                     60:        OCINumberSqrt - OCINumber SQuare Root of number
                     61:        OCINumberSign - OCINumber get SIGN of number
                     62:       NATIVE TYPE CONVERSION
                     63:         OCINumberToInt  - OCINumber convert number TO machine-format Integer
                     64:         OCINumberFromInt - OCINumber convert machine-format Integer TO Number
                     65:         OCINumberToReal  - OCINumber convert number TO machine-format Real
                     66:         OCINumberFromReal - OCINumber convert machine-format Real TO Number
                     67:       TEXT STRING CONVERSION
                     68:         OCINumberToText  - OCINumber convert number TO String
                     69:         OCINumberFromText - OCINumber convert String TO Number
                     70:       COMPARISON
                     71:         OCINumberCmp - OCINumber CoMPare numbers
                     72:        OCINumberIsZero - OCINumber comparison with ZERo
                     73:        OCINumberIsInt - OCINumber Is an Integer
                     74:       ASSIGNMENT
                     75:         OCINumberAssign - OCINumber ASsiGn number
                     76:         OCINumberSetZero - OCINumber Set number to Zero value
                     77:        OCINumberSetPi - OCINumber Set number to Pi
                     78:       ROUNDING
                     79:         OCINumberTrunc - OCINumber TRUncate an Oracle number
                     80:         OCINumberRound - OCINumber ROUnd number
                     81:        OCINumberPrec - OCINumber round to Precision digits
                     82:       TRANSCENDENTAL
                     83:        OCINumberSin - OCINumber SINe
                     84:        OCINumberArcSin - OCINumber Arc SINe
                     85:        OCINumberHypSin - OCINumber SiNe Hyperbolic
                     86:        OCINumberCos - OCINumber COSine
                     87:        OCINumberArcCos - OCINumber Arc COSine
                     88:        OCINumberHypCos - OCINumber CoSine Hyperbolic
                     89:        OCINumberTan - OCINumber TANgent
                     90:        OCINumberArcTan - OCINumber Arc TANgent
                     91:        OCINumberArcTan2 - OCINumber Arc TaNgent 2
                     92:        OCINumberHypTan - OCINumber TaNgent Hyperbolic
                     93:        OCINumberPower - OCINumber arbitrary Base EXponentiation
                     94:        OCINumberExp - OCINumber EXPonentiation to base e
                     95:        OCINumberLn  - OCINumber Logarithm Natural
                     96:        OCINumberLog - OCINumber LOGarithm to arbitrary base
                     97: 
                     98:     OCIDate - OCI functions to manipulate OCI Date
                     99:       OCIDateToExternal - OCIDate convert date to external form
                    100:       OCIDateFromExternal - OCIDate convert external form of date into OCIDate
                    101:       OCIDateAssign - OCIDate Assignment
                    102:       OCIDateToText  - OCIDate convert date TO String
                    103:       OCIDateFromText - OCIDate convert String TO Date
                    104:       OCIDateZoneToZone - OCIDate convert date from one time 
                    105:                         Zone TO another Zone
                    106:       OCIDateCompare - OCIDate CoMPare dates
                    107:       OCIDateAddMonths - OCIDate ADd or subtract Months
                    108:       OCIDateAddDays - OCIDate ADd or subtract Days
                    109:       OCIDateLastDay - OCIDate get date of LaST day of month
                    110:       OCIDateDaysBetween - OCIDate get number of days BeTWeen two dates
                    111:       OCIDateNextDay - OCIDate get date of Next DaY
                    112:       OCIDateCheck - OCIDate CHecK if the given date is valid
                    113:       OCIDateSysDate - OCIDate get current SYStem date and time
                    114: 
                    115:     OCIString - OCI String functions to manipulate Variable-length string
                    116:       OCIStringAssign - OCIString Assign string to string
                    117:       OCIStringAssignText - OCIString Assign Text string to string
                    118:       OCIStringResize - OCIString ReSiZe string
                    119:       OCIStringSize - OCIString get String Size
                    120:       OCIStringPtr - OCIString get String PoinTeR
                    121:       OCIStringAllocSize - OCIString get Allocated SiZe
                    122:  
                    123:     OCIRaw - OCI Raw functions to manipulate variable-length raW
                    124:       OCIRawAssignRaw - OCIRaw Assign Raw (of type OCIRaw*) to raw
                    125:                         (of type OCIRaw*)
                    126:       OCIRawResize - OCIRaw Resize raw
                    127:       OCIRawSize - OCIRaw get Raw Size
                    128:       OCIRawPtr  - OCIRaw get Raw data Pointer
                    129:       OCIRawAllocSize - OCIRaw get Allocated Size
                    130: 
                    131:     OCIColl - OCI Collection generic functions. These functions can be 
                    132:                used to manipulate both variable-length array (varray) and 
                    133:                 nested table.
                    134:       OCICollSize  - OCIColl return current SIZe of the given collection
                    135:                (in number of elements)
                    136:       OCICollMax  - OCIColl return the MAXimum number of elements in the
                    137:                collection (i.e. upper-bound)
                    138:       OCICollGetElem  - OCIColl GET pointer to the element at the given 
                    139:                position
                    140:       OCICollAssignElem  - OCIColl assign to element at given index
                    141:       OCICollAssign  - OCIColl ASsiGn collection; perform deep-copy of source 
                    142:                collection to target collection
                    143:       OCICollAppend  - OCIColl aPPend the given element to the end of the
                    144:                collection
                    145:       OCICollTrim  - OCIColl trim (delete) the given number of elements 
                    146:                from the end of the collection
                    147:       OCICollIsLocator - OCIColl indicates whether a collection is locator
                    148:                          based or not.
                    149:       OCIIterCreate  - OCIColl Create an ITerator to scan the collection 
                    150:                elements
                    151:       OCIIterDelete  - OCIColl Delete ITerator
                    152:       OCIIterInit  - OCIColl Initialize ITerator to scan the given collection
                    153:       OCIIterGetCurrent - OCIColl Iterator based, get CURrent 
                    154:                collection element
                    155:       OCIIterNext - OCIColl Iterator based, get NeXT collection element
                    156:       OCIIterPrev - OCIColl Iterator based, get PReVious collection element
                    157:  
                    158:       OCITable - OCI functions to manipulate nested Table. The OCIColl*() and 
                    159:                OCITable*() functions can be used to manipulate nested table
                    160:       OCITableDelete(i) - OCITable if element(i) exists then the element is 
                    161:                marked as deleted else the function returns false. So 
                    162:                delete's create "holes".
                    163:       OCITableExists(i) - OCITable return true iff an element at
                    164:                position i EXIsts
                    165:       OCITableFirst  - OCITable return the smallest value of i for which
                    166:                exists(i) is true.
                    167:       OCITableLast  - OCITable return the largest value of i for which 
                    168:                exists(i) is true.
                    169:       OCITableNext(i) - OCITable return pointer to the smallest position j, 
                    170:                greater than i, such that OCITableExists(j) is true
                    171:       OCITablePrev(i) - OCITable return pointer to the largest position j,
                    172:                less than i, such that OCITableExists(j) is true
                    173:       OCITableSize - OCITable return current SIZe of the given nested table not
                    174:                including deleted elements
                    175: 
                    176:     OCIRef - OCI functions to manipulate object Reference
                    177:       OCIRefClear  - OCIRef CLeaR or nullify a ref
                    178:       OCIRefAssign  - OCIRef ASsiGn a ref to another
                    179:       OCIRefIsEqual  - OCIRef compare two refs for EQUality
                    180:       OCIRefIsNull  - OCIRef test if a ref is NULl 
                    181:       OCIRefFromHex  - OCIRef convert a Hexadecimal string TO a Ref
                    182:       OCIRefToHex   - OCIRef convert a ref to a Hexadecimal string
                    183:       OCIRefHexSize  - OCIRef get size of buffer in bytes to store hexadecimal
                    184:                string
                    185: 
                    186:   OBSOLETE: to be replaced by functions from oci.h:
                    187: 
                    188:     ORLL - ORL functions to manipulate lob Locators
                    189:       orllasg   - ORLL AsiGn one locator to another
                    190:       orllequ   - ORLL compare two locators for EQUality
                    191:       orlliini  - ORLL Is the locator INItialized?
                    192:       orllgsz   - ORLL Get locator SiZe
                    193:       orllgcid  - ORLL Get Character set ID
                    194: 
                    195:       NOTE: The following are specific to FILE lobs:
                    196: 
                    197:       orllsnm - ORLL Set directory alias and file NaMe in the locator
                    198:       orllgnm - ORLL Get directory alias and file NaMe from the locator
                    199:  
                    200:   EXAMPLES
                    201: 
                    202:     Examples are given in the description of each function where
                    203:     relevant.
                    204:  
                    205:   NOTES
                    206: 
                    207:     This file has been subsetted to contain ONLY the routines that will
                    208:     be in the first release.
                    209:  
                    210:   QUESTIONS
                    211:      
                    212:   MODIFIED
                    213:     rkasamse   09/20/99 -   lint changes
                    214:     whe        09/01/99 -   976457:check __cplusplus for C++ code
                    215:     hsbedi     08/11/99 -   Add macro
                    216:     rxgovind   10/14/98 -  make non exposed calls (OCIRowType etc) private
                    217:     rxgovind   06/09/98 -  update OCIRowTypeCreate
                    218:     nmantrav   05/11/98 -  add OCIRowTypeGetCount
                    219:     rxgovind   03/29/98 -  add OCIRowType and OCIRowData interfaces
                    220:     jwijaya    05/06/98  - add OCICollIsLocator                                
                    221:     rxgovind   03/18/98 -  opaque types: move to kolo.h
                    222:     etucker    02/02/98 -  add comments for Dec and Inc
                    223:     etucker    01/29/98 -  Finish core5 integration
                    224:     rxgovind   11/11/97 -  opaque types
                    225:     etucker    10/28/97 -  add ORLN functions for SDK
                    226:     cxcheng    07/28/97 -  remove OCILobLocator #define
                    227:     skmishra   05/13/97 -  stdcc compatibility changes
                    228:     skrishna   04/25/97 -  rename OCINumber*(): Exp Power TanHyp Zero Init
                    229:                            TanToArc Sqr Truncate and Compare 
                    230:     skotsovo   03/31/97 -  remove OCILobLocatorSize
                    231:     skrishna   03/25/97 -  remove orld2i and orldi2d
                    232:     skrishna   03/18/97 -  fix ifdef for supporting ansi and k&r proto-types
                    233:     cxcheng    02/06/97 -  take out short name support except with SLSHORTNAME
                    234:     skrishna   01/06/97 -  update OCITableSize() comments
                    235:     skrishna   12/27/96 -  fix OCIDateGet/OCIDateSet
                    236:     skrishna   12/12/96 -  update OCICollGelElem comments
                    237:     skrishna   11/07/96 -  OCICollGetElem: interface change
                    238:     skrishna   11/05/96 -  add OCIDate Get/Set and OCIDateAssign
                    239:     cxcheng    10/31/96 -  change OCINumberTanHyp to OCINumberHypTan
                    240:     cxcheng    10/30/96 -  #define orll short names to long names
                    241:     dchatter   10/26/96 -  fix some OCI file long names
                    242:     cxcheng    10/24/96 -  remove unnecessary comment in front
                    243:     cxcheng    10/14/96 -  disable long name mapping for LOB functions
                    244:     skrishna   10/13/96 -  continue beautification
                    245:     skotsovo   10/16/96 -  update ocilob names
                    246:     cxcheng    10/09/96 -  add structure members in #define for date/time
                    247:     cxcheng    10/09/96 -  more lint fixes
                    248:     skrishna   10/09/96 -  continue beautification
                    249:     cxcheng    10/09/96 -  more fixes
                    250:     skrishna   10/09/96 -  change fixed-char rep. to orlvstr*
                    251:     jwijaya    10/08/96 -  continue beautification
                    252:     jwijaya    10/07/96 -  beautify
                    253:     cxcheng    10/07/96 -  more changes
                    254:     cxcheng    10/04/96 -  replace short names with long names
                    255:     skrishna   10/01/96 -  orlcsiz, orltsiz: change prototype to take errhdl
                    256:     skrishna   09/23/96 -  fix lint errors
                    257:     skotsovo   09/23/96 -  remove orllmkcur().
                    258:     jwijaya    09/17/96 -  comments on null ref
                    259:     skrishna   09/19/96 -  change orlraw format
                    260:     skotsovo   09/19/96 -  add orlliini and remove orllnul
                    261:     skrishna   08/14/96 -  orlvstr: change format to ub4 followed by text
                    262:     jboonleu   08/06/96 -  update comment
                    263:     skotsovo   08/08/96 -  revert to locators instead of descriptors as input t
                    264:     jboonleu   07/23/96 -  remove orlrcur
                    265:     skrishna   07/06/96 -  add orltsiz
                    266:     skrishna   07/05/96 -  add orld2i and orldi2d
                    267:     jwijaya    07/03/96 -  add ANSI prototypes
                    268:     skrishna   06/27/96 -  document default string format in orlds2d & orld2s
                    269:     skrishna   06/25/96 -  change max date value
                    270:     skrishna   06/18/96 -  modify orld2s() comments
                    271:     skotsovo   06/13/96 -  orll functions take lob descriptors instead of locat
                    272:     rxgovind   06/05/96 -  change prototype of orlrcur to take ocienvh
                    273:     skrishna   05/30/96 -  support collection trimming
                    274:     skrishna   05/30/96 -  remove orlralo/fre and orllalo/fre instead use 
                    275:                           orionew/fre
                    276:     skrishna   05/28/96 -  add orlt*() and modify orla*()
                    277:     skotsovo   05/23/96 -  add orlbl typedefs for pro*c
                    278:     jboonleu   05/14/96 -  add orlrcur
                    279:     rxgovind   05/08/96 -  changes for 3gl callbacks
                    280:     skotsovo   05/01/96 -  in orllasg, no need to alloc orlbl*
                    281:     skrishna   04/21/96 -  merge changes from 960418 object branch into big
                    282:     skrishna   04/17/96 -  rename orlrcpy to orlrasg
                    283:     skrishna   04/12/96 -  add orlr2h and orlrh2r functions
                    284:     skotsovo   04/15/96 -  add fnt to make the lob locator current
                    285:     skrishna   04/08/96 -  change orl*() to take ocienvh* and ocierrh* instead
                    286:                           of oroenv*
                    287:     skotsovo   03/22/96 -  add locator functions
                    288:     skotsovo   03/22/96 -  add locator functions
                    289:     skrishna   02/27/96 -  remove mlslabel interface
                    290:     skotsovo   02/20/96 -  remove orlbty and use dty type instead.
                    291:     skotsovo   02/14/96 -  add text file lobs.
                    292:     skrishna   01/31/96 -  update comments of orln2r, orldchk, orlds2d & orld2s
                    293:     skrishna   01/31/96 -  change orld2s() and orln2s() to return string length
                    294:     skrishna   01/21/96 -  remove old raw interface 
                    295:     skrishna   12/14/95 -  add raw interface
                    296:     skotsovo   01/03/96 -  change LOB offsets and lengths from ub4 to ubig_ora
                    297:                            to support 64 bit machines.
                    298:     skotsovo   10/30/95 -  add orlblsiz() to get lob locator size
                    299:     skrishna   10/24/95 -  move ref functions from ori and update the ref
                    300:                           functions to support variable-length ref
                    301:     cxcheng    10/20/95 -  add more comments on number versions
                    302:     cxcheng    10/13/95 -  add more number functions
                    303:     cxcheng    08/29/95 -  Support for segmented varrays
                    304:     cxcheng    08/18/95 -  modifiy orlmls structure
                    305:     skrishna   06/06/95 -  rename orln, orld, orlvs and orlva to orlnum,
                    306:                            orldat, orlvstr and orlvary respectively 
                    307:     skrishna   11/15/94 -  remove orlnget() function 
                    308:     skrishna   09/20/94 -  modify orldbtw() to return number of days only 
                    309:     skrishna   08/24/94 -  change format string length type from ub4 to ub1 
                    310:     skrishna   07/19/94 -  Rename orln2c & orlnc2n to orln2s & orlns2n 
                    311:     skrishna   06/29/94 -  Add blob interface; add examples 
                    312:     skrishna   06/23/94 -  Update comments and format 
                    313:     skrishna   05/19/94 -  update varray append comments 
                    314:     skrishna    05/05/94 -  Subsetting 
                    315:     skrishna    11/24/93 -  Creation
                    316: */
                    317: 
                    318: #ifndef ORATYPES
                    319: #include <oratypes.h>
                    320: #endif
                    321: 
                    322: #ifndef ORO_ORACLE
                    323: #include <oro.h>
                    324: #endif
                    325: 
                    326: #ifndef ORT_ORACLE
                    327: #include <ort.h>
                    328: #endif
                    329: 
                    330: #ifndef OCI_ORACLE
                    331: #include <oci.h>
                    332: #endif
                    333: 
                    334: #ifndef ORL_ORACLE
                    335: #define ORL_ORACLE
                    336: 
                    337: /*---------------------------------------------------------------------------*/
                    338: /*                         SHORT NAMES SUPPORT SECTION                       */
                    339: /*---------------------------------------------------------------------------*/
                    340: 
                    341: #ifdef SLSHORTNAME
                    342: 
                    343: /* the following are short names that are only supported on IBM mainframes
                    344:    with the SLSHORTNAME defined.
                    345:    With this all subsequent long names will actually be substituted with
                    346:    the short names here */
                    347: 
                    348: #define OCIArray                        orlvary
                    349: #define OCIColl                         orlcol
                    350: #define OCICollAppend                   orlcapp
                    351: #define OCICollAssign                   orlcasg
                    352: #define OCICollAssignElem               orlcase
                    353: #define OCICollGetElem                  orlcget
                    354: #define OCICollMax                      orlcmax
                    355: #define OCICollSize                     orlcsiz
                    356: #define OCICollTrim                     orlctrm
                    357: #define OCICollIsLocator                orlcilc
                    358: #define OCIDate                         orldat
                    359: #define OCIDateAddDays                  orldadd
                    360: #define OCIDateAddMonths                orldadm
                    361: #define OCIDateCheck                    orldchk
                    362: #define OCIDateCompare                  orldcmp
                    363: #define OCIDateDD                       day_orldat
                    364: #define OCIDateDaysBetween              orldbtw
                    365: #define OCIDateFromText                 orlds2d
                    366: #define OCIDateLastDay                  orldlst
                    367: #define OCIDateMM                       mon_orldat
                    368: #define OCIDateNextDay                  orldndy
                    369: #define OCIDateSysDate                  orldsys
                    370: #define OCIDateTime                     time_orldat
                    371: #define OCIDateYYYY                     gye_orldat
                    372: #define OCIDateZoneToZone               orldz2z
                    373: #define OCIIter                         orlcitr
                    374: #define OCIIterCreate                   orlccit
                    375: #define OCIIterDelete                   orlcdit
                    376: #define OCIIterGetCurrent               orlcicur
                    377: #define OCIIterInit                     orlciit
                    378: #define OCIIterNext                     orlcinxt
                    379: #define OCIIterPrev                     orlciprv
                    380: #define OCINumber                       orlnum
                    381: #define OCINumberAbs                    orlnabs
                    382: #define OCINumberAdd                    orlnadd
                    383: #define OCINumberArcCos                 orlnacos
                    384: #define OCINumberArcSin                 orlnasin
                    385: #define OCINumberArcTan                 orlnatan
                    386: #define OCINumberAssign                 orlnasg
                    387: #define OCINumberCeil                   orlncel
                    388: #define OCINumberCos                    orlncos
                    389: #define OCINumberDiv                    orlndiv
                    390: #define OCINumberPower                  orlnbex
                    391: #define OCINumberFloor                  orlnflr
                    392: #define OCINumberFromInt                orlni2n
                    393: #define OCINumberFromReal               orlnr2n
                    394: #define OCINumberFromText               orlns2n
                    395: #define OCINumberHypCos                 orlncsh
                    396: #define OCINumberHypSin                 orlnsnh
                    397: #define OCINumberSetZero                orlnini
                    398: #define OCINumberSetPi                 orlnspi
                    399: #define OCINumberInc                   orlninc
                    400: #define OCINumberDec                   orlndec
                    401: #define OCINumberIntPower               orlnpwr
                    402: #define OCINumberLn                     orlnln
                    403: #define OCINumberLog                    orlnlog
                    404: #define OCINumberMod                    orlnmod
                    405: #define OCINumberMul                    orlnmul
                    406: #define OCINumberNeg                    orlnneg
                    407: #define OCINumberPart                   orlnpart
                    408: #define OCINumberExp                    orlnexp
                    409: #define OCINumberRound                  orlnrou
                    410: #define OCINumberPrec                  orlnpre
                    411: #define OCINumberShift                 orlnsft
                    412: #define OCINumberSign                   orlnsgn
                    413: #define OCINumberSin                    orlnsin
                    414: #define OCINumberSqrt                   orlnsqr
                    415: #define OCINumberSub                    orlnsub
                    416: #define OCINumberTan                    orlntan
                    417: #define OCINumberHypTan                 orlntnh
                    418: #define OCINumberArcTan2                orlnatn2
                    419: #define OCINumberToInt                  orln2i
                    420: #define OCINumberToReal                 orln2r
                    421: #define OCINumberToText                 orln2s
                    422: #define OCINumberTrunc                  orlntru
                    423: #define OCINumberCmp                    orlncmp
                    424: #define OCINumberIsZero                 orlnzer
                    425: #define OCINumberIsInt                 orlnint
                    426: #define OCIRaw                          orlraw
                    427: #define OCIRawAllocSize                 orlwasz
                    428: #define OCIRawAssignBytes               orlwabr
                    429: #define OCIRawAssignRaw                 orlwarr
                    430: #define OCIRawPtr                       orlwgrp
                    431: #define OCIRawResize                    orlwrsz
                    432: #define OCIRawSize                      orlwgsz
                    433: #define OCIRefAssign                    orlrasg
                    434: #define OCIRefClear                     orlrclr
                    435: #define OCIRefFromHex                   orlrh2r
                    436: #define OCIRefHexSize                   orlrhsz
                    437: #define OCIRefIsEqual                   orlrequ
                    438: #define OCIRefIsNull                    orlrnul
                    439: #define OCIRefToHex                     orlr2h
                    440: #define OCIString                       orlvstr
                    441: #define OCIStringAllocSize              orlvasz
                    442: #define OCIStringAssign                 orlvass
                    443: #define OCIStringAssignText             orlvats
                    444: #define OCIStringPtr                    orlvgsp
                    445: #define OCIStringResize                 orlvrsz
                    446: #define OCIStringSize                   orlvgsz
                    447: #define OCITable                        orltbl
                    448: #define OCITableDelete                  orltdel
                    449: #define OCITableExists                  orltexi
                    450: #define OCITableFirst                   orltfst
                    451: #define OCITableLast                    orltlst
                    452: #define OCITableNext                    orltnxt
                    453: #define OCITablePrev                    orltprv
                    454: #define OCITableSize                    orltsiz
                    455: #define OCITime                         orldtm
                    456: #define OCITimeHH                       orldtmhh
                    457: #define OCITimeMI                       orldtmmm
                    458: #define OCITimeSS                       orldtmss
                    459: #define OCI_LOBMODE_READONLY            ORLBMORO
                    460: #define OCI_LOBMODE_READWRITE           ORLBMORW
                    461: 
                    462: #endif                                                        /* SLSHORTNAME */
                    463: 
                    464: /*****************************************************************************/
                    465: /*                         NUMBER/FLOAT/DECIMAL TYPE                         */
                    466: /*****************************************************************************/
                    467: 
                    468: #define OCI_NUMBER_SIZE 22
                    469: struct OCINumber
                    470: {
                    471:   ub1 OCINumberPart[OCI_NUMBER_SIZE];
                    472: };
                    473: typedef struct OCINumber OCINumber;
                    474: 
                    475: /* 
                    476:  * OCINumber - OCI Number mapping in c
                    477:  *
                    478:  * The OTS types: NUMBER, NUMERIC, INT, SHORTINT, REAL, DOUBLE PRECISION,
                    479:  * FLOAT and DECIMAL are represented by OCINumber.
                    480:  * The contents of OCINumber is opaque to clients. 
                    481:  *
                    482:  * For binding variables of type OCINumber in OCI calls (OCIBindByName(),
                    483:  * OCIBindByPos(), and OCIDefineByPos()) use the type code SQLT_VNU.
                    484:  */
                    485: 
                    486: /*
                    487:    EXAMPLE 
                    488: 
                    489:    The following example shows how to manipulate an attribute of type 
                    490:    oracle number.
                    491:   
                    492:      struct person
                    493:      {
                    494:        OCINumber sal;
                    495:      };
                    496:      typedef struct person person;
                    497: 
                    498:      OCIError *err;
                    499:      person* joe;
                    500:      person* tom;
                    501:      person* debbie;
                    502:      OCINumber  *joesal;
                    503:      OCINumber  *tomsal;
                    504:      OCINumber *debsal;
                    505:      sword   status;
                    506:      int     inum;
                    507:      double  dnum;
                    508:      OCINumber ornum;
                    509:      char    buffer[21];
                    510:      ub4     buflen;
                    511:      sword   result;
                    512:      
                    513:      /o See oci.h for an example of how to initialize OCIError.
                    514:       o For this example, assume the OCIEnv and OCIError has been
                    515:       o initialized.
                    516:       o/
                    517: 
                    518:      /o Pin joe, tom and debbie person objects in the object cache. See ori.h
                    519:       o for an example on pinning objects. For this example, assume that
                    520:       o joe, tom and debbie are pointing to pinned objects.
                    521:       o/
                    522:      joesal = &joe->sal;
                    523:      tomsal = &tom->sal;
                    524:      debsal = &debbie->sal;
                    525: 
                    526:      /o initialize joe's salary to be $12,000 o/
                    527:      inum = 12000;
                    528:      status = OCINumberFromInt(err, &inum, sizeof(inum), OCI_NUMBER_SIGNED,
                    529:                                joesal);
                    530:      if (status != OCI_SUCCESS)
                    531:                               /o goto to handle error from OCINumberFromInt o/;
                    532: 
                    533:      /o initialize tom's salary to be same as joe o/
                    534:      OCINumberAssign(err, joesal, tomsal);
                    535: 
                    536:      /o initialize debbie's salary to be 20% more than joe's o/
                    537:      dnum = 1.2;
                    538:      status = OCINumberFromReal(err, &dnum, sizeof(double), &ornum);
                    539:      if (status != OCI_SUCCESS)
                    540:                             /o goto to handle error from OCINumberFromReal o/;
                    541:      status = OCINumberMul(err, joesal, &ornum, debsal);
                    542:      if (status != OCI_SUCCESS)  /o goto to handle error from OCINumberMul o/;
                    543: 
                    544:      /o give tom a 50% raise o/
                    545:      dnum = 1.5;
                    546:      status = OCINumberFromReal(err, &dnum, sizeof(double), &ornum);
                    547:      if (status != OCI_SUCCESS)
                    548:                             /o goto to handle error from OCINumberFromReal o/;
                    549:      status = OCINumberMul(err, tomsal, &ornum, tomsal);
                    550:      if (status != OCI_SUCCESS)  /o goto to handle error from OCINumberMul o/;
                    551: 
                    552:      /o double joe's salary o/
                    553:      status = OCINumberAdd(err, joesal, joesal, joesal);
                    554:      if (status != OCI_SUCCESS)  /o goto to handle error from OCINumberAdd o/;
                    555: 
                    556:      /o get joe's salary in integer o/
                    557:      status = OCINumberToInt(err, joesal, sizeof(inum), OCI_NUMBER_SIGNED,
                    558:                              &inum);
                    559:      if (status != OCI_SUCCESS)/o goto to handle error from OCINumberToInt o/;
                    560:      /o inum is set to 24000 o/
                    561: 
                    562:      /o get debbie's salary in double o/
                    563:      status = OCINumberToReal(err, debsal, sizeof(dnum), &dnum);
                    564:      if (status != OCI_SUCCESS)/o goto to handle error from OCINumberToReal o/;
                    565:      /o dnum is set to 14400 o/
                    566: 
                    567:      /o print tom's salary as DEM0001`8000.00 o/
                    568:      buflen = sizeof(buffer);
                    569:      status = OCINumberToText(err, tomsal, "C0999G9999D99", 13, 
                    570:                  "NLS_NUMERIC_CHARACTERS='.`' NLS_ISO_CURRENCY='Germany'", 54,
                    571:                  &buflen, buffer);
                    572:      if (status != OCI_SUCCESS)/o goto to handle error from OCINumberToText o/;
                    573:      printf("tom's salary = %s\n", buffer);
                    574: 
                    575:      /o compare joe and tom's salary o/
                    576:      status = OCINumberCmp(err, joesal, tomsal, &result);
                    577:      if (status != OCI_SUCCESS)  /o goto to handle error from OCINumberCmp o/;
                    578:      /o result is positive o/
                    579: 
                    580:      /o read debbie's new salary from string o/
                    581:      status = OCINumberFromText(err, "48`000.00", 9, "99G999D99", 9,
                    582:                       "NLS_NUMERIC_CHARACTERS='.`'", 27, debsal);
                    583:      if (status != OCI_SUCCESS)
                    584:                             /o goto to handle error from OCINumberFromText o/;
                    585:      /o debbie's salary is now 48000.00 o/
                    586: 
                    587: */
                    588: 
                    589: /*----------------------------- OCINumberInc --------------------------------*/
                    590: 
                    591: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                    592: sword OCINumberInc(/*_ OCIError *err, OCINumber *number _*/);
                    593: #else /* ANSI C */
                    594: sword OCINumberInc(    OCIError *err, OCINumber *number    );
                    595: #endif
                    596: /*
                    597:    NAME: OCINumberInc - OCINumber INCrement numbers
                    598:    PARAMETERS:
                    599:         err (IN/OUT) - error handle. If there is an error, it is
                    600:                 recorded in 'err' and this function returns OCI_ERROR.
                    601:                 The error recorded in 'err' can be retrieved by calling
                    602:                 OCIErrorGet().
                    603:         number (IN/OUT) a positive Oracle number to be incremented
                    604:    DESCRIPTION:
                    605:         Increment Oracle number in place. It is assumed that the input is
                    606:        an integer between 0 and 100^21-2. If the is input too large, it will
                    607:        be treated as 0 - the result will be an Oracle number 1. If the input
                    608:        is not a positive integer, the result will be unpredictable.
                    609:    RETURNS:
                    610:         OCI_SUCCESS if the function completes successfully.
                    611:         OCI_INVALID_HANDLE if 'err' is NULL.
                    612:         OCI_ERROR if
                    613:           any of the number arguments is null
                    614:  */
                    615: 
                    616: /*----------------------------- OCINumberDec --------------------------------*/
                    617: 
                    618: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                    619: sword OCINumberDec(/*_ OCIError *err, OCINumber *number _*/);
                    620: #else /* ANSI C */
                    621: sword OCINumberDec(    OCIError *err, OCINumber *number    );
                    622: #endif
                    623: /*
                    624:    NAME: OCINumberDec - OCINumber DECrement numbers
                    625:    PARAMETERS:
                    626:         err (IN/OUT) - error handle. If there is an error, it is
                    627:                 recorded in 'err' and this function returns OCI_ERROR.
                    628:                 The error recorded in 'err' can be retrieved by calling
                    629:                 OCIErrorGet().
                    630:         number (IN/OUT) - a positive Oracle number to be decremented
                    631:    DESCRIPTION:
                    632:         Decrement Oracle number in place. It is assumed that the input is an
                    633:        integer between 1 and 100^21-2. If the input is too large, it will be
                    634:        treated as 1 - the result will be an Oracle number 0. If the input is
                    635:        not a positive integer, the result will be unpredictable.
                    636:    RETURNS:
                    637:         OCI_SUCCESS if the function completes successfully.
                    638:         OCI_INVALID_HANDLE if 'err' is NULL.
                    639:         OCI_ERROR if
                    640:           any of the number arguments is null
                    641:  */
                    642: 
                    643: /*-------------------------- OCINumberSetZero -------------------------------*/
                    644: 
                    645: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                    646: void OCINumberSetZero(/*_ OCIError *err, OCINumber *num _*/); 
                    647: #else /* ANSI C */
                    648: void OCINumberSetZero(    OCIError *err, OCINumber *num    );
                    649: #endif
                    650: /*
                    651:    NAME: OCINumberSetZero - OCINumber Set number to Zero value
                    652:    PARAMETERS:
                    653:         err (IN/OUT) - pointer to OCI error handle
                    654:         num (OUT) - set to zero value
                    655:    DESCRIPTION:
                    656:         Initialize the given number to value 0.
                    657:  */
                    658: 
                    659: /*--------------------------- OCINumberSetPi --------------------------------*/
                    660: 
                    661: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                    662: void OCINumberSetPi(/*_ OCIError *err, OCINumber *num _*/); 
                    663: #else /* ANSI C */
                    664: void OCINumberSetPi(    OCIError *err, OCINumber *num    );
                    665: #endif
                    666: /*
                    667:    NAME: OCINumberSetPi - OCINumber Set number to Pi
                    668:         err (IN/OUT) - pointer to OCI error handle
                    669:         num (OUT) - set to zero value
                    670:    DESCRIPTION:
                    671:         Initialize the given number to value Pi.
                    672:  */
                    673: 
                    674: /*----------------------------- OCINumberAdd --------------------------------*/
                    675: 
                    676: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                    677: sword OCINumberAdd(/*_ OCIError *err, CONST OCINumber *number1, 
                    678:                        CONST OCINumber *number2, OCINumber *result _*/);
                    679: #else /* ANSI C */
                    680: sword OCINumberAdd(    OCIError *err, CONST OCINumber *number1, 
                    681:                        CONST OCINumber *number2, OCINumber *result    );
                    682: #endif
                    683: /*
                    684:    NAME: OCINumberAdd - OCINumber ADD numbers
                    685:    PARAMETERS:
                    686:         err (IN/OUT) - error handle. If there is an error, it is
                    687:                 recorded in 'err' and this function returns OCI_ERROR.
                    688:                 The error recorded in 'err' can be retrieved by calling
                    689:                 OCIErrorGet().
                    690:         number1, number2 (IN) - numbers to be added
                    691:         result (OUT) - result of adding 'number1' with 'number2'
                    692:    DESCRIPTION:
                    693:         Add 'number1' with 'number2' and return result in 'result'.
                    694:    RETURNS:
                    695:         OCI_SUCCESS if the function completes successfully.
                    696:         OCI_INVALID_HANDLE if 'err' is NULL.
                    697:         OCI_ERROR if
                    698:           any of the number arguments is null
                    699:  */
                    700: 
                    701: /*----------------------------- OCINumberSub --------------------------------*/
                    702: 
                    703: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                    704: sword OCINumberSub(/*_ OCIError *err, CONST OCINumber *number1, 
                    705:                        CONST OCINumber *number2, OCINumber *result _*/);
                    706: #else /* ANSI C */
                    707: sword OCINumberSub(    OCIError *err, CONST OCINumber *number1, 
                    708:                        CONST OCINumber *number2, OCINumber *result    );
                    709: #endif
                    710: /*
                    711:    NAME: OCINumberSub - OCINumber SUBtract numbers
                    712:    PARAMETERS:
                    713:         err (IN/OUT) - error handle. If there is an error, it is
                    714:                 recorded in 'err' and this function returns OCI_ERROR.
                    715:                 The error recorded in 'err' can be retrieved by calling
                    716:                 OCIErrorGet().
                    717:         number1, number2 (IN) - 'number2' subtracted from 'number1'
                    718:         result (OUT) - subtraction result
                    719:    DESCRIPTION:
                    720:         Subtract 'number2' from 'number1' and return result in 'result'.
                    721:    RETURNS:
                    722:         OCI_SUCCESS if the function completes successfully.
                    723:         OCI_INVALID_HANDLE if 'err' is NULL.
                    724:         OCI_ERROR if
                    725:           any of the number arguments is null
                    726:  */
                    727: 
                    728: /*----------------------------- OCINumberMul --------------------------------*/
                    729: 
                    730: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                    731: sword OCINumberMul(/*_ OCIError *err, CONST OCINumber *number1, 
                    732:                        CONST OCINumber *number2, OCINumber *result _*/);
                    733: #else /* ANSI C */
                    734: sword OCINumberMul(    OCIError *err, CONST OCINumber *number1, 
                    735:                        CONST OCINumber *number2, OCINumber *result    );
                    736: #endif
                    737: /*
                    738:    NAME: OCINumberMul - OCINumber MULtiply numbers
                    739:    PARAMETERS:
                    740:         err (IN/OUT) - error handle. If there is an error, it is
                    741:                 recorded in 'err' and this function returns OCI_ERROR.
                    742:                 The error recorded in 'err' can be retrieved by calling
                    743:                 OCIErrorGet().
                    744:         number1, number2 (IN) - numbers to be multiplied
                    745:         result (OUT) - multiplication result
                    746:    DESCRIPTION:
                    747:         Multiply 'number1' with 'number2' and return result in 'result'.
                    748:    RETURNS:
                    749:         OCI_SUCCESS if the function completes successfully.
                    750:         OCI_INVALID_HANDLE if 'err' is NULL.
                    751:         OCI_ERROR if
                    752:           any of the number arguments is null
                    753:  */
                    754: 
                    755: /*----------------------------- OCINumberDiv --------------------------------*/
                    756: 
                    757: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                    758: sword OCINumberDiv(/*_ OCIError *err, CONST OCINumber *number1, 
                    759:                        CONST OCINumber *number2, OCINumber *result _*/);
                    760: #else /* ANSI C */
                    761: sword OCINumberDiv(    OCIError *err, CONST OCINumber *number1, 
                    762:                        CONST OCINumber *number2, OCINumber *result    );
                    763: #endif
                    764: /*
                    765:    NAME: OCINumberDiv - OCINumber DIVide numbers
                    766:    PARAMETERS:
                    767:         err (IN/OUT) - error handle. If there is an error, it is
                    768:                 recorded in 'err' and this function returns OCI_ERROR.
                    769:                 The error recorded in 'err' can be retrieved by calling
                    770:                 OCIErrorGet().
                    771:         number1 (IN) - pointer to the numerator
                    772:         number2 (IN) - pointer to the denominator
                    773:         result (OUT) - division result
                    774:    DESCRIPTION:
                    775:         Divide 'number1' by 'number2' and return result in 'result'.
                    776:    RETURNS:
                    777:         OCI_SUCCESS if the function completes successfully.
                    778:         OCI_INVALID_HANDLE if 'err' is NULL.
                    779:         OCI_ERROR if
                    780:           any of the number arguments is null
                    781:           underflow errorr
                    782:           overflow errorr
                    783:           divide by zero errorr
                    784:  */
                    785: 
                    786: /*----------------------------- OCINumberMod --------------------------------*/
                    787: 
                    788: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                    789: sword OCINumberMod(/*_ OCIError *err, CONST OCINumber *number1, 
                    790:                        CONST OCINumber *number2, OCINumber *result _*/);
                    791: #else /* ANSI C */
                    792: sword OCINumberMod(    OCIError *err, CONST OCINumber *number1, 
                    793:                        CONST OCINumber *number2, OCINumber *result    );
                    794: #endif
                    795: /*
                    796:    NAME: OCINumberMod - OCINumber MODulous
                    797:    PARAMETERS:
                    798:         err (IN/OUT) - error handle. If there is an error, it is
                    799:                 recorded in 'err' and this function returns OCI_ERROR.
                    800:                 The error recorded in 'err' can be retrieved by calling
                    801:                 OCIErrorGet().
                    802:         number1 (IN) - pointer to the numerator
                    803:         number2 (IN) - pointer to the denominator
                    804:         result (OUT) - remainder of the result
                    805:    DESCRIPTION:
                    806:         Finds the remainder of the division of two Oracle numbers.
                    807:    RETURNS:
                    808:         OCI_SUCCESS if the function completes successfully.
                    809:         OCI_INVALID_HANDLE if 'err' is NULL.
                    810:         OCI_ERROR if
                    811:           any of the number arguments is null
                    812:           divide by zero errorr
                    813:  */
                    814: 
                    815: /*------------------------ OCINumberIntPower --------------------------------*/
                    816: 
                    817: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                    818: sword OCINumberIntPower(/*_ OCIError *err, CONST OCINumber *base,
                    819:                             CONST sword exp, OCINumber *result _*/);
                    820: #else /* ANSI C */
                    821: sword OCINumberIntPower(    OCIError *err, CONST OCINumber *base,
                    822:                             CONST sword exp, OCINumber *result    );
                    823: #endif
                    824: /*
                    825:    NAME: OCINumberIntPower - OCINumber takes an arbitary base to an arbitary
                    826:                              integer PoWeR
                    827:    PARAMETERS:
                    828:         err (IN/OUT) - error handle. If there is an error, it is
                    829:                 recorded in 'err' and this function returns OCI_ERROR.
                    830:                 The error recorded in 'err' can be retrieved by calling
                    831:                 OCIErrorGet().
                    832:         base (IN) - base of the exponentiation
                    833:         exp (IN) - exponent to which the base is to be raised
                    834:         result (OUT) - output of exponentiation
                    835:    DESCRIPTION:
                    836:         Takes an arbitary base to an arbitary integer power.
                    837:    RETURNS:
                    838:         OCI_SUCCESS if the function completes successfully.
                    839:         OCI_INVALID_HANDLE if 'err' is NULL.
                    840:         OCI_ERROR if
                    841:           any of the number arguments is null
                    842:  */
                    843: 
                    844: /*-------------------------- OCINumberShift ---------------------------------*/
                    845: 
                    846: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                    847: sword OCINumberShift(/*_ OCIError *err, CONST OCINumber *number,
                    848:                             CONST sword nDig, OCINumber *result _*/);
                    849: #else /* ANSI C */
                    850: sword OCINumberShift(    OCIError *err, CONST OCINumber *number,
                    851:                             CONST sword nDig, OCINumber *result    );
                    852: #endif
                    853: /*
                    854:    NAME: OCINumberShift - OCINumber multiplies by a power of 10.
                    855: 
                    856:    PARAMETERS:
                    857:         err (IN/OUT) - error handle. If there is an error, it is
                    858:                 recorded in 'err' and this function returns OCI_ERROR.
                    859:                 The error recorded in 'err' can be retrieved by calling
                    860:                 OCIErrorGet().
                    861:         number (IN) - Oracle Number to be shifted.
                    862:         nDig   (IN) - number of decimal places to shift.
                    863:         result (OUT) - shift result.
                    864:    DESCRIPTION:
                    865:         Multiplies number by 10^NDig and sets product to the result.
                    866:    RETURNS:
                    867:         OCI_SUCCESS if the function completes successfully.
                    868:         OCI_INVALID_HANDLE if 'err' is NULL.
                    869:         OCI_ERROR if
                    870:           any of the number arguments is null
                    871:  */
                    872: 
                    873: /*----------------------------- OCINumberNeg --------------------------------*/
                    874: 
                    875: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                    876: sword OCINumberNeg(/*_ OCIError *err, CONST OCINumber *number,
                    877:                        OCINumber *result _*/);
                    878: #else /* ANSI C */
                    879: sword OCINumberNeg(    OCIError *err, CONST OCINumber *number,
                    880:                        OCINumber *result    );
                    881: #endif
                    882: /*
                    883:    NAME: OCINumberNeg - OCINumber NEGate number
                    884:    PARAMETERS:
                    885:         err (IN/OUT) - error handle. If there is an error, it is
                    886:                 recorded in 'err' and this function returns OCI_ERROR.
                    887:                 The error recorded in 'err' can be retrieved by calling
                    888:                 OCIErrorGet().
                    889:         number (IN) - number to be negated
                    890:         result (OUT) - will contain negated value of 'number'
                    891:    DESCRIPTION:
                    892:         Negates an Oracle number.
                    893:    RETURNS:
                    894:         OCI_SUCCESS if the function completes successfully.
                    895:         OCI_INVALID_HANDLE if 'err' is NULL.
                    896:         OCI_ERROR if
                    897:           any of the number arguments is null
                    898:  */
                    899: 
                    900: /*------------------------- OCINumberToText ---------------------------------*/
                    901: 
                    902: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                    903: sword OCINumberToText(/*_ OCIError *err, CONST OCINumber *number, 
                    904:                           CONST text *fmt, ub4 fmt_length,
                    905:                           CONST text *nls_params, ub4 nls_p_length,
                    906:                           ub4 *buf_size, text *buf _*/);
                    907: #else /* ANSI C */
                    908: sword OCINumberToText(    OCIError *err, CONST OCINumber *number, 
                    909:                           CONST text *fmt, ub4 fmt_length,
                    910:                           CONST text *nls_params, ub4 nls_p_length,
                    911:                           ub4 *buf_size, text *buf    );
                    912: #endif
                    913: /*
                    914:    NAME: OCINumberToText - OCINumber convert number TO String 
                    915:    PARAMETERS:
                    916:         err (IN/OUT) - error handle. If there is an error, it is
                    917:                 recorded in 'err' and this function returns OCI_ERROR.
                    918:                 The error recorded in 'err' can be retrieved by calling
                    919:                 OCIErrorGet().
                    920:         number (IN) - Oracle number to be converted
                    921:         fmt (IN) - conversion format
                    922:         fmt_length (IN) - length of the 'fmt' parameter
                    923:         nls_params (IN) - nls format specification, if null string 
                    924:                i.e. (text *)0, then the default parameters for the 
                    925:                session is used
                    926:         nls_p_length (IN) - length of the 'nls_params' parameter
                    927:         buf_size (IN/OUT) - size of the buffer must be passed as input by
                    928:                the caller, this function will return the length of the 
                    929:                resulting string in bytes via this parameter. The length 
                    930:                does not include the terminating null ('\0').
                    931:         buf (OUT) - buffer into which the converted string is placed. The
                    932:                resulting string is null terminated.
                    933:    DESCRIPTION:
                    934:         Converts the given number to a character string 
                    935:         according to the specified format. Refer to "TO_NUMBER" conversion
                    936:         function described in "Oracle SQL Language Reference Manual" for a
                    937:         description of format and NLS parameters.
                    938:         The converted number string is stored in the buffer 'buf', up to 
                    939:         a max of '*buf_size' bytes. Length of the resulting string is
                    940:        returned via 'buf_size'.
                    941:    RETURNS:
                    942:         OCI_SUCCESS if the function completes successfully.
                    943:         OCI_INVALID_HANDLE if 'err' is NULL.
                    944:         OCI_ERROR if
                    945:          'number' or 'buf' is null
                    946:           buffer too small
                    947:           invalid format
                    948:           invalid nls format
                    949:          number to text translation for the given format causes overflow
                    950:  */
                    951: 
                    952: /*-------------------------- OCINumberFromText ------------------------------*/
                    953: 
                    954: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                    955: sword OCINumberFromText(/*_ OCIError *err, CONST text *str, 
                    956:                           ub4 str_length, CONST text *fmt, ub4 fmt_length, 
                    957:                           CONST text *nls_params, ub4 nls_p_length, 
                    958:                           OCINumber *number _*/);
                    959: #else /* ANSI C */
                    960: sword OCINumberFromText(    OCIError *err, CONST text *str, 
                    961:                           ub4 str_length, CONST text *fmt, ub4 fmt_length, 
                    962:                           CONST text *nls_params, ub4 nls_p_length, 
                    963:                           OCINumber *number    );
                    964: #endif
                    965: /*
                    966:    NAME: OCINumberFromText - OCINumber convert String TO Number
                    967:    PARAMETERS:
                    968:         err (IN/OUT) - error handle. If there is an error, it is
                    969:                 recorded in 'err' and this function returns OCI_ERROR.
                    970:                 The error recorded in 'err' can be retrieved by calling
                    971:                 OCIErrorGet().
                    972:         str (IN) - input string to be converted to Oracle number
                    973:         str_length (IN) - size of the input string
                    974:         fmt (IN) - conversion format
                    975:         fmt_length (IN) - length of the 'fmt' parameter
                    976:         nls_params (IN) - nls format specification, if null string 
                    977:                i.e. (text *)0, then the default parameters for the 
                    978:                session is used
                    979:         nls_p_length (IN) - length of the 'nls_params' parameter
                    980:         number (OUT) - given string converted to number
                    981:    DESCRIPTION:
                    982:         Converts the given string to a number
                    983:         according to the specified format. Refer to "TO_NUMBER" conversion
                    984:         function described in "Oracle SQL Language Reference Manual" for a
                    985:         description of format and NLS parameters.
                    986:    RETURNS:
                    987:         OCI_SUCCESS if the function completes successfully.
                    988:         OCI_INVALID_HANDLE if 'err' is NULL.
                    989:         OCI_ERROR if
                    990:          'number' or 'str' is null
                    991:           'str_length' is 0
                    992:           invalid format
                    993:           invalid nls format
                    994:           invalid input string
                    995:  */
                    996: 
                    997: /*-------------------------- OCINumberToInt ---------------------------------*/
                    998: 
                    999: #define OCI_NUMBER_UNSIGNED 0                        /* Unsigned type -- ubX */
                   1000: #define OCI_NUMBER_SIGNED   2                          /* Signed type -- sbX */
                   1001: 
                   1002: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   1003: sword OCINumberToInt(/*_ OCIError *err, CONST OCINumber *number,
                   1004:                          uword rsl_length, uword rsl_flag, dvoid *rsl _*/);
                   1005: #else /* ANSI C */
                   1006: sword OCINumberToInt(    OCIError *err, CONST OCINumber *number,
                   1007:                          uword rsl_length, uword rsl_flag, dvoid *rsl    );
                   1008: #endif
                   1009: /*
                   1010:    NAME: OCINumberToInt - OCINumber convert number TO Integer
                   1011:    PARAMETERS:
                   1012:         err (IN/OUT) - error handle. If there is an error, it is
                   1013:                 recorded in 'err' and this function returns OCI_ERROR.
                   1014:                 The error recorded in 'err' can be retrieved by calling
                   1015:                 OCIErrorGet().
                   1016:         number (IN) - number to be converted
                   1017:         rsl_length (IN) - size of the desired result
                   1018:         rsl_s_flag (IN) - flag denoting the desired sign of the output; valid 
                   1019:                 values are OCI_NUMBER_UNSIGNED, OCI_NUMBER_SIGNED
                   1020:         rsl (OUT) - pointer to space for the result
                   1021:    DESCRIPTION:
                   1022:         Native type conversion function.
                   1023:         Converts the given Oracle number into an xbx (e.g. ub2, ub4, sb2 etc.)
                   1024:    RETURNS:
                   1025:         OCI_SUCCESS if the function completes successfully.
                   1026:         OCI_INVALID_HANDLE if 'err' is NULL.
                   1027:         OCI_ERROR if
                   1028:          'number' or 'rsl' is null
                   1029:           integer value of 'number' is too big -- overflow
                   1030:           integer value of 'number' is too small -- underflow
                   1031:           invalid sign flag value ('rsl_s_flag')
                   1032:  */
                   1033: 
                   1034: /*--------------------------- OCINumberFromInt ------------------------------*/
                   1035: 
                   1036: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   1037: sword OCINumberFromInt(/*_ OCIError *err, CONST dvoid *inum, uword inum_length,
                   1038:                          uword inum_s_flag, OCINumber *number _*/);
                   1039: #else /* ANSI C */
                   1040: sword OCINumberFromInt(    OCIError *err, CONST dvoid *inum, uword inum_length,
                   1041:                          uword inum_s_flag, OCINumber *number    );
                   1042: #endif
                   1043: /*
                   1044:    NAME: OCINumberFromInt - OCINumber convert Integer TO Number 
                   1045:    PARAMETERS:
                   1046:         err (IN/OUT) - error handle. If there is an error, it is
                   1047:                 recorded in 'err' and this function returns OCI_ERROR.
                   1048:                 The error recorded in 'err' can be retrieved by calling
                   1049:                 OCIErrorGet().
                   1050:         inum (IN) - pointer to the integer to be converted
                   1051:         inum_length (IN) - size of the integer
                   1052:         inum_s_flag (IN) - flag that designates the sign of the integer; valid 
                   1053:                 values are OCI_NUMBER_UNSIGNED, OCI_NUMBER_SIGNED
                   1054:         number (OUT) - given integer converted to Oracle number
                   1055:    DESCRIPTION:
                   1056:         Native type conversion function. Converts any Oracle standard
                   1057:         machine-native integer type (xbx) to an Oracle number.
                   1058:    RETURNS:
                   1059:         OCI_SUCCESS if the function completes successfully.
                   1060:         OCI_INVALID_HANDLE if 'err' is NULL.
                   1061:         OCI_ERROR if
                   1062:          'number' or 'inum' is null
                   1063:           integer too BIG -- the number is too large to fit into an Oracle
                   1064:                 number
                   1065:           invalid sign flag value ('inum_s_flag')
                   1066:  */
                   1067: 
                   1068: /*------------------------- OCINumberToReal ---------------------------------*/
                   1069: 
                   1070: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   1071: sword OCINumberToReal(/*_ OCIError *err, CONST OCINumber *number,
                   1072:                           uword rsl_length, dvoid *rsl _*/);
                   1073: #else /* ANSI C */
                   1074: sword OCINumberToReal(    OCIError *err, CONST OCINumber *number,
                   1075:                           uword rsl_length, dvoid *rsl    );
                   1076: #endif
                   1077: /*
                   1078:    NAME: OCINumberToReal - OCINumber convert number TO Real
                   1079:    PARAMETERS:
                   1080:         err (IN/OUT) - error handle. If there is an error, it is
                   1081:                 recorded in 'err' and this function returns OCI_ERROR.
                   1082:                 The error recorded in 'err' can be retrieved by calling
                   1083:                 OCIErrorGet().
                   1084:         number (IN) - number to be converted
                   1085:         rsl_length (IN) - is the size of the desired result, 
                   1086:                 sizeof( float | double | long double)
                   1087:         rsl (OUT) - pointer to space for storing the result
                   1088:    DESCRIPTION:
                   1089:         Native type conversion function. Converts an Oracle number into a
                   1090:         machine-native real type. This function only converts numbers up to
                   1091:         LDBL_DIG, DBL_DIG, or FLT_DIG digits of precision and removes
                   1092:         trailing zeroes. The above constants are defined in float.h
                   1093:    RETURNS:
                   1094:         OCI_SUCCESS if the function completes successfully.
                   1095:         OCI_INVALID_HANDLE if 'err' is NULL.
                   1096:         OCI_ERROR if
                   1097:          'number' or 'rsl' is null
                   1098:          'rsl_length' is 0
                   1099:  */
                   1100: 
                   1101: /*-------------------------- OCINumberFromReal ------------------------------*/
                   1102: 
                   1103: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   1104: sword OCINumberFromReal(/*_ OCIError *err, CONST dvoid *rnum,
                   1105:                             uword rnum_length, OCINumber *number _*/);
                   1106: #else /* ANSI C */
                   1107: sword OCINumberFromReal(    OCIError *err, CONST dvoid *rnum,
                   1108:                             uword rnum_length, OCINumber *number    );
                   1109: #endif
                   1110: /*
                   1111:    NAME: OCINumberFromReal - OCINumber convert Real TO Number 
                   1112:    PARAMETERS:
                   1113:         err (IN/OUT) - error handle. If there is an error, it is
                   1114:                 recorded in 'err' and this function returns OCI_ERROR.
                   1115:                 The error recorded in 'err' can be retrieved by calling
                   1116:                 OCIErrorGet().
                   1117:         rnum (IN) - pointer to the floating point number to be converted
                   1118:         rnum_length (IN) - size of the desired result, i.e.
                   1119:                 sizeof({float | double | long double})
                   1120:         number (OUT) - given float converted to Oracle number
                   1121:    DESCRIPTION:
                   1122:         Native type conversion function. Converts a machine-native floating
                   1123:         point type to an Oracle number.
                   1124:    RETURNS:
                   1125:         OCI_SUCCESS if the function completes successfully.
                   1126:         OCI_INVALID_HANDLE if 'err' is NULL.
                   1127:         OCI_ERROR if
                   1128:          'number' or 'rnum' is null
                   1129:          'rnum_length' is 0
                   1130:  */
                   1131: 
                   1132: /*----------------------------- OCINumberCmp --------------------------------*/
                   1133: 
                   1134: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   1135: sword OCINumberCmp(/*_ OCIError *err, CONST OCINumber *number1, 
                   1136:                        CONST OCINumber *number2, sword *result _*/);
                   1137: #else /* ANSI C */
                   1138: sword OCINumberCmp(    OCIError *err, CONST OCINumber *number1, 
                   1139:                        CONST OCINumber *number2, sword *result    );
                   1140: #endif
                   1141: /*
                   1142:    NAME: OCINumberCmp - OCINumber CoMPare numbers 
                   1143:    PARAMETERS:
                   1144:         err (IN/OUT) - error handle. If there is an error, it is
                   1145:                 recorded in 'err' and this function returns OCI_ERROR.
                   1146:                 The error recorded in 'err' can be retrieved by calling
                   1147:                 OCIErrorGet().
                   1148:         number1, number2 (IN) - numbers to be compared
                   1149:         result (OUT) - 0 if equal, negative if number1 < number2, 
                   1150:                 positive if number1 > number2 
                   1151:    DESCRIPTION:
                   1152:         The function OCINumberCmp compares two numbers.
                   1153:    RETURNS:
                   1154:         OCI_SUCCESS if the function completes successfully.
                   1155:         OCI_INVALID_HANDLE if 'err' is NULL.
                   1156:         OCI_ERROR if
                   1157:             'number1' or 'number2' or 'result' is null 
                   1158:  */
                   1159: 
                   1160: /*---------------------------- OCINumberSign --------------------------------*/
                   1161: 
                   1162: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   1163: sword OCINumberSign(/*_ OCIError *err, CONST OCINumber *number,
                   1164:                         sword *result _*/);
                   1165: #else /* ANSI C */
                   1166: sword OCINumberSign(    OCIError *err, CONST OCINumber *number,
                   1167:                         sword *result    );
                   1168: #endif
                   1169: /*
                   1170:    NAME: OCINumberSign - OCINumber obtains SiGN of an Oracle number
                   1171:    PARAMETERS:
                   1172:         err (IN/OUT) - error handle. If there is an error, it is
                   1173:                 recorded in 'err' and this function returns OCI_ERROR.
                   1174:                 The error recorded in 'err' can be retrieved by calling
                   1175:                 OCIErrorGet().
                   1176:         number (IN) - number whose sign is returned
                   1177:         result (OUT) - 0 if number == 0, -1 if number < 0, 
                   1178:                 1 if number > 0 
                   1179:    DESCRIPTION:
                   1180:         Obtains sign of an Oracle number
                   1181:    RETURNS:
                   1182:         OCI_SUCCESS if the function completes successfully.
                   1183:         OCI_INVALID_HANDLE if 'err' is NULL.
                   1184:         OCI_ERROR if
                   1185:             'number' or 'result' is null
                   1186:  */
                   1187: 
                   1188: /*---------------------------- OCINumberIsZero ------------------------------*/
                   1189: 
                   1190: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   1191: sword OCINumberIsZero(/*_ OCIError *err, CONST OCINumber *number,
                   1192:                           boolean *result _*/);
                   1193: #else /* ANSI C */
                   1194: sword OCINumberIsZero(    OCIError *err, CONST OCINumber *number,
                   1195:                           boolean *result    );
                   1196: #endif
                   1197: /*
                   1198:    NAME: OCINumberIsZero - OCINumber comparison with ZERo
                   1199:    PARAMETERS:
                   1200:         err (IN/OUT) - error handle. If there is an error, it is
                   1201:                 recorded in 'err' and this function returns OCI_ERROR.
                   1202:                 The error recorded in 'err' can be retrieved by calling
                   1203:                 OCIErrorGet().
                   1204:         number (IN) - numbers to be compared
                   1205:         result (OUT) - set to TRUE if equal to zero else FALSE
                   1206:    DESCRIPTION:
                   1207:         Test if the given number is equal to zero.
                   1208:    RETURNS:
                   1209:         OCI_SUCCESS if the function completes successfully.
                   1210:         OCI_INVALID_HANDLE if 'err' is NULL.
                   1211:         OCI_ERROR if
                   1212:             'number' or 'result' is null
                   1213:  */
                   1214: 
                   1215: /*---------------------------- OCINumberIsInt -------------------------------*/
                   1216: 
                   1217: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   1218: sword OCINumberIsInt(/*_ OCIError *err, CONST OCINumber *number,
                   1219:                           boolean *result _*/);
                   1220: #else /* ANSI C */
                   1221: sword OCINumberIsInt(    OCIError *err, CONST OCINumber *number,
                   1222:                           boolean *result    );
                   1223: #endif
                   1224: /*
                   1225:    NAME: OCINumberIsInt - OCINumber Is Integer value.
                   1226:    PARAMETERS:
                   1227:         err (IN/OUT) - error handle. If there is an error, it is
                   1228:                 recorded in 'err' and this function returns OCI_ERROR.
                   1229:                 The error recorded in 'err' can be retrieved by calling
                   1230:                 OCIErrorGet().
                   1231:         number (IN) - number to be tested
                   1232:         result (OUT) - set to TRUE if integer value else FALSE
                   1233:    DESCRIPTION:
                   1234:         Test if the given number is an integer value.
                   1235:    RETURNS:
                   1236:         OCI_SUCCESS if the function completes successfully.
                   1237:         OCI_INVALID_HANDLE if 'err' is NULL.
                   1238:         OCI_ERROR if
                   1239:             'number' or 'result' is null
                   1240:  */
                   1241: 
                   1242: /*-------------------------- OCINumberAssign --------------------------------*/
                   1243:  
                   1244: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   1245: sword OCINumberAssign(/*_ OCIError *err, CONST OCINumber *from,
                   1246:                           OCINumber *to _*/);
                   1247: #else /* ANSI C */
                   1248: sword OCINumberAssign(    OCIError *err, CONST OCINumber *from,
                   1249:                           OCINumber *to    );
                   1250: #endif
                   1251: /*
                   1252:    NAME: OCINumberAssign - OCINumber ASsiGn number
                   1253:    PARAMETERS:
                   1254:         err (IN/OUT) - error handle. If there is an error, it is
                   1255:                 recorded in 'err' and this function returns OCI_ERROR.
                   1256:                 The error recorded in 'err' can be retrieved by calling
                   1257:                 OCIErrorGet().
                   1258:         from (IN) - number to be assigned
                   1259:         to (OUT) - number copied into
                   1260:    DESCRIPTION:
                   1261:         Assign number 'from' to 'to'.
                   1262:    RETURNS:
                   1263:         OCI_SUCCESS if the function completes successfully.
                   1264:         OCI_INVALID_HANDLE if 'err' is NULL.
                   1265:         OCI_ERROR if
                   1266:           'from' or 'to' is null
                   1267:  */
                   1268: 
                   1269: /*----------------------------- OCINumberAbs --------------------------------*/
                   1270: 
                   1271: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   1272: sword OCINumberAbs(/*_ OCIError *err, CONST OCINumber *number,
                   1273:                        OCINumber *result _*/);
                   1274: #else /* ANSI C */
                   1275: sword OCINumberAbs(    OCIError *err, CONST OCINumber *number,
                   1276:                        OCINumber *result    );
                   1277: #endif
                   1278: /*
                   1279:    NAME: OCINumberAbs - OCINumber compute ABSolute value
                   1280:    PARAMETERS:
                   1281:         err (IN/OUT) - error handle. If there is an error, it is
                   1282:                 recorded in 'err' and this function returns OCI_ERROR.
                   1283:                 The error recorded in 'err' can be retrieved by calling
                   1284:                 OCIErrorGet().
                   1285:         number (IN) - input number
                   1286:         result (OUT) - output which will contain the absolue value of the
                   1287:                 input number
                   1288:    DESCRIPTION:
                   1289:         Computes the absolute value of an Oracle number.
                   1290:    RETURNS:
                   1291:         OCI_SUCCESS if the function completes successfully.
                   1292:         OCI_INVALID_HANDLE if 'err' is NULL.
                   1293:         OCI_ERROR if
                   1294:           any of the number arguments is null
                   1295:  */
                   1296: 
                   1297: /*---------------------------- OCINumberCeil --------------------------------*/
                   1298: 
                   1299: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   1300: sword OCINumberCeil(/*_ OCIError *err, CONST OCINumber *number,
                   1301:                         OCINumber *result _*/);
                   1302: #else /* ANSI C */
                   1303: sword OCINumberCeil(    OCIError *err, CONST OCINumber *number,
                   1304:                         OCINumber *result    );
                   1305: #endif
                   1306: /*
                   1307:    NAME: OCINumberCeil - OCINumber compute the CEiL value of an Oracle number
                   1308:    PARAMETERS:
                   1309:         err (IN/OUT) - error handle. If there is an error, it is
                   1310:                 recorded in 'err' and this function returns OCI_ERROR.
                   1311:                 The error recorded in 'err' can be retrieved by calling
                   1312:                 OCIErrorGet().
                   1313:         number (IN) - input number
                   1314:         result (OUT) - output which will contain the ceil value of the
                   1315:                 input number
                   1316:    DESCRIPTION:
                   1317:         Computes the ceil value of an Oracle number.
                   1318:    RETURNS:
                   1319:         OCI_SUCCESS if the function completes successfully.
                   1320:         OCI_INVALID_HANDLE if 'err' is NULL.
                   1321:         OCI_ERROR if
                   1322:           any of the number arguments is null
                   1323:  */
                   1324: 
                   1325: /*--------------------------- OCINumberFloor --------------------------------*/
                   1326: 
                   1327: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   1328: sword OCINumberFloor(/*_ OCIError *err, CONST OCINumber *number, 
                   1329:                          OCINumber *result _*/);
                   1330: #else /* ANSI C */
                   1331: sword OCINumberFloor(    OCIError *err, CONST OCINumber *number, 
                   1332:                          OCINumber *result    );
                   1333: #endif
                   1334: /*
                   1335:    NAME: OCINumberFloor - OCINumber compute the FLooR value of an Oracle number
                   1336:    PARAMETERS:
                   1337:         err (IN/OUT) - error handle. If there is an error, it is
                   1338:                 recorded in 'err' and this function returns OCI_ERROR.
                   1339:                 The error recorded in 'err' can be retrieved by calling
                   1340:                 OCIErrorGet().
                   1341:         number (IN) - input number
                   1342:         result (OUT) - output which will contain the floor value of the
                   1343:                 input number
                   1344:    DESCRIPTION:
                   1345:         Computes the floor value of an Oracle number.
                   1346:    RETURNS:
                   1347:         OCI_SUCCESS if the function completes successfully.
                   1348:         OCI_INVALID_HANDLE if 'err' is NULL.
                   1349:         OCI_ERROR if
                   1350:           any of the number arguments is null
                   1351:  */
                   1352: 
                   1353: /*----------------------------- OCINumberSqrt -------------------------------*/
                   1354: 
                   1355: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   1356: sword OCINumberSqrt(/*_ OCIError *err, CONST OCINumber *number, 
                   1357:                        OCINumber *result _*/);
                   1358: #else /* ANSI C */
                   1359: sword OCINumberSqrt(    OCIError *err, CONST OCINumber *number, 
                   1360:                        OCINumber *result    );
                   1361: #endif
                   1362: /*
                   1363:    NAME: OCINumberSqrt - OCINumber compute the SQuare Root of an Oracle number
                   1364:    PARAMETERS:
                   1365:         err (IN/OUT) - error handle. If there is an error, it is
                   1366:                 recorded in 'err' and this function returns OCI_ERROR.
                   1367:                 The error recorded in 'err' can be retrieved by calling
                   1368:                 OCIErrorGet().
                   1369:         number (IN) - input number
                   1370:         result (OUT) - output which will contain the square root of the
                   1371:                 input number
                   1372:    DESCRIPTION:
                   1373:         Computes the square root of an Oracle number.
                   1374:    RETURNS:
                   1375:         OCI_SUCCESS if the function completes successfully.
                   1376:         OCI_INVALID_HANDLE if 'err' is NULL.
                   1377:         OCI_ERROR if
                   1378:           any of the number arguments is null
                   1379:           'number' is negative
                   1380:  */
                   1381: 
                   1382: /*--------------------------- OCINumberTrunc --------------------------------*/
                   1383: 
                   1384: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   1385: sword OCINumberTrunc(/*_ OCIError *err, CONST OCINumber *number, 
                   1386:                          sword decplace, OCINumber *result _*/);
                   1387: #else /* ANSI C */
                   1388: sword OCINumberTrunc(    OCIError *err, CONST OCINumber *number, 
                   1389:                          sword decplace, OCINumber *result    );
                   1390: #endif
                   1391: /*
                   1392:    NAME: OCINumberTrunc - OCINumber TRUncate an Oracle number at a 
                   1393:                          specified decimal place
                   1394:    PARAMETERS:
                   1395:         err (IN/OUT) - error handle. If there is an error, it is
                   1396:                 recorded in 'err' and this function returns OCI_ERROR.
                   1397:                 The error recorded in 'err' can be retrieved by calling
                   1398:                 OCIErrorGet().
                   1399:         number (IN) - input number
                   1400:         decplace (IN) - number of decimal digits to the right of the 
                   1401:                 decimal point to truncate at. Negative values are allowed.
                   1402:         result (OUT) - output of truncation
                   1403:    DESCRIPTION:
                   1404:         Truncate an Oracle number at a specified decimal place
                   1405:    RETURNS:
                   1406:         OCI_SUCCESS if the function completes successfully.
                   1407:         OCI_INVALID_HANDLE if 'err' is NULL.
                   1408:         OCI_ERROR if
                   1409:           any of the number arguments is null
                   1410:  */
                   1411: 
                   1412: /*----------------------------- OCINumberPower ------------------------------*/
                   1413: 
                   1414: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   1415: sword OCINumberPower(/*_ OCIError *err, CONST OCINumber *base, 
                   1416:                          CONST OCINumber *number, OCINumber *result _*/);
                   1417: #else /* ANSI C */
                   1418: sword OCINumberPower(    OCIError *err, CONST OCINumber *base, 
                   1419:                          CONST OCINumber *number, OCINumber *result    );
                   1420: #endif
                   1421: /*
                   1422:    NAME: OCINumberPower - OCINumber takes an arbitary Base to an 
                   1423:                           arbitary Power
                   1424:    PARAMETERS:
                   1425:         err (IN/OUT) - error handle. If there is an error, it is
                   1426:                 recorded in 'err' and this function returns OCI_ERROR.
                   1427:                 The error recorded in 'err' can be retrieved by calling
                   1428:                 OCIErrorGet().
                   1429:         base (IN) - base of the exponentiation
                   1430:         number (IN) - exponent to which the base is to be raised
                   1431:         result (OUT) - output of exponentiation
                   1432:    DESCRIPTION:
                   1433:         Takes an arbitary base to an arbitary power.
                   1434:    RETURNS:
                   1435:         OCI_SUCCESS if the function completes successfully.
                   1436:         OCI_INVALID_HANDLE if 'err' is NULL.
                   1437:         OCI_ERROR if
                   1438:           any of the number arguments is null
                   1439:  */
                   1440: 
                   1441: /*--------------------------- OCINumberRound --------------------------------*/
                   1442: 
                   1443: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   1444: sword OCINumberRound(/*_ OCIError *err, CONST OCINumber *number,
                   1445:                          sword decplace, OCINumber *result _*/);
                   1446: #else /* ANSI C */
                   1447: sword OCINumberRound(    OCIError *err, CONST OCINumber *number,
                   1448:                          sword decplace, OCINumber *result    );
                   1449: #endif
                   1450: /*
                   1451:    NAME: OCINumberRound - OCINumber ROUnds an Oracle number to a specified 
                   1452:                   decimal place
                   1453:    PARAMETERS:
                   1454:         err (IN/OUT) - error handle. If there is an error, it is
                   1455:                 recorded in 'err' and this function returns OCI_ERROR.
                   1456:                 The error recorded in 'err' can be retrieved by calling
                   1457:                 OCIErrorGet().
                   1458:         number (IN) - round this number and return result in 'result'
                   1459:         decplace (IN) - number of decimal digits to the right of the 
                   1460:                 decimal point to round to. Negative values are allowed.
                   1461:         result (OUT) - output of rounding
                   1462:    DESCRIPTION:
                   1463:         Rounds an Oracle number to a specified decimal place
                   1464:    RETURNS:
                   1465:         OCI_SUCCESS if the function completes successfully.
                   1466:         OCI_INVALID_HANDLE if 'err' is NULL.
                   1467:         OCI_ERROR if
                   1468:           any of the number arguments is null
                   1469:  */
                   1470: 
                   1471: /*--------------------------- OCINumberPrec ---------------------------------*/
                   1472: 
                   1473: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   1474: sword OCINumberPrec(/*_ OCIError *err, CONST OCINumber *number,
                   1475:                          eword nDigs, OCINumber *result _*/);
                   1476: #else /* ANSI C */
                   1477: sword OCINumberPrec(    OCIError *err, CONST OCINumber *number,
                   1478:                          eword nDigs, OCINumber *result    );
                   1479: #endif
                   1480: /*
                   1481:    NAME: OCINumberPrec - Rounds an Oracle number to a specified number of
                   1482:                          decimal digits.
                   1483:    PARAMETERS:
                   1484:         err (IN/OUT) - error handle. If there is an error, it is
                   1485:                 recorded in 'err' and this function returns OCI_ERROR.
                   1486:                 The error recorded in 'err' can be retrieved by calling
                   1487:                 OCIErrorGet().
                   1488:         number (IN) - number for which to set precision.
                   1489:        nDig   (IN) - number of decimal digits desired in the result.
                   1490:         result (OUT) - result.
                   1491:    DESCRIPTION:
                   1492:         Performs a floating point round with respect to the number
                   1493:        of digits.
                   1494:    RETURNS:
                   1495:         OCI_SUCCESS if the function completes successfully.
                   1496:         OCI_INVALID_HANDLE if 'err' is NULL.
                   1497:         OCI_ERROR if
                   1498:           any of the number arguments is null
                   1499:  */
                   1500: 
                   1501: /*----------------------------- OCINumberSin --------------------------------*/
                   1502: 
                   1503: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   1504: sword OCINumberSin(/*_ OCIError *err, CONST OCINumber *number,
                   1505:                        OCINumber *result _*/);
                   1506: #else /* ANSI C */
                   1507: sword OCINumberSin(    OCIError *err, CONST OCINumber *number,
                   1508:                        OCINumber *result    );
                   1509: #endif
                   1510: /*
                   1511:    NAME: OCINumberSin - OCINumber takes the SINe of an Oracle number
                   1512:    PARAMETERS:
                   1513:         err (IN/OUT) - error handle. If there is an error, it is
                   1514:                 recorded in 'err' and this function returns OCI_ERROR.
                   1515:                 The error recorded in 'err' can be retrieved by calling
                   1516:                 OCIErrorGet().
                   1517:         number (IN) - argument of the sine in radians
                   1518:         result (OUT) - result of the sine
                   1519:    DESCRIPTION:
                   1520:         Takes the sine in radians of an Oracle number.
                   1521:    RETURNS:
                   1522:         OCI_SUCCESS if the function completes successfully.
                   1523:         OCI_INVALID_HANDLE if 'err' is NULL.
                   1524:         OCI_ERROR if
                   1525:           any of the number arguments is null
                   1526:  */
                   1527: 
                   1528: /*-------------------------- OCINumberArcSin --------------------------------*/
                   1529: 
                   1530: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   1531: sword OCINumberArcSin(/*_ OCIError *err, CONST OCINumber *number,
                   1532:                           OCINumber *result _*/);
                   1533: #else /* ANSI C */
                   1534: sword OCINumberArcSin(    OCIError *err, CONST OCINumber *number,
                   1535:                           OCINumber *result    );
                   1536: #endif
                   1537: /*
                   1538:    NAME: OCINumberArcSin - OCINumber takes the Arc SINe of an Oracle number
                   1539:    PARAMETERS:
                   1540:         err (IN/OUT) - error handle. If there is an error, it is
                   1541:                 recorded in 'err' and this function returns OCI_ERROR.
                   1542:                 The error recorded in 'err' can be retrieved by calling
                   1543:                 OCIErrorGet().
                   1544:         number (IN) - argument of the arc sine
                   1545:         result (OUT) - result of the arc sine in radians
                   1546:    DESCRIPTION:
                   1547:         Takes the arc sine in radians of an Oracle number.
                   1548:    RETURNS:
                   1549:         OCI_SUCCESS if the function completes successfully.
                   1550:         OCI_INVALID_HANDLE if 'err' is NULL.
                   1551:         OCI_ERROR if
                   1552:           any of the number arguments is null
                   1553:           'number' is < -1 or 'number' is > 1.
                   1554:  */
                   1555: 
                   1556: /*-------------------------- OCINumberHypSin --------------------------------*/
                   1557: 
                   1558: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   1559: sword OCINumberHypSin(/*_ OCIError *err, CONST OCINumber *number, 
                   1560:                           OCINumber *result _*/);
                   1561: #else /* ANSI C */
                   1562: sword OCINumberHypSin(    OCIError *err, CONST OCINumber *number, 
                   1563:                           OCINumber *result    );
                   1564: #endif
                   1565: /*
                   1566:    NAME: OCINumberHypSin - OCINumber takes the SiNe Hyperbolic of an 
                   1567:                           Oracle number
                   1568:    PARAMETERS:
                   1569:         err (IN/OUT) - error handle. If there is an error, it is
                   1570:                 recorded in 'err' and this function returns OCI_ERROR.
                   1571:                 The error recorded in 'err' can be retrieved by calling
                   1572:                 OCIErrorGet().
                   1573:         number (IN) - argument of the sine hyperbolic
                   1574:         result (OUT) - result of the sine hyperbolic
                   1575:    DESCRIPTION:
                   1576:         Takes the hyperbolic sine of an Oracle number.
                   1577:    RETURNS:
                   1578:         OCI_SUCCESS if the function completes successfully.
                   1579:         OCI_INVALID_HANDLE if 'err' is NULL.
                   1580:         OCI_ERROR if
                   1581:           any of the number arguments is null
                   1582:    NOTES:
                   1583:         An Oracle number overflow causes an unpredictable result value.
                   1584:  */
                   1585: 
                   1586: /*----------------------------- OCINumberCos --------------------------------*/
                   1587: 
                   1588: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   1589: sword OCINumberCos(/*_ OCIError *err, CONST OCINumber *number, 
                   1590:                        OCINumber *result _*/);
                   1591: #else /* ANSI C */
                   1592: sword OCINumberCos(    OCIError *err, CONST OCINumber *number, 
                   1593:                        OCINumber *result    );
                   1594: #endif
                   1595: /*
                   1596:    NAME: OCINumberCos - OCINumber takes the COSine of an Oracle number
                   1597:    PARAMETERS:
                   1598:         err (IN/OUT) - error handle. If there is an error, it is
                   1599:                 recorded in 'err' and this function returns OCI_ERROR.
                   1600:                 The error recorded in 'err' can be retrieved by calling
                   1601:                 OCIErrorGet().
                   1602:         number (IN) - argument of the cosine in radians
                   1603:         result (OUT) - result of the cosine
                   1604:    DESCRIPTION:
                   1605:         Takes the cosine in radians of an Oracle number.
                   1606:    RETURNS:
                   1607:         OCI_SUCCESS if the function completes successfully.
                   1608:         OCI_INVALID_HANDLE if 'err' is NULL.
                   1609:         OCI_ERROR if
                   1610:           any of the number arguments is null
                   1611:  */
                   1612: 
                   1613: /*-------------------------- OCINumberArcCos --------------------------------*/
                   1614: 
                   1615: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   1616: sword OCINumberArcCos(/*_ OCIError *err, CONST OCINumber *number, 
                   1617:                           OCINumber *result _*/);
                   1618: #else /* ANSI C */
                   1619: sword OCINumberArcCos(    OCIError *err, CONST OCINumber *number, 
                   1620:                           OCINumber *result    );
                   1621: #endif
                   1622: /*
                   1623:    NAME: OCINumberArcCos - OCINumber takes the Arc COSine of an Oracle number
                   1624:    PARAMETERS:
                   1625:         err (IN/OUT) - error handle. If there is an error, it is
                   1626:                 recorded in 'err' and this function returns OCI_ERROR.
                   1627:                 The error recorded in 'err' can be retrieved by calling
                   1628:                 OCIErrorGet().
                   1629:         number (IN) - argument of the arc cosine
                   1630:         result (OUT) - result of the arc cosine in radians
                   1631:    DESCRIPTION:
                   1632:         Takes the arc cosine in radians of an Oracle number.
                   1633:    RETURNS:
                   1634:         OCI_SUCCESS if the function completes successfully.
                   1635:         OCI_INVALID_HANDLE if 'err' is NULL.
                   1636:         OCI_ERROR if
                   1637:           any of the number arguments is null
                   1638:           'number' is < -1 or 'number' is > 1.
                   1639:  */
                   1640: 
                   1641: /*-------------------------- OCINumberHypCos --------------------------------*/
                   1642: 
                   1643: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   1644: sword OCINumberHypCos(/*_ OCIError *err, CONST OCINumber *number, 
                   1645:                           OCINumber *result _*/);
                   1646: #else /* ANSI C */
                   1647: sword OCINumberHypCos(    OCIError *err, CONST OCINumber *number, 
                   1648:                           OCINumber *result    );
                   1649: #endif
                   1650: /*
                   1651:    NAME: OCINumberHypCos - OCINumber takes the CoSine Hyperbolic of an 
                   1652:                            Oracle number
                   1653:    PARAMETERS:
                   1654:         err (IN/OUT) - error handle. If there is an error, it is
                   1655:                 recorded in 'err' and this function returns OCI_ERROR.
                   1656:                 The error recorded in 'err' can be retrieved by calling
                   1657:                 OCIErrorGet().
                   1658:         number (IN) - argument of the cosine hyperbolic
                   1659:         result (OUT) - result of the cosine hyperbolic
                   1660:    DESCRIPTION:
                   1661:         Takes the hyperbolic cosine of an Oracle number.
                   1662:    RETURNS:
                   1663:         OCI_SUCCESS if the function completes successfully.
                   1664:         OCI_INVALID_HANDLE if 'err' is NULL.
                   1665:         OCI_ERROR if
                   1666:           any of the number arguments is null
                   1667:    NOTES:
                   1668:         An Oracle number overflow causes an unpredictable result value.
                   1669:  */
                   1670: 
                   1671: /*----------------------------- OCINumberTan --------------------------------*/
                   1672: 
                   1673: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   1674: sword OCINumberTan(/*_ OCIError *err, CONST OCINumber *number, 
                   1675:                        OCINumber *result _*/);
                   1676: #else /* ANSI C */
                   1677: sword OCINumberTan(    OCIError *err, CONST OCINumber *number, 
                   1678:                        OCINumber *result    );
                   1679: #endif
                   1680: /*
                   1681:    NAME: OCINumberTan - OCINumber takes the TANgent of an Oracle number
                   1682:    PARAMETERS:
                   1683:         err (IN/OUT) - error handle. If there is an error, it is
                   1684:                 recorded in 'err' and this function returns OCI_ERROR.
                   1685:                 The error recorded in 'err' can be retrieved by calling
                   1686:                 OCIErrorGet().
                   1687:         number (IN) - argument of the tangent in radians
                   1688:         result (OUT) - result of the tangent
                   1689:    DESCRIPTION:
                   1690:         Takes the tangent in radians of an Oracle number.
                   1691:    RETURNS:
                   1692:         OCI_SUCCESS if the function completes successfully.
                   1693:         OCI_INVALID_HANDLE if 'err' is NULL.
                   1694:         OCI_ERROR if
                   1695:           any of the number arguments is null
                   1696:  */
                   1697: 
                   1698: /*-------------------------- OCINumberArcTan --------------------------------*/
                   1699: 
                   1700: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   1701: sword OCINumberArcTan(/*_ OCIError *err, CONST OCINumber *number, 
                   1702:                           OCINumber *result _*/);
                   1703: #else /* ANSI C */
                   1704: sword OCINumberArcTan(    OCIError *err, CONST OCINumber *number, 
                   1705:                           OCINumber *result    );
                   1706: #endif
                   1707: /*
                   1708:    NAME: OCINumberArcTan - OCINumber takes the Arc TANgent of an Oracle number
                   1709:    PARAMETERS:
                   1710:         err (IN/OUT) - error handle. If there is an error, it is
                   1711:                 recorded in 'err' and this function returns OCI_ERROR.
                   1712:                 The error recorded in 'err' can be retrieved by calling
                   1713:                 OCIErrorGet().
                   1714:         number (IN) - argument of the arc tangent
                   1715:         result (OUT) - result of the arc tangent in radians
                   1716:    DESCRIPTION:
                   1717:         Takes the arc tangent in radians of an Oracle number.
                   1718:    RETURNS:
                   1719:         OCI_SUCCESS if the function completes successfully.
                   1720:         OCI_INVALID_HANDLE if 'err' is NULL.
                   1721:         OCI_ERROR if
                   1722:           any of the number arguments is null
                   1723:  */
                   1724: 
                   1725: /*------------------------ OCINumberArcTan2 ---------------------------------*/
                   1726: 
                   1727: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   1728: sword OCINumberArcTan2(/*_ OCIError *err, CONST OCINumber *number1, 
                   1729:                            CONST OCINumber *number2, OCINumber *result _*/);
                   1730: #else /* ANSI C */
                   1731: sword OCINumberArcTan2(    OCIError *err, CONST OCINumber *number1, 
                   1732:                            CONST OCINumber *number2, OCINumber *result    );
                   1733: #endif
                   1734: /*
                   1735:    NAME: OCINumberArcTan2 - OCINumber takes the ATan2 of 2 Oracle numbers
                   1736:    PARAMETERS:
                   1737:         err (IN/OUT) - error handle. If there is an error, it is
                   1738:                 recorded in 'err' and this function returns OCI_ERROR.
                   1739:                 The error recorded in 'err' can be retrieved by calling
                   1740:                 OCIErrorGet().
                   1741:         number1 (IN) - first argument of atan2(y,x) function which 
                   1742:                corresponds to 'y' parameter in the function
                   1743:         number2 (IN) - second argument of atan2(y,x) function which 
                   1744:                corresponds to 'x' parameter in the function
                   1745:         result (OUT) - result of the atan2() in radians
                   1746:    DESCRIPTION:
                   1747:         Takes the atan2(number1, number2).
                   1748:    RETURNS:
                   1749:         OCI_SUCCESS if the function completes successfully.
                   1750:         OCI_INVALID_HANDLE if 'err' is NULL.
                   1751:         OCI_ERROR if
                   1752:           any of the number arguments is null
                   1753:           'number2' is 0
                   1754:  */
                   1755: 
                   1756: /*----------------------------- OCINumberHypTan -----------------------------*/
                   1757: 
                   1758: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   1759: sword OCINumberHypTan(/*_ OCIError *err, CONST OCINumber *number,
                   1760:                           OCINumber *result _*/);
                   1761: #else /* ANSI C */
                   1762: sword OCINumberHypTan(    OCIError *err, CONST OCINumber *number, 
                   1763:                           OCINumber *result    );
                   1764: #endif
                   1765: /*
                   1766:    NAME: OCINumberHypTan - OCINumber takes the TaNgent Hyperbolic of an Oracle
                   1767:                            number
                   1768:    PARAMETERS:
                   1769:         err (IN/OUT) - error handle. If there is an error, it is
                   1770:                 recorded in 'err' and this function returns OCI_ERROR.
                   1771:                 The error recorded in 'err' can be retrieved by calling
                   1772:                 OCIErrorGet().
                   1773:         number (IN) - argument of the tangent hyperbolic
                   1774:         result (OUT) - result of the tangent hyperbolic
                   1775:    DESCRIPTION:
                   1776:         Takes the hyperbolic tangent of an Oracle number.
                   1777:    RETURNS:
                   1778:         OCI_SUCCESS if the function completes successfully.
                   1779:         OCI_INVALID_HANDLE if 'err' is NULL.
                   1780:         OCI_ERROR if
                   1781:           any of the number arguments is null
                   1782:    NOTES:
                   1783:         An Oracle number overflow causes an unpredictable result value.
                   1784:  */
                   1785: 
                   1786: /*--------------------------- OCINumberExp ----------------------------------*/
                   1787: 
                   1788: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   1789: sword OCINumberExp(/*_ OCIError *err, CONST OCINumber *number, 
                   1790:                        OCINumber *result _*/);
                   1791: #else /* ANSI C */
                   1792: sword OCINumberExp(    OCIError *err, CONST OCINumber *number, 
                   1793:                        OCINumber *result    );
                   1794: #endif
                   1795: /*
                   1796:    NAME: OCINumberExp - OCINumber EXPonential
                   1797:    PARAMETERS:
                   1798:         err (IN/OUT) - error handle. If there is an error, it is
                   1799:                 recorded in 'err' and this function returns OCI_ERROR.
                   1800:                 The error recorded in 'err' can be retrieved by calling
                   1801:                 OCIErrorGet().
                   1802:         number (IN) - e raised to this Oracle number power
                   1803:         result (OUT) - output of exponentiation
                   1804:    DESCRIPTION:
                   1805:         Raises e to the specified Oracle number power
                   1806:    RETURNS:
                   1807:         OCI_SUCCESS if the function completes successfully.
                   1808:         OCI_INVALID_HANDLE if 'err' is NULL.
                   1809:         OCI_ERROR if
                   1810:           any of the number arguments is null
                   1811:  */
                   1812: 
                   1813: /*----------------------------- OCINumberLn ---------------------------------*/
                   1814: 
                   1815: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   1816: sword OCINumberLn(/*_ OCIError *err, CONST OCINumber *number, 
                   1817:                       OCINumber *result _*/);
                   1818: #else /* ANSI C */
                   1819: sword OCINumberLn(    OCIError *err, CONST OCINumber *number, 
                   1820:                       OCINumber *result    );
                   1821: #endif
                   1822: /*
                   1823:    NAME: OCINumberLn - OCINumber Logarithm Natural
                   1824:    PARAMETERS:
                   1825:         err (IN/OUT) - error handle. If there is an error, it is
                   1826:                 recorded in 'err' and this function returns OCI_ERROR.
                   1827:                 The error recorded in 'err' can be retrieved by calling
                   1828:                 OCIErrorGet().
                   1829:         number (IN) - logarithm of this number is computed
                   1830:         result (OUT) - logarithm result
                   1831:    DESCRIPTION:
                   1832:         Takes the logarithm of the given Oracle number with respect
                   1833:        to the given base.
                   1834:    RETURNS:
                   1835:         OCI_SUCCESS if the function completes successfully.
                   1836:         OCI_INVALID_HANDLE if 'err' is NULL.
                   1837:         OCI_ERROR if
                   1838:           any of the number arguments is null
                   1839:           'number' is <= 0
                   1840:  */
                   1841: 
                   1842: /*----------------------------- OCINumberLog --------------------------------*/
                   1843: 
                   1844: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   1845: sword OCINumberLog(/*_ OCIError *err, CONST OCINumber *base, 
                   1846:                        CONST OCINumber *number, OCINumber *result _*/);
                   1847: #else /* ANSI C */
                   1848: sword OCINumberLog(    OCIError *err, CONST OCINumber *base, 
                   1849:                        CONST OCINumber *number, OCINumber *result    );
                   1850: #endif
                   1851: /*
                   1852:    NAME: OCINumberLog - OCINumber LOGarithm any base
                   1853:    PARAMETERS:
                   1854:         err (IN/OUT) - error handle. If there is an error, it is
                   1855:                 recorded in 'err' and this function returns OCI_ERROR.
                   1856:                 The error recorded in 'err' can be retrieved by calling
                   1857:                 OCIErrorGet().
                   1858:         base (IN) - base of the logarithm
                   1859:         number (IN) - opearnd
                   1860:         result (OUT) - logarithm result
                   1861:    DESCRIPTION:
                   1862:         Takes the logarithm with the specified base of an Oracle number.
                   1863:    RETURNS:
                   1864:         OCI_SUCCESS if the function completes successfully.
                   1865:         OCI_INVALID_HANDLE if 'err' is NULL.
                   1866:         OCI_ERROR if
                   1867:           any of the number arguments is null
                   1868:           'number' is <= 0
                   1869:           'base' is <= 0
                   1870:  */
                   1871: 
                   1872: /*****************************************************************************/
                   1873: /*                             ORACLE DATE TYPE                              */
                   1874: /*****************************************************************************/
                   1875:  
                   1876: struct OCITime
                   1877: {
                   1878:   ub1 OCITimeHH;                          /* hours; range is 0 <= hours <=23 */
                   1879:   ub1 OCITimeMI;                     /* minutes; range is 0 <= minutes <= 59 */
                   1880:   ub1 OCITimeSS;                     /* seconds; range is 0 <= seconds <= 59 */
                   1881: };
                   1882: typedef struct OCITime OCITime;
                   1883: 
                   1884: /* 
                   1885:  * OCITime - OCI TiMe portion of date
                   1886:  *
                   1887:  * This structure should be treated as an opaque structure as the format
                   1888:  * of this structure may change. Use OCIDateGetTime/OCIDateSetTime 
                   1889:  * to manipulate time portion of OCIDate.
                   1890:  */
                   1891: 
                   1892: struct OCIDate
                   1893: {
                   1894:   sb2 OCIDateYYYY;         /* gregorian year; range is -4712 <= year <= 9999 */
                   1895:   ub1 OCIDateMM;                          /* month; range is 1 <= month < 12 */
                   1896:   ub1 OCIDateDD;                             /* day; range is 1 <= day <= 31 */
                   1897:   OCITime OCIDateTime;                                               /* time */
                   1898: };
                   1899: typedef struct OCIDate OCIDate;
                   1900: 
                   1901: /* 
                   1902:  * OCIDate - OCI oracle Date representation in C
                   1903:  *
                   1904:  * OCIDate represents the C mapping of Oracle date.
                   1905:  *
                   1906:  * This structure should be treated as an opaque structure as the format
                   1907:  * of this structure may change. Use OCIDateGetDate/OCIDateSetDate
                   1908:  * to access/initialize OCIDate.
                   1909:  *
                   1910:  * For binding variables of type OCIDate in OCI calls (OCIBindByName(),
                   1911:  * OCIBindByPos(), and OCIDefineByPos()) use the type code SQLT_ODT.
                   1912:  */
                   1913: 
                   1914: /*
                   1915:    EXAMPLE 
                   1916: 
                   1917:    The following example shows how to manipulate an attribute of type 
                   1918:    oracle date.
                   1919:   
                   1920:      #define FMT "Month dd, YYYY, HH:MI A.M."
                   1921:      #define LANG "American"
                   1922: 
                   1923:      struct person
                   1924:      {
                   1925:        OCIDate start_date;
                   1926:      };
                   1927:      typedef struct person person;
                   1928: 
                   1929:      OCIError *err;
                   1930:      person *joe;
                   1931:      sword status;                                          /o error status o/
                   1932:      
                   1933:      /o See oci.h for an example of how to initialize OCIError.
                   1934:       o For this example, assume the OCIEnv and OCIError has been
                   1935:       o initialized.
                   1936:       o/
                   1937: 
                   1938:      /o Pin joe person object in the object cache. See ori.h
                   1939:       o for an example on pinning objects. For this example, assume that
                   1940:       o joe is pointing to the pinned object.
                   1941:       o/
                   1942: 
                   1943:      /o set the start date of joe o/
                   1944:      OCIDateSetTime(&joe->start_date, 8, 0, 0);
                   1945:      OCIDateSetDate(&joe->start_date, 1990, 10, 5); 
                   1946: 
                   1947:      /o check if the date is valid o/
                   1948:      uword invalid;
                   1949:      if (OCIDateCheck(err, &joe->start_date, &invalid) != OCI_SUCCESS)
                   1950:        /o error handling code o/
                   1951:      if (invalid)
                   1952:        /o error handling code o/
                   1953: 
                   1954:      /o convert date for display purposes o/
                   1955:      char str[100];
                   1956:      ub4 strlen = sizeof(str);
                   1957:      if (OCIDateToText(err, &joe->start_date, FMT, sizeof(FMT)-1, LANG,
                   1958:                 sizeof(LANG)-1, &strlen, str) != OCI_SUCCESS)
                   1959:        /o error handling code o/
                   1960: 
                   1961:  */
                   1962: 
                   1963: /*--------------------------- OCIDateGetTime --------------------------------*/
                   1964: /* void OCIDateGetTime(/o_ CONST OCIDate *date, ub1 *hour, ub1 *min, 
                   1965:                            ub1 *sec _o/); */
                   1966: #define OCIDateGetTime(date, hour, min, sec) \
                   1967:   { \
                   1968:      *hour = (date)->OCIDateTime.OCITimeHH; \
                   1969:      *min = (date)->OCIDateTime.OCITimeMI; \
                   1970:      *sec = (date)->OCIDateTime.OCITimeSS; \
                   1971:   }
                   1972: /*
                   1973:    NAME: OCIDateGetTime - OCIDate Get Time portion of date
                   1974:    PARAMETERS:
                   1975:        date (IN) - Oracle date whose time data is retrieved
                   1976:        hour (OUT) - hour value returned
                   1977:        min (OUT) - minute value returned
                   1978:        sec (OUT) - second value returned
                   1979:    DESCRIPTION:
                   1980:        Return time inforamtion stored in the given date. The time
                   1981:        information returned is: hour, minute and seconds.
                   1982:    RETURNS:
                   1983:         NONE
                   1984:  */
                   1985: 
                   1986: /*--------------------------- OCIDateGetDate --------------------------------*/
                   1987: /* void OCIDateGetDate(/o_ CONST OCIDate *date, sb2 *year, ub1 *month, 
                   1988:                            ub1 *day _o/); */
                   1989: #define OCIDateGetDate(date, year, month, day) \
                   1990:   { \
                   1991:      *year = (date)->OCIDateYYYY; \
                   1992:      *month = (date)->OCIDateMM; \
                   1993:      *day = (date)->OCIDateDD; \
                   1994:   }
                   1995: /*
                   1996:    NAME: OCIDateGetDate - OCIDate Get Date (year, month, day) portion of date
                   1997:    PARAMETERS:
                   1998:        date (IN) - Oracle date whose year, month, day data is retrieved
                   1999:        year (OUT) - year value returned
                   2000:        month (OUT) - month value returned
                   2001:        day (OUT) - day value returned
                   2002:    DESCRIPTION:
                   2003:        Return year, month, day inforamtion stored in the given date.
                   2004:    RETURNS:
                   2005:         NONE
                   2006:  */
                   2007: 
                   2008: /*--------------------------- OCIDateSetTime --------------------------------*/
                   2009: /* void OCIDateSetTime(/o_ OCIDate *date, ub1 hour, ub1 min, 
                   2010:                            ub1 sec _o/); */
                   2011: #define OCIDateSetTime(date, hour, min, sec) \
                   2012:   { \
                   2013:      (date)->OCIDateTime.OCITimeHH = hour; \
                   2014:      (date)->OCIDateTime.OCITimeMI = min; \
                   2015:      (date)->OCIDateTime.OCITimeSS = sec; \
                   2016:   }
                   2017: /*
                   2018:    NAME: OCIDateSetTime - OCIDate Set Time portion of date
                   2019:    PARAMETERS:
                   2020:        date (OUT) - Oracle date whose time data is set
                   2021:        hour (IN) - hour value to be set 
                   2022:        min (IN) - minute value to be set
                   2023:        sec (IN) - second value to be set
                   2024:    DESCRIPTION:
                   2025:        Set the date with the given time inforamtion.
                   2026:    RETURNS:
                   2027:         NONE
                   2028:  */
                   2029: 
                   2030: /*--------------------------- OCIDateSetDate --------------------------------*/
                   2031: /* void OCIDateSetDate(/o_ OCIDate *date, sb2 year, ub1 month, ub1 day _o/); */
                   2032: #define OCIDateSetDate(date, year, month, day) \
                   2033:   { \
                   2034:      (date)->OCIDateYYYY = year; \
                   2035:      (date)->OCIDateMM = month; \
                   2036:      (date)->OCIDateDD = day; \
                   2037:   }
                   2038: /*
                   2039:    NAME: OCIDateSetDate - OCIDate Set Date (year, month, day) portion of date
                   2040:    PARAMETERS:
                   2041:        date (IN) - Oracle date whose year, month, day data is set
                   2042:        year (OUT) - year value to be set
                   2043:        month (OUT) - month value to be set
                   2044:        day (OUT) - day value to be set
                   2045:    DESCRIPTION:
                   2046:        Set the date with the given year, month, day inforamtion.
                   2047:    RETURNS:
                   2048:         NONE
                   2049:  */
                   2050: 
                   2051: /*--------------------------- OCIDateAssign ---------------------------------*/
                   2052: 
                   2053: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   2054: sword OCIDateAssign(/*_ OCIError *err, CONST OCIDate *from, 
                   2055:                        OCIDate *to _*/);
                   2056: #else /* ANSI C */
                   2057: sword OCIDateAssign(    OCIError *err, CONST OCIDate *from, 
                   2058:                        OCIDate *to    );
                   2059: #endif
                   2060: /*
                   2061:    NAME: OCIDateAssign - OCIDate Assignment
                   2062:    PARAMETERS:
                   2063:         err (IN/OUT) - error handle. If there is an error, it is
                   2064:                 recorded in 'err' and this function returns OCI_ERROR.
                   2065:                 The error recorded in 'err' can be retrieved by calling
                   2066:                 OCIErrorGet().
                   2067:         from (IN) - date to be assigned
                   2068:        to (OUT) - lhs of assignment
                   2069:    DESCRIPTION:
                   2070:        Performs date assignment.
                   2071:    RETURNS:
                   2072:         OCI_SUCCESS
                   2073:  */
                   2074: 
                   2075: /*--------------------------- OCIDateToText ---------------------------------*/
                   2076: 
                   2077: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   2078: sword OCIDateToText(/*_ OCIError *err, CONST OCIDate *date, 
                   2079:                         CONST text *fmt, ub1 fmt_length, 
                   2080:                         CONST text *lang_name, ub4 lang_length, 
                   2081:                         ub4 *buf_size, text *buf _*/);
                   2082: #else /* ANSI C */
                   2083: sword OCIDateToText(    OCIError *err, CONST OCIDate *date, 
                   2084:                         CONST text *fmt, ub1 fmt_length, 
                   2085:                         CONST text *lang_name, ub4 lang_length, 
                   2086:                         ub4 *buf_size, text *buf    );
                   2087: #endif
                   2088: /*
                   2089:    NAME: OCIDateToText - OCIDate convert date TO String 
                   2090:    PARAMETERS:
                   2091:         err (IN/OUT) - error handle. If there is an error, it is
                   2092:                 recorded in 'err' and this function returns OCI_ERROR.
                   2093:                 The error recorded in 'err' can be retrieved by calling
                   2094:                 OCIErrorGet().
                   2095:        date (IN) - Oracle date to be converted
                   2096:         fmt (IN) - conversion format, if null string pointer (text*)0, then
                   2097:                 the date is converted to a character string in the
                   2098:                 date format "DD-MON-YY".
                   2099:         fmt_length (IN) - length of the 'fmt' parameter
                   2100:        lang_name (IN) - specifies the language in which the names and 
                   2101:                abbreviations of months and days are returned;
                   2102:                default language of session is used if 'lang_name' 
                   2103:                is null i.e. (text *)0
                   2104:         lang_length (IN) - length of the 'nls_params' parameter
                   2105:         buf_size (IN/OUT) - size of the buffer; size of the resulting string
                   2106:                 is returned via this parameter
                   2107:        buf (OUT) - buffer into which the converted string is placed
                   2108:    DESCRIPTION:
                   2109:         Converts the given date to a string according to the specified format.
                   2110:         Refer to "TO_DATE" conversion function described in
                   2111:         "Oracle SQL Language Reference Manual" for a description of format
                   2112:         and NLS arguments. The converted null-terminated date string is
                   2113:         stored in the buffer 'buf'.
                   2114:  
                   2115:         An error is reported upon overflow, e.g. trying to convert a number
                   2116:         of value 10 using format '9' causes an overflow.
                   2117:    RETURNS:
                   2118:         OCI_SUCCESS if the function completes successfully.
                   2119:         OCI_INVALID_HANDLE if 'err' is NULL.
                   2120:         OCI_ERROR if
                   2121:          buffer too small
                   2122:          invalid format
                   2123:          unknown language
                   2124:           overflow error
                   2125:  */
                   2126: 
                   2127: /*---------------------------- OCIDateFromText ------------------------------*/
                   2128: 
                   2129: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   2130: sword OCIDateFromText(/*_ OCIError *err, CONST text *date_str, 
                   2131:                         ub4 d_str_length, CONST text *fmt, ub1 fmt_length, 
                   2132:                         CONST text *lang_name, ub4 lang_length, 
                   2133:                         OCIDate *date _*/);
                   2134: #else /* ANSI C */
                   2135: sword OCIDateFromText(    OCIError *err, CONST text *date_str, 
                   2136:                         ub4 d_str_length, CONST text *fmt, ub1 fmt_length, 
                   2137:                         CONST text *lang_name, ub4 lang_length, 
                   2138:                         OCIDate *date    );
                   2139: #endif
                   2140: /*
                   2141:    NAME: OCIDateFromText - OCIDate convert String TO Date
                   2142:    PARAMETERS:
                   2143:         err (IN/OUT) - error handle. If there is an error, it is
                   2144:                 recorded in 'err' and this function returns OCI_ERROR.
                   2145:                 The error recorded in 'err' can be retrieved by calling
                   2146:                 OCIErrorGet().
                   2147:        date_str (IN) - input string to be converted to Oracle date
                   2148:        d_str_length (IN) - size of the input string, if the length is -1
                   2149:                then 'date_str' is treated as a null terminated  string
                   2150:         fmt (IN) - conversion format; if 'fmt' is a null pointer, then
                   2151:                 the string is expected to be in 'DD-MON-YY' format.
                   2152:         fmt_length (IN) - length of the 'fmt' parameter
                   2153:        lang_name (IN) - language in which the names and abbreviations of
                   2154:                days and months are specified, if null i.e. (text *)0,
                   2155:                the default language of session is used, 
                   2156:         lang_length (IN) - length of the 'lang_name' parameter
                   2157:        date (OUT) - given string converted to date
                   2158:    DESCRIPTION:
                   2159:        Converts the given string to Oracle date
                   2160:        according to the specified format. Refer to "TO_DATE" conversion
                   2161:        function described in "Oracle SQL Language Reference Manual" for a
                   2162:        description of format.
                   2163:    RETURNS:
                   2164:         OCI_SUCCESS if the function completes successfully.
                   2165:         OCI_INVALID_HANDLE if 'err' is NULL.
                   2166:         OCI_ERROR if
                   2167:          invalid format
                   2168:          unknown language
                   2169:          invalid input string
                   2170:          <to be discovered>
                   2171:  */
                   2172: 
                   2173: /*----------------------------- OCIDateCompare ------------------------------*/
                   2174: 
                   2175: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   2176: sword OCIDateCompare(/*_ OCIError *err, CONST OCIDate *date1, 
                   2177:                      CONST OCIDate *date2, sword *result _*/);
                   2178: #else /* ANSI C */
                   2179: sword OCIDateCompare(    OCIError *err, CONST OCIDate *date1, 
                   2180:                      CONST OCIDate *date2, sword *result    );
                   2181: #endif
                   2182: /*
                   2183:    NAME: OCIDateCompare - OCIDate CoMPare dates
                   2184:    PARAMETERS:
                   2185:         err (IN/OUT) - error handle. If there is an error, it is
                   2186:                 recorded in 'err' and this function returns OCI_ERROR.
                   2187:                 The error recorded in 'err' can be retrieved by calling
                   2188:                 OCIErrorGet().
                   2189:        date1, date2 (IN) - dates to be compared
                   2190:         result (OUT) - comparison result, 0 if equal, -1 if date1 < date2, 
                   2191:                1 if date1 > date2
                   2192:    DESCRIPTION:
                   2193:        The function OCIDateCompare compares two dates. It returns -1 if date1 is 
                   2194:        smaller than date2, 0 if they are equal, and 1 if date1 is greater 
                   2195:        than date2.
                   2196:    RETURNS:
                   2197:         OCI_SUCCESS if the function completes successfully.
                   2198:         OCI_INVALID_HANDLE if 'err' is NULL.
                   2199:         OCI_ERROR if
                   2200:          invalid date
                   2201:          <to be discovered>
                   2202:  */
                   2203: 
                   2204: /*------------------------- OCIDateAddMonths --------------------------------*/
                   2205: 
                   2206: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   2207: sword OCIDateAddMonths(/*_ OCIError *err, CONST OCIDate *date, sb4 num_months,
                   2208:                            OCIDate *result _*/);
                   2209: #else /* ANSI C */
                   2210: sword OCIDateAddMonths(    OCIError *err, CONST OCIDate *date, sb4 num_months,
                   2211:                            OCIDate *result    );
                   2212: #endif
                   2213: /*
                   2214:    NAME: OCIDateAddMonths - OCIDate ADd or subtract Months
                   2215:    PARAMETERS:
                   2216:         err (IN/OUT) - error handle. If there is an error, it is
                   2217:                 recorded in 'err' and this function returns OCI_ERROR.
                   2218:                 The error recorded in 'err' can be retrieved by calling
                   2219:                 OCIErrorGet().
                   2220:        date (IN) - 'num_months' added or subtracted from 'date'
                   2221:        num_months (IN) - number of months to be added or subtracted 
                   2222:                (a negative value will be subtracted)
                   2223:        result (IN/OUT) - result of adding or subtracting to 'date'
                   2224:    DESCRIPTION:
                   2225:        The function OCIDateAddDays adds or subtracts num_months from the 
                   2226:        date 'date'.
                   2227:           If the input 'date' is the last day of a month, then 
                   2228:        appropriate adjustments are made to ensure that the output date is 
                   2229:        also the last day of the month. For example, Feb. 28 + 1 month =
                   2230:        March 31, and November 30 - 3 months = August 31. Otherwise the
                   2231:        'result' date has the same day component as 'date'. 
                   2232:    RETURNS:
                   2233:         OCI_SUCCESS if the function completes successfully.
                   2234:         OCI_INVALID_HANDLE if 'err' is NULL.
                   2235:         OCI_ERROR if
                   2236:          invalid date
                   2237:          <to be discovered>
                   2238:  */
                   2239: 
                   2240: /*--------------------------- OCIDateAddDays --------------------------------*/
                   2241: 
                   2242: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   2243: sword OCIDateAddDays(/*_ OCIError *err, CONST OCIDate *date, sb4 num_days,
                   2244:                          OCIDate *result _*/);
                   2245: #else /* ANSI C */
                   2246: sword OCIDateAddDays(    OCIError *err, CONST OCIDate *date, sb4 num_days,
                   2247:                          OCIDate *result    );
                   2248: #endif
                   2249: /*
                   2250:    NAME: OCIDateAddDays - OCIDate ADd or subtract Days
                   2251:    PARAMETERS:
                   2252:         err (IN/OUT) - error handle. If there is an error, it is
                   2253:                 recorded in 'err' and this function returns OCI_ERROR.
                   2254:                 The error recorded in 'err' can be retrieved by calling
                   2255:                 OCIErrorGet().
                   2256:        date (IN) - 'num_days' added or subtracted from 'date'
                   2257:        num_days (IN) - number of days to be added or subtracted 
                   2258:                (a negative value will be subtracted)
                   2259:        result (IN/OUT) - result of adding or subtracting to 'date'
                   2260:    DESCRIPTION:
                   2261:        The function OCIDateAddDays adds or subtracts num_days from the 
                   2262:        date 'date'.
                   2263:    RETURNS:
                   2264:         OCI_SUCCESS if the function completes successfully.
                   2265:         OCI_INVALID_HANDLE if 'err' is NULL.
                   2266:         OCI_ERROR if
                   2267:          invalid date
                   2268:          <to be discovered>
                   2269:  */
                   2270: 
                   2271: /*--------------------------- OCIDateLastDay --------------------------------*/
                   2272: 
                   2273: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   2274: sword OCIDateLastDay(/*_ OCIError *err, CONST OCIDate *date,    
                   2275:                          OCIDate *last_day _*/);
                   2276: #else /* ANSI C */
                   2277: sword OCIDateLastDay(    OCIError *err, CONST OCIDate *date, 
                   2278:                          OCIDate *last_day    );
                   2279: #endif
                   2280: /*
                   2281:    NAME: OCIDateLastDay - OCIDate get date of the LaST day of the month
                   2282:    PARAMETERS:
                   2283:         err (IN/OUT) - error handle. If there is an error, it is
                   2284:                 recorded in 'err' and this function returns OCI_ERROR.
                   2285:                 The error recorded in 'err' can be retrieved by calling
                   2286:                 OCIErrorGet().
                   2287:        date (IN) - input date
                   2288:         last_day (OUT) - last day of the month in date 'date'
                   2289:    DESCRIPTION:
                   2290:        The function OCIDateLastDay returns the date of the last day of the
                   2291:         month in date 'date'.
                   2292:    RETURNS:
                   2293:         OCI_SUCCESS if the function completes successfully.
                   2294:         OCI_INVALID_HANDLE if 'err' is NULL.
                   2295:         OCI_ERROR if
                   2296:          invalid date
                   2297:          <to be discovered>
                   2298:  */
                   2299: 
                   2300: /*----------------------- OCIDateDaysBetween --------------------------------*/
                   2301: 
                   2302: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   2303: sword OCIDateDaysBetween(/*_ OCIError *err, CONST OCIDate *date1, 
                   2304:                              CONST OCIDate *date2, sb4 *num_days _*/);
                   2305: #else /* ANSI C */
                   2306: sword OCIDateDaysBetween(    OCIError *err, CONST OCIDate *date1, 
                   2307:                              CONST OCIDate *date2, sb4 *num_days    );
                   2308: #endif
                   2309: /*
                   2310:    NAME: OCIDateDaysBetween - OCIDate get number of days BeTWeen two dates
                   2311:    PARAMETERS:
                   2312:         err (IN/OUT) - error handle. If there is an error, it is
                   2313:                 recorded in 'err' and this function returns OCI_ERROR.
                   2314:                 The error recorded in 'err' can be retrieved by calling
                   2315:                 OCIErrorGet().
                   2316:        date1, date2 (IN) - input dates
                   2317:         num_days (OUT) - number of days between date1 and date2
                   2318:    DESCRIPTION:
                   2319:        The function OCIDateDaysBetween returns the number of days between 
                   2320:        date1 and date2. The time is ignored in this computation.
                   2321:    RETURNS:
                   2322:         OCI_SUCCESS if the function completes successfully.
                   2323:         OCI_INVALID_HANDLE if 'err' is NULL.
                   2324:         OCI_ERROR if
                   2325:          invalid date
                   2326:          <to be discovered>
                   2327:  */
                   2328: 
                   2329: /*------------------------ OCIDateZoneToZone --------------------------------*/
                   2330: 
                   2331: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   2332: sword OCIDateZoneToZone(/*_ OCIError *err, CONST OCIDate *date1,
                   2333:                             CONST text *zon1,
                   2334:                             ub4 zon1_length, CONST text *zon2, ub4 zon2_length,
                   2335:                             OCIDate *date2 _*/);
                   2336: #else /* ANSI C */
                   2337: sword OCIDateZoneToZone(    OCIError *err, CONST OCIDate *date1,
                   2338:                             CONST text *zon1,
                   2339:                             ub4 zon1_length, CONST text *zon2, ub4 zon2_length,
                   2340:                             OCIDate *date2    );
                   2341: #endif
                   2342: /*
                   2343:    NAME: OCIDateZoneToZone - OCIDate convert date from one Zone TO another Zone
                   2344:    PARAMETERS:
                   2345:         err (IN/OUT) - error handle. If there is an error, it is
                   2346:                 recorded in 'err' and this function returns OCI_ERROR.
                   2347:                 The error recorded in 'err' can be retrieved by calling
                   2348:                 OCIErrorGet().
                   2349:        date1 (IN) - date to be converted
                   2350:        zon1 (IN) - zone of input date
                   2351:        zon1_length (IN) - length in bytes of string 'zon1'
                   2352:        zon2 (IN) - zone to be converted to
                   2353:        zon2_length (IN) - length in bytes of string 'zon2'
                   2354:        date2 (OUT) - converted date (in 'zon2')
                   2355:    DESCRIPTION:
                   2356:        Converts date from one time zone to another. Given date 'date1' 
                   2357:        in time zone 'zon1' returns date 'date2' in time zone 'zon2'.
                   2358:    RETURNS:
                   2359:         OCI_SUCCESS if the function completes successfully.
                   2360:         OCI_INVALID_HANDLE if 'err' is NULL.
                   2361:         OCI_ERROR if
                   2362:          invlid date
                   2363:          invald input time zone
                   2364:          invald output time zone
                   2365:          <to be discovered>
                   2366:  */
                   2367: 
                   2368: /*--------------------------- OCIDateNextDay --------------------------------*/
                   2369: 
                   2370: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   2371: sword OCIDateNextDay(/*_ OCIError *err, CONST OCIDate *date, CONST text *day_p, 
                   2372:                          ub4 day_length, OCIDate *next_day _*/);
                   2373: #else /* ANSI C */
                   2374: sword OCIDateNextDay(    OCIError *err, CONST OCIDate *date, CONST text *day_p, 
                   2375:                          ub4 day_length, OCIDate *next_day    );
                   2376: #endif
                   2377: /*
                   2378:    NAME: OCIDateNextDay - OCIDate get date of Next DaY
                   2379:    PARAMETERS:
                   2380:         err (IN/OUT) - error handle. If there is an error, it is
                   2381:                 recorded in 'err' and this function returns OCI_ERROR.
                   2382:                 The error recorded in 'err' can be retrieved by calling
                   2383:                 OCIErrorGet().
                   2384:        date (IN) - returned date should be later than this date
                   2385:        day (IN) - first day of week named by this is returned
                   2386:        day_length (IN) - length in bytes of string 'day'
                   2387:        next_day (OUT) - first day of the week named by 'day' later than 'date'
                   2388:    DESCRIPTION:
                   2389:        Returns the date of the first day of the
                   2390:        week named by 'day' that is later than date 'date'.
                   2391:    RETURNS:
                   2392:         OCI_SUCCESS if the function completes successfully.
                   2393:         OCI_INVALID_HANDLE if 'err' is NULL.
                   2394:         OCI_ERROR if
                   2395:          invalid date
                   2396:          invalid day
                   2397:          <to be discovered>
                   2398:  */
                   2399: 
                   2400: /*----------------------------- OCIDateCheck --------------------------------*/
                   2401: 
                   2402: /* Listing of error bits used by OCIDateCheck() */
                   2403: #define OCI_DATE_INVALID_DAY            0x1                       /* Bad DAy */
                   2404: #define OCI_DATE_DAY_BELOW_VALID        0x2   /* Bad DAy Low/high bit (1=low)*/
                   2405: #define OCI_DATE_INVALID_MONTH          0x4                     /* Bad MOnth */
                   2406: #define OCI_DATE_MONTH_BELOW_VALID      0x8 /* Bad MOnth Low/high bit (1=low)*/
                   2407: #define OCI_DATE_INVALID_YEAR           0x10                     /* Bad YeaR */
                   2408: #define OCI_DATE_YEAR_BELOW_VALID       0x20 /* Bad YeaR Low/high bit (1=low)*/
                   2409: #define OCI_DATE_INVALID_HOUR           0x40                     /* Bad HouR */
                   2410: #define OCI_DATE_HOUR_BELOW_VALID       0x80 /* Bad HouR Low/high bit (1=low)*/
                   2411: #define OCI_DATE_INVALID_MINUTE         0x100                  /* Bad MiNute */
                   2412: #define OCI_DATE_MINUTE_BELOW_VALID     0x200
                   2413:                                            /* Bad MiNute Low/high bit (1=low)*/
                   2414: #define OCI_DATE_INVALID_SECOND         0x400                  /* Bad SeCond */
                   2415: #define OCI_DATE_SECOND_BELOW_VALID     0x800
                   2416:                                            /* bad second Low/high bit (1=low)*/
                   2417: #define OCI_DATE_DAY_MISSING_FROM_1582  0x1000
                   2418:                                   /* Day is one of those "missing" from 1582 */
                   2419: #define OCI_DATE_YEAR_ZERO              0x2000    /* Year may not equal zero */
                   2420: #define OCI_DATE_INVALID_FORMAT         0x8000      /* Bad date format input */
                   2421: 
                   2422: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   2423: sword OCIDateCheck(/*_ OCIError *err, CONST OCIDate *date, uword *valid _*/);
                   2424: #else /* ANSI C */
                   2425: sword OCIDateCheck(    OCIError *err, CONST OCIDate *date, uword *valid    );
                   2426: #endif
                   2427: /*
                   2428:    NAME: OCIDateCheck - OCIDate CHecK if the given date is valid
                   2429:    PARAMETERS:
                   2430:         err (IN/OUT) - error handle. If there is an error, it is
                   2431:                 recorded in 'err' and this function returns OCI_ERROR.
                   2432:                 The error recorded in 'err' can be retrieved by calling
                   2433:                 OCIErrorGet().
                   2434:        date (IN) - date to be checked
                   2435:        valid (OUT) -  returns zero for a valid date, otherwise 
                   2436:                the ORed combination of all error bits specified below:
                   2437:   
                   2438:    Macro name                   Bit number      Error
                   2439:    ----------                   ----------      -----
                   2440:    OCI_DATE_INVALID_DAY         0x1             Bad day
                   2441:    OCI_DATE_DAY_BELOW_VALID     0x2             Bad DAy Low/high bit (1=low)
                   2442:    OCI_DATE_INVALID_MONTH       0x4             Bad MOnth
                   2443:    OCI_DATE_MONTH_BELOW_VALID   0x8             Bad MOnth Low/high bit (1=low)
                   2444:    OCI_DATE_INVALID_YEAR        0x10            Bad YeaR
                   2445:    OCI_DATE_YEAR_BELOW_VALID    0x20            Bad YeaR Low/high bit (1=low)
                   2446:    OCI_DATE_INVALID_HOUR        0x40            Bad HouR
                   2447:    OCI_DATE_HOUR_BELOW_VALID    0x80            Bad HouR Low/high bit (1=low)
                   2448:    OCI_DATE_INVALID_MINUTE      0x100           Bad MiNute
                   2449:    OCI_DATE_MINUTE_BELOW_VALID 0x200           Bad MiNute Low/high bit (1=low)
                   2450:    OCI_DATE_INVALID_SECOND      0x400           Bad SeCond
                   2451:    OCI_DATE_SECOND_BELOW_VALID  0x800           bad second Low/high bit (1=low)
                   2452:    OCI_DATE_DAY_MISSING_FROM_1582 0x1000        Day is one of those "missing"
                   2453:                                                 from 1582
                   2454:    OCI_DATE_YEAR_ZERO           0x2000          Year may not equal zero
                   2455:    OCI_DATE_INVALID_FORMAT      0x8000          Bad date format input
                   2456:   
                   2457:    So, for example, if the date passed in was 2/0/1990 25:61:10 in
                   2458:    (month/day/year hours:minutes:seconds format), the erroor returned
                   2459:    would be OCI_DATE_INVALID_DAY | OCI_DATE_DAY_BELOW_VALID |
                   2460:    OCI_DATE_INVALID_HOUR | OCI_DATE_INVALID_MINUTE
                   2461: 
                   2462:    DESCRIPTION:
                   2463:        Check if the given date is valid.
                   2464:    RETURNS:
                   2465:         OCI_SUCCESS if the function completes successfully.
                   2466:         OCI_INVALID_HANDLE if 'err' is NULL.
                   2467:         OCI_ERROR if
                   2468:          'date' and 'valid' pointers are NULL pointers
                   2469:  */
                   2470: 
                   2471: /*--------------------------- OCIDateSysDate --------------------------------*/
                   2472: 
                   2473: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   2474: sword OCIDateSysDate(/*_ OCIError *err, OCIDate *sys_date _*/);
                   2475: #else /* ANSI C */
                   2476: sword OCIDateSysDate(    OCIError *err, OCIDate *sys_date    );
                   2477: #endif
                   2478: /*
                   2479:    NAME: OCIDateSysDate - OCIDate get current SYStem date and time
                   2480:    PARAMETERS:
                   2481:         err (IN/OUT) - error handle. If there is an error, it is
                   2482:                 recorded in 'err' and this function returns OCI_ERROR.
                   2483:                 The error recorded in 'err' can be retrieved by calling
                   2484:                 OCIErrorGet().
                   2485:        sys_date (OUT) - current system date and time
                   2486:    DESCRIPTION:
                   2487:        Returns the current system date and time.
                   2488:    RETURNS:
                   2489:         OCI_SUCCESS if the function completes successfully.
                   2490:         OCI_INVALID_HANDLE if 'err' is NULL.
                   2491:         OCI_ERROR if
                   2492:          <to be discovered>
                   2493:  */
                   2494: 
                   2495: /*****************************************************************************/
                   2496: /*                  FIXED-LENGTH STRING - CHAR (N)                           */
                   2497: /*****************************************************************************/
                   2498: 
                   2499: /*
                   2500:  * An ADT attribute declared as "x CHAR(n)" is mapped to "OCIString *x;".
                   2501:  * The representation of OCIString * is shown below.
                   2502:  */
                   2503: 
                   2504: /*****************************************************************************/
                   2505: /*                  VARIABLE-LENGTH STRING                                   */
                   2506: /*****************************************************************************/
                   2507: 
                   2508: /*
                   2509:  * The variable-length string is represented in C as a pointer to OCIString
                   2510:  * structure. The OCIString structure is opaque to the user. Functions are
                   2511:  * provided to allow the user to manipulate a variable-length string.
                   2512:  *     
                   2513:  * A variable-length string can be declared as:
                   2514:  *
                   2515:  * OCIString *vstr;
                   2516:  *
                   2517:  * For binding variables of type OCIString* in OCI calls (OCIBindByName(),
                   2518:  * OCIBindByPos() and OCIDefineByPos()) use the external type code SQLT_VST.
                   2519:  */
                   2520: typedef struct OCIString OCIString;
                   2521: 
                   2522: /*-------------------------- OCIStringAssign --------------------------------*/
                   2523:  
                   2524: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   2525: sword OCIStringAssign(/*_ OCIEnv *env, OCIError *err, CONST OCIString *rhs, 
                   2526:                           OCIString **lhs _*/);
                   2527: #else /* ANSI C */
                   2528: sword OCIStringAssign(    OCIEnv *env, OCIError *err, CONST OCIString *rhs, 
                   2529:                           OCIString **lhs    );
                   2530: #endif
                   2531: /*
                   2532:    NAME: OCIStringAssign - OCIString Assign String to String
                   2533:    PARAMETERS:
                   2534:         env (IN/OUT) - OCI environment handle initialized in object mode.
                   2535:         err (IN/OUT) - error handle. If there is an error, it is
                   2536:                 recorded in 'err' and this function returns OCI_ERROR.
                   2537:                 The error recorded in 'err' can be retrieved by calling
                   2538:                 OCIErrorGet().
                   2539:         rhs (IN) - RHS of the assignment, the type of rhs is also OCIString
                   2540:         lhs (IN/OUT) - LHS of the assignment
                   2541:    DESCRIPTION:
                   2542:         Assign 'rhs' string to 'lhs' string. The 'lhs' string may be
                   2543:         resized depending upon the size of the 'rhs'. The assigned string is
                   2544:        null-terminated. The 'length' field will not include the extra byte
                   2545:        needed for null termination.
                   2546:    RETURNS:
                   2547:         OCI_SUCCESS if the function completes successfully.
                   2548:         OCI_INVALID_HANDLE if 'env' or 'err' is NULL.
                   2549:         OCI_ERROR if
                   2550:           out of space error
                   2551:  */
                   2552:  
                   2553: /*---------------------- OCIStringAssignText --------------------------------*/
                   2554:  
                   2555: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   2556: sword OCIStringAssignText(/*_ OCIEnv *env, OCIError *err, CONST text *rhs, 
                   2557:                               ub4 rhs_len, OCIString **lhs _*/);
                   2558: #else /* ANSI C */
                   2559: sword OCIStringAssignText(    OCIEnv *env, OCIError *err, CONST text *rhs, 
                   2560:                               ub4 rhs_len, OCIString **lhs    );
                   2561: #endif
                   2562: /*
                   2563:    NAME: OCIStringAssignText - OCIString Assign Text string to String
                   2564:    PARAMETERS:
                   2565:         env (IN/OUT) - OCI environment handle initialized in object mode.
                   2566:         err (IN/OUT) - error handle. If there is an error, it is
                   2567:                 recorded in 'err' and this function returns OCI_ERROR.
                   2568:                 The error recorded in 'err' can be retrieved by calling
                   2569:                 OCIErrorGet().
                   2570:         rhs (IN) - RHS of the assignment, the type of rhs is a text string
                   2571:         rhs_len (IN) - length of the 'rhs' string
                   2572:         lhs (IN/OUT) - LHS of the assignment
                   2573:    DESCRIPTION:
                   2574:         Assign 'rhs' string to 'lhs' string. The 'lhs' string may be
                   2575:         resized depending upon the size of the 'rhs'. The assigned string is
                   2576:        null-terminated. The 'length' field will not include the extra byte
                   2577:        needed for null termination.
                   2578:    RETURNS:
                   2579:         OCI_SUCCESS if the function completes successfully.
                   2580:         OCI_INVALID_HANDLE if 'env' or 'err' is NULL.
                   2581:         OCI_ERROR if
                   2582:           out of space error
                   2583:  */
                   2584: 
                   2585: /*-------------------------- OCIStringResize --------------------------------*/
                   2586: 
                   2587: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   2588: sword OCIStringResize(/*_ OCIEnv *env, OCIError *err, ub4 new_size, 
                   2589:                           OCIString **str _*/);
                   2590: #else /* ANSI C */
                   2591: sword OCIStringResize(    OCIEnv *env, OCIError *err, ub4 new_size, 
                   2592:                           OCIString **str    );
                   2593: #endif
                   2594: /*
                   2595:    NAME: OCIStringResize - OCIString ReSiZe string memory
                   2596:    PARAMETERS:
                   2597:         env (IN/OUT) - OCI environment handle initialized in object mode.
                   2598:         err (IN/OUT) - error handle. If there is an error, it is
                   2599:                 recorded in 'err' and this function returns OCI_ERROR.
                   2600:                 The error recorded in 'err' can be retrieved by calling
                   2601:                 OCIErrorGet().
                   2602:        new_size (IN) - new memory size of the string in bytes
                   2603:         str (IN/OUT) - allocated memory for the string is freed from the 
                   2604:                 OOCI heap
                   2605:    DESCRIPTION:
                   2606:         This function resizes the memory of the given variable-length string in
                   2607:         the object cache. The contents of the string are NOT preserved.
                   2608:         This function may allocate the string in a new memory region in
                   2609:         which case the original memory occupied by the given string will
                   2610:         be freed. If the input string is null (str == NULL), then this
                   2611:         function will allocate memory for the string.
                   2612:  
                   2613:         If the new_size is 0, then this function frees the memory occupied
                   2614:         by 'str' and a null pointer value is returned.
                   2615:  
                   2616:         NOTE: The caller must compute 'new_size' taking into account space
                   2617:         for the null character ('\0').
                   2618:    RETURNS:
                   2619:         OCI_SUCCESS if the function completes successfully.
                   2620:         OCI_INVALID_HANDLE if 'env' or 'err' is NULL.
                   2621:         OCI_ERROR if
                   2622:           out of space error
                   2623:  */
                   2624: 
                   2625: /*---------------------------- OCIStringSize --------------------------------*/
                   2626: 
                   2627: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   2628: ub4 OCIStringSize(/*_ OCIEnv *env, CONST OCIString *vs _*/);
                   2629: #else /* ANSI C */
                   2630: ub4 OCIStringSize(    OCIEnv *env, CONST OCIString *vs    );
                   2631: #endif
                   2632: /*
                   2633:    NAME: OCIStringSize - OCIString Get String siZe
                   2634:    PARAMETERS:
                   2635:         env(IN) - pointer to OCI environment handle
                   2636:         vs (IN) - string whose size is returned
                   2637:    DESCRIPTION:
                   2638:         Return the size of the given string.
                   2639:    RETURNS:
                   2640:        size of the string in bytes is returned
                   2641:  */
                   2642: 
                   2643: /*----------------------------- OCIStringPtr --------------------------------*/
                   2644: 
                   2645: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   2646: text *OCIStringPtr(/*_ OCIEnv *env, CONST OCIString *vs _*/);
                   2647: #else /* ANSI C */
                   2648: text *OCIStringPtr(    OCIEnv *env, CONST OCIString *vs    );
                   2649: #endif
                   2650: /*
                   2651:    NAME: OCIStringPtr - OCIString Get String Pointer
                   2652:    PARAMETERS:
                   2653:         env(IN) - pointer to OCI environment handle
                   2654:         vs (IN) - pointer to the text of this string is returned
                   2655:    DESCRIPTION:
                   2656:         Return the pointer to the text of the given string.
                   2657:    RETURNS:
                   2658:        pointer to the text of the string is returned
                   2659:  */
                   2660: 
                   2661: /*----------------------- OCIStringAllocSize --------------------------------*/
                   2662:  
                   2663: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   2664: sword OCIStringAllocSize(/*_ OCIEnv *env, OCIError *err, CONST OCIString *vs, 
                   2665:                              ub4 *allocsize _*/);
                   2666: #else /* ANSI C */
                   2667: sword OCIStringAllocSize(    OCIEnv *env, OCIError *err, CONST OCIString *vs, 
                   2668:                              ub4 *allocsize    );
                   2669: #endif
                   2670: /*
                   2671:    NAME: OCIStringAllocSize - OCIString get Allocated SiZe of string memory 
                   2672:                               in bytes
                   2673:    PARAMETERS:
                   2674:         env (IN/OUT) - OCI environment handle initialized in object mode.
                   2675:         err (IN/OUT) - error handle. If there is an error, it is
                   2676:                 recorded in 'err' and this function returns OCI_ERROR.
                   2677:                 The error recorded in 'err' can be retrieved by calling
                   2678:                 OCIErrorGet().
                   2679:         vs (IN) - string whose allocated size in bytes is returned
                   2680:        allocsize (OUT) - allocated size of string memory in bytes is returned
                   2681:    DESCRIPTION:
                   2682:         Return the allocated size of the string memory in bytes. The
                   2683:         allocated size is >= actual string size.
                   2684:    REQUIRES:
                   2685:         vs is a non-null pointer
                   2686:    RETURNS:
                   2687:         OCI_SUCCESS if the function completes successfully.
                   2688:         OCI_INVALID_HANDLE if 'env' or 'err' is NULL.
                   2689:         OCI_ERROR on error
                   2690:  */
                   2691: 
                   2692: /*****************************************************************************/
                   2693: /*                       VARIABLE-LENGTH RAW                                 */
                   2694: /*****************************************************************************/
                   2695: 
                   2696: /*
                   2697:  * The variable-length raw is represented in C as a pointer to OCIRaw
                   2698:  * structure. The OCIRaw structure is opaque to the user. Functions are
                   2699:  * provided to allow the user to manipulate a variable-length raw.
                   2700:  *     
                   2701:  * A variable-length raw can be declared as:
                   2702:  *
                   2703:  * OCIRaw *raw;
                   2704:  *
                   2705:  * For binding variables of type OCIRaw* in OCI calls (OCIBindByName(),
                   2706:  * OCIBindByPos() and OCIDefineByPos()) use the external type code SQLT_LVB.
                   2707:  */
                   2708: typedef struct OCIRaw OCIRaw;
                   2709: 
                   2710: /*-------------------------- OCIRawAssignRaw --------------------------------*/
                   2711:  
                   2712: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   2713: sword OCIRawAssignRaw(/*_ OCIEnv *env, OCIError *err, CONST OCIRaw *rhs, 
                   2714:                           OCIRaw **lhs _*/);
                   2715: #else /* ANSI C */
                   2716: sword OCIRawAssignRaw(    OCIEnv *env, OCIError *err, CONST OCIRaw *rhs, 
                   2717:                           OCIRaw **lhs    );
                   2718: #endif
                   2719: /*
                   2720:    NAME: OCIRawAssignRaw - OCIRaw Assign Raw (of type OCIRaw*) to
                   2721:                    Raw (of type OCIRaw*)
                   2722:    PARAMETERS:
                   2723:         env (IN/OUT) - OCI environment handle initialized in object mode.
                   2724:         err (IN/OUT) - error handle. If there is an error, it is
                   2725:                 recorded in 'err' and this function returns OCI_ERROR.
                   2726:                 The error recorded in 'err' can be retrieved by calling
                   2727:                 OCIErrorGet().
                   2728:         rhs (IN) - RHS of the assignment, the type of rhs is also OCIRaw
                   2729:         lhs (IN/OUT) - LHS of the assignment
                   2730:    DESCRIPTION:
                   2731:         Assign 'rhs' raw to 'lhs' raw. The 'lhs' raw may be
                   2732:         resized depending upon the size of the 'rhs'.
                   2733:    RETURNS:
                   2734:         OCI_SUCCESS if the function completes successfully.
                   2735:         OCI_INVALID_HANDLE if 'env' or 'err' is NULL.
                   2736:         OCI_ERROR if
                   2737:           out of space error
                   2738:  */
                   2739:  
                   2740: /*------------------------ OCIRawAssignBytes --------------------------------*/
                   2741:  
                   2742: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   2743: sword OCIRawAssignBytes(/*_ OCIEnv *env, OCIError *err, CONST ub1 *rhs, 
                   2744:                             ub4 rhs_len, OCIRaw **lhs _*/);
                   2745: #else /* ANSI C */
                   2746: sword OCIRawAssignBytes(    OCIEnv *env, OCIError *err, CONST ub1 *rhs, 
                   2747:                             ub4 rhs_len, OCIRaw **lhs    );
                   2748: #endif
                   2749: /*
                   2750:    NAME: OCIRawAssignBytes - OCIRaw Assign raw Bytes (of type ub1*) to Raw 
                   2751:                    (of type OCIRaw*)
                   2752:    PARAMETERS:
                   2753:         env (IN/OUT) - OCI environment handle initialized in object mode.
                   2754:         err (IN/OUT) - error handle. If there is an error, it is
                   2755:                 recorded in 'err' and this function returns OCI_ERROR.
                   2756:                 The error recorded in 'err' can be retrieved by calling
                   2757:                 OCIErrorGet().
                   2758:         rhs (IN) - RHS of the assignment, the type of rhs is ub1 *
                   2759:         rhs_len (IN) - length of the 'rhs' raw
                   2760:         lhs (IN/OUT) - LHS of the assignment
                   2761:    DESCRIPTION:
                   2762:         Assign 'rhs' raw to 'lhs' raw. The 'lhs' raw may be
                   2763:         resized depending upon the size of the 'rhs'.
                   2764:    RETURNS:
                   2765:         OCI_SUCCESS if the function completes successfully.
                   2766:         OCI_INVALID_HANDLE if 'env' or 'err' is NULL.
                   2767:         OCI_ERROR if
                   2768:           out of space error
                   2769:  */
                   2770: 
                   2771: /*---------------------------- OCIRawResize ---------------------------------*/
                   2772:  
                   2773: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   2774: sword OCIRawResize(/*_ OCIEnv *env, OCIError *err, ub4 new_size, 
                   2775:                        OCIRaw **raw _*/);
                   2776: #else /* ANSI C */
                   2777: sword OCIRawResize(    OCIEnv *env, OCIError *err, ub4 new_size, 
                   2778:                        OCIRaw **raw    );
                   2779: #endif
                   2780: /*
                   2781:    NAME: OCIRawResize - OCIRaw ReSiZe memory of variable-length raw
                   2782:    PARAMETERS:
                   2783:         env (IN/OUT) - OCI environment handle initialized in object mode.
                   2784:         err (IN/OUT) - error handle. If there is an error, it is
                   2785:                 recorded in 'err' and this function returns OCI_ERROR.
                   2786:                 The error recorded in 'err' can be retrieved by calling
                   2787:                 OCIErrorGet().
                   2788:         new_size (IN) - new size of the raw data in bytes
                   2789:         raw (IN) - variable-length raw pointer; the raw is
                   2790:                 resized to 'new_size'
                   2791:    DESCRIPTION:
                   2792:         This function resizes the memory of the given variable-length raw in
                   2793:         the object cache. 
                   2794:         The previous contents of the raw are NOT preserved.
                   2795:         This function may allocate the raw in a new memory region in
                   2796:         which case the original memory occupied by the given raw will
                   2797:         be freed. If the input raw is null (raw == NULL), then this
                   2798:         function will allocate memory for the raw data.
                   2799:  
                   2800:         If the new_size is 0, then this function frees the memory occupied
                   2801:         by 'raw' and a null pointer value is returned.
                   2802:    RETURNS:
                   2803:         OCI_SUCCESS if the function completes successfully.
                   2804:         OCI_INVALID_HANDLE if 'env' or 'err' is NULL.
                   2805:         OCI_ERROR if
                   2806:          out of space error
                   2807:  */
                   2808: 
                   2809: /*------------------------------- OCIRawSize --------------------------------*/
                   2810: 
                   2811: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   2812: ub4 OCIRawSize(/*_ OCIEnv * env, CONST OCIRaw *raw _*/);
                   2813: #else /* ANSI C */
                   2814: ub4 OCIRawSize(    OCIEnv * env, CONST OCIRaw *raw    );
                   2815: #endif
                   2816: /*
                   2817:    NAME: OCIRawSize - OCIRaw Get Raw siZe
                   2818:    PARAMETERS:
                   2819:         env (IN)  - pointer to OCI environment handle
                   2820:         raw (INT) - raw whose size is returned
                   2821:    DESCRIPTION:
                   2822:         Return the size of the given raw.
                   2823:    RETURNS:
                   2824:        size of the raw in bytes is returned
                   2825:  */
                   2826: 
                   2827: /*--------------------------------- OCIRawPtr -------------------------------*/
                   2828: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   2829: ub1 *OCIRawPtr(/*_ OCIEnv * env, CONST OCIRaw *raw _*/);
                   2830: #else /* ANSI C */
                   2831: ub1 *OCIRawPtr(    OCIEnv * env, CONST OCIRaw *raw    );
                   2832: #endif
                   2833: /*
                   2834:    NAME: OCIRawPtr - OCIRaw Get Raw data Pointer
                   2835:    PARAMETERS:
                   2836:         env (IN) - pointer to OCI environment handle
                   2837:         raw (IN) - pointer to the data of this raw is returned
                   2838:    DESCRIPTION:
                   2839:         Return the pointer to the data of the given raw.
                   2840:    RETURNS:
                   2841:        pointer to the data of the raw is returned
                   2842:  */
                   2843: 
                   2844: /*------------------------------ OCIRawAllocSize ----------------------------*/
                   2845:  
                   2846: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   2847: sword OCIRawAllocSize(/*_ OCIEnv *env, OCIError *err, CONST OCIRaw *raw,
                   2848:                           ub4 *allocsize _*/);
                   2849: #else /* ANSI C */
                   2850: sword OCIRawAllocSize(    OCIEnv *env, OCIError *err, CONST OCIRaw *raw,
                   2851:                          ub4 *allocsize    );
                   2852: #endif
                   2853: /*
                   2854:    NAME: OCIRawAllocSize - OCIRaw get Allocated SiZe of raw memory in bytes
                   2855:    PARAMETERS:
                   2856:         env (IN/OUT) - OCI environment handle initialized in object mode.
                   2857:         err (IN/OUT) - error handle. If there is an error, it is
                   2858:                 recorded in 'err' and this function returns OCI_ERROR.
                   2859:                 The error recorded in 'err' can be retrieved by calling
                   2860:                 OCIErrorGet().
                   2861:         raw (IN) - raw whose allocated size in bytes is returned
                   2862:        allocsize (OUT) - allocated size of raw memory in bytes is returned
                   2863:    DESCRIPTION:
                   2864:         Return the allocated size of the raw memory in bytes. The
                   2865:         allocated size is >= actual raw size.
                   2866:    REQUIRES:
                   2867:         raw is a non-null pointer
                   2868:    RETURNS:
                   2869:         OCI_SUCCESS if the function completes successfully.
                   2870:         OCI_INVALID_HANDLE if 'env' or 'err' is NULL.
                   2871:         OCI_ERROR upon error
                   2872:  */
                   2873: 
                   2874: /*****************************************************************************/
                   2875: /*                     OBJECT REFERENCE OPERATIONS                           */
                   2876: /*****************************************************************************/
                   2877: 
                   2878: /* 
                   2879:  * See the definition of OCIRef in oro.h.
                   2880:  *
                   2881:  * For binding variables of type OCIRef* in OCI calls (OCIBindByName(),
                   2882:  * OCIBindByPos() and OCIDefineByPos()) use the code SQLT_REF.
                   2883:  * 
                   2884:  */
                   2885: 
                   2886: /*---------------------------- OCIRefClear ----------------------------------*/
                   2887: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   2888: void OCIRefClear(/*_ OCIEnv *env, OCIRef *ref _*/);
                   2889: #else /* ANSI C */
                   2890: void OCIRefClear(    OCIEnv *env, OCIRef *ref    );
                   2891: #endif
                   2892: /*
                   2893:    NAME: OCIRefClear - OCIRef CLeaR or nullify a ref
                   2894:    PARAMETERS:
                   2895:         env (IN)     - pointer to OCI environment handle
                   2896:         ref (IN/OUT) - ref to clear
                   2897:    DESCRIPTION:
                   2898:         Clear or nullify the given ref. A ref is considered to be a null ref
                   2899:        if it does not contain a valid OID (and thus doesn't point to an
                   2900:         object). Logically, a null ref is a dangling ref.
                   2901: 
                   2902:         Note that a null ref is still a valid SQL value and is not SQL-ly null.
                   2903:         It can be used as a valid non-null constant ref value for NOT NULL
                   2904:         column or attribute of a row in a table.
                   2905:         
                   2906:         If a null pointer value is passed as a ref,
                   2907:         then this function is a no-op.
                   2908:  */
                   2909: 
                   2910: /*--------------------------- OCIRefAssign ----------------------------------*/
                   2911: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   2912: sword OCIRefAssign(/*_ OCIEnv *env, OCIError *err, CONST OCIRef *source, 
                   2913:                        OCIRef **target _*/);
                   2914: #else /* ANSI C */
                   2915: sword OCIRefAssign(    OCIEnv *env, OCIError *err, CONST OCIRef *source, 
                   2916:                        OCIRef **target    );
                   2917: #endif
                   2918: /*
                   2919:    NAME: OCIRefAssign - OCIRef CoPY a ref to another
                   2920:    PARAMETERS:
                   2921:         env (IN/OUT) - OCI environment handle initialized in object mode.
                   2922:         err (IN/OUT) - error handle. If there is an error, it is
                   2923:                 recorded in 'err' and this function returns OCI_ERROR.
                   2924:                 The error recorded in 'err' can be retrieved by calling
                   2925:                 OCIErrorGet().
                   2926:         source (IN) - ref to copy from
                   2927:         target (IN/OUT) - ref to copy to
                   2928:    DESCRIPTION:
                   2929:         Copy 'source' ref to 'target' ref; both then reference the same
                   2930:         object. If the target ref pointer is null (i.e. *target == NULL)
                   2931:        then the copy function will allocate memory for the target ref
                   2932:        in OOCI heap prior to the copy.
                   2933:    RETURNS:
                   2934:         OCI_SUCCESS if the function completes successfully.
                   2935:         OCI_INVALID_HANDLE if 'env' or 'err' is NULL.
                   2936:         OCI_ERROR if
                   2937:           1) out of memory
                   2938:  */
                   2939: 
                   2940: /*-------------------------- OCIRefIsEqual ----------------------------------*/
                   2941: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   2942: boolean OCIRefIsEqual(/*_ OCIEnv *env, CONST OCIRef *x, CONST OCIRef *y _*/);
                   2943: #else /* ANSI C */
                   2944: boolean OCIRefIsEqual(    OCIEnv *env, CONST OCIRef *x, CONST OCIRef *y    );
                   2945: #endif
                   2946: /*
                   2947:    NAME: OCIRefIsEqual - OCIRef compare two refs for EQUality
                   2948:    PARAMETERS:
                   2949:         env (IN) - pointer to OCI environment handle
                   2950:         x (IN)   - ref to compare
                   2951:         y (IN)   - ref to compare
                   2952:    DESCRIPTION:
                   2953:         Compare the given refs for equality.
                   2954:         Two refs are equal if and only if:
                   2955:           - they are both referencing the same persistent object, or
                   2956:           - they are both referencing the same transient object.
                   2957: 
                   2958:         NOTE THAT TWO NULL REFS ARE CONSIDERED NOT EQUAL BY THIS FUNCTION.
                   2959:    RETURNS:
                   2960:         TRUE if the two refs are equal
                   2961:         FALSE if the two refs are not equal, or X is NULL, or Y is NULL
                   2962:  */
                   2963: 
                   2964: /*--------------------------- OCIRefIsNull ----------------------------------*/
                   2965: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   2966: boolean OCIRefIsNull(/*_ OCIEnv *env, CONST OCIRef *ref _*/);
                   2967: #else /* ANSI C */
                   2968: boolean OCIRefIsNull(    OCIEnv *env, CONST OCIRef *ref    );
                   2969: #endif
                   2970: /*
                   2971:    NAME: OCIRefIsNull - OCIRef test if a ref is NULl
                   2972:    PARAMETERS:
                   2973:         env (IN) - pointer to OCI environment handle
                   2974:         ref (IN) - ref to test for null
                   2975:    DESCRIPTION:
                   2976:         Return TRUE if the given ref is null; otherwise, return FALSE.
                   2977:         A ref is null if and only if:
                   2978:         - it is supposed to be referencing a persistent object, but
                   2979:           its OID is null, or
                   2980:         - it is supposed to be referencing a transient object, but it is
                   2981:           currently not pointing to an object.
                   2982:         A ref is a dangling ref if the object that it points to does not
                   2983:         exist.
                   2984:    RETURNS:
                   2985:         TRUE if the given ref is NULL
                   2986:         FALSE if the given ref is not NULL
                   2987:  */
                   2988: 
                   2989: /*-------------------------- OCIRefHexSize ----------------------------------*/
                   2990: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   2991: ub4 OCIRefHexSize(/*_ OCIEnv *env, CONST OCIRef *ref _*/);
                   2992: #else /* ANSI C */
                   2993: ub4 OCIRefHexSize(    OCIEnv *env, CONST OCIRef *ref    );
                   2994: #endif
                   2995: /*
                   2996:    NAME: OCIRefHexSize - OCIRef Hexadecimal buffer SiZe in bytes
                   2997:    PARAMETERS:
                   2998:         env (IN) - pointer to OCI environment handle
                   2999:         ref (IN) - ref whose size in hexadecimal representation in bytes is
                   3000:                returned
                   3001:    DESCRIPTION:
                   3002:         Return the size of the buffer in bytes required for the hexadecimal
                   3003:         representation of the ref. A buffer of at-least this size must be
                   3004:        passed to ref-to-hex (OCIRefToHex) conversion function.
                   3005:    RETURNS:
                   3006:         size of hexadecimal representation of ref
                   3007:  */
                   3008: 
                   3009: /*-------------------------- OCIRefFromHex ---------------------------------*/
                   3010: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   3011: sword OCIRefFromHex(/*_ OCIEnv *env, OCIError *err, CONST OCISvcCtx *svc, 
                   3012:                         CONST text *hex, ub4 length, OCIRef **ref _*/);
                   3013: #else /* ANSI C */
                   3014: sword OCIRefFromHex(    OCIEnv *env, OCIError *err, CONST OCISvcCtx *svc, 
                   3015:                         CONST text *hex, ub4 length, OCIRef **ref    );
                   3016: #endif
                   3017: /*
                   3018:    NAME:
                   3019:         OCIRefFromHex - OCIRef convert a Hexadecimal string TO a Ref
                   3020:    PARAMETERS:
                   3021:         env (IN/OUT) - OCI environment handle initialized in object mode
                   3022:         err (IN/OUT) - error handle. If there is an error, it is
                   3023:                recorded in 'err' and this function returns OCI_ERROR.
                   3024:                The error recorded in 'err' can be retrieved by
                   3025:                calling OCIErrorGet().
                   3026:         svc (IN) - OCI service context handle; if the resulting ref is
                   3027:                initialized with this service context
                   3028:         hex (IN) - hexadecimal string (that was produced by 'OCIRefToHex()"
                   3029:                 previously) to be convert into a ref
                   3030:         length (IN) - length of the hexadecimal string
                   3031:         ref (IN/OUT) - ref is initialized with the given value ('hex').
                   3032:                 If *ref is null, then space for the ref is allocated in the
                   3033:                 object cache, otherwise the memory occupied by the given ref
                   3034:                is re-used.
                   3035:    DESCRIPTION:
                   3036:         Convert the given hexadecimal string into a ref. This function
                   3037:         ensures that the resulting ref is well formed. It does NOT ensure
                   3038:        that the object pointed to by the resulting ref exists or not.
                   3039:    RETURNS:
                   3040:         OCI_SUCCESS if the function completes successfully.
                   3041:         OCI_INVALID_HANDLE if 'env' or 'err' is NULL.
                   3042:         OCI_ERROR if
                   3043:  */
                   3044: 
                   3045: /*--------------------------- OCIRefToHex -----------------------------------*/
                   3046: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   3047: sword OCIRefToHex(/*_ OCIEnv *env, OCIError *err, CONST OCIRef *ref, 
                   3048:                       text *hex, ub4 *hex_length _*/);
                   3049: #else /* ANSI C */
                   3050: sword OCIRefToHex(    OCIEnv *env, OCIError *err, CONST OCIRef *ref, 
                   3051:                       text *hex, ub4 *hex_length    );
                   3052: #endif
                   3053: /*
                   3054:    NAME:
                   3055:         OCIRefToHex - OCIRef convert ref to a Hexadecimal string
                   3056:    PARAMETERS:
                   3057:         env (IN/OUT) - OCI environment handle initialized in object mode
                   3058:         err (IN/OUT) - error handle. If there is an error, it is
                   3059:                recorded in 'err' and this function returns OCI_ERROR.
                   3060:                The error recorded in 'err' can be retrieved by
                   3061:                calling OCIErrorGet().
                   3062:         ref (IN) - ref to be converted into a hexadecimal string; if the
                   3063:                ref is a null ref (i.e. OCIRefIsNull(ref) == TRUE) then
                   3064:                a zero hex_length value is returned
                   3065:         hex (OUT) - buffer that is large enough to contain the resulting
                   3066:                 hexadecimal string; the contents of the string is opaque
                   3067:                 to the caller
                   3068:        hex_length (IN/OUT) - on input specifies the size of the 'hex' buffer,
                   3069:                on output specifies the actual size of the hexadecimal
                   3070:                string being returned in 'hex'
                   3071:    DESCRIPTION:
                   3072:         Convert the given ref into a hexadecimal string, and return the length
                   3073:         of the string. The resulting string is opaque to the caller.
                   3074:    RETURNS:
                   3075:         OCI_SUCCESS if the function completes successfully.
                   3076:         OCI_INVALID_HANDLE if 'env' or 'err' is NULL.
                   3077:         OCI_ERROR if
                   3078:           the given buffer is not big enough to hold the resulting string
                   3079:  */
                   3080: 
                   3081: 
                   3082: /*****************************************************************************/
                   3083: /*                          COLLECTION FUNCTIONS                             */
                   3084: /*****************************************************************************/
                   3085: 
                   3086: /* 
                   3087:    The generic collection is represented by the type 'OCIColl'. The following
                   3088:    operations OCIColl*() are provided on a generic collection:
                   3089:      - get current size of collection
                   3090:      - get upper bound of collection
                   3091:      - get pointer to an element given its index
                   3092:      - set element at given index (assign element)
                   3093:      - append an element 
                   3094:      - trim the given number of elements from the end of the collection
                   3095:      - collection assignment
                   3096: 
                   3097:    The following iterator based scanning functions are also provided on a
                   3098:    generic collection. These functions make use of an iterator which is
                   3099:    defined to be of type OCIIter.
                   3100: 
                   3101:      - create an iterator for scanning collection
                   3102:      - destroy iterator
                   3103:      - reset iterator to the beginning of collection
                   3104:      - get pointer to current element pointed by iterator
                   3105:      - get pointer to next element
                   3106:      - get pointer to previous element
                   3107: 
                   3108:    The collections variable-length array (varray) and nested table
                   3109:    are sub-types of generic collection. This means that the OCIColl*() 
                   3110:    functions can also be used to manipulate varray and nested table.
                   3111: 
                   3112:    The varray is represented by OCIArray type and nested table by OCITable.
                   3113:    Besides OCIColl*() functions no additional functions are provided for
                   3114:    manipulating varrays. The OCIColl*() functions are a complete set of 
                   3115:    functions to manipulate varrays.
                   3116: 
                   3117:    Besides OCIColl*() functions, the following functions OCITable*() can be 
                   3118:    used to manipulate nested table. The OCITable*() functions operate on 
                   3119:    nested tables only and should not be used on a varray.
                   3120: 
                   3121:      - delete an element at index i. Note that the position
                   3122:        ordinals of the remaining elements of the table is not changed by the
                   3123:        delete operation. So delete creates "holes" in the table.
                   3124:      - check if an element exists at the given index i
                   3125:      - return the smallest value of i for which exists(i) is true
                   3126:      - return the largest value of i for which exists(i) is true
                   3127:      - return pointer to the smallest position j, greater than i, such that 
                   3128:        OCITableExists(j) is true
                   3129:      - return pointer to the largest position j, less than i, such that 
                   3130:        OCITableExists(j) is true
                   3131: 
                   3132:    For binding variables of type OCIColl* or OCITable* in OCI calls
                   3133:    (OCIBindByName(), OCIBindByPos() and OCIDefineByPos()) use the external
                   3134:    type code SQLT_NTY.
                   3135:  */
                   3136: 
                   3137: /* OCIColl - generic collection type */
                   3138: typedef struct OCIColl OCIColl;
                   3139: 
                   3140: /* OCIArray - varray collection type */
                   3141: typedef OCIColl OCIArray;
                   3142: 
                   3143: /* OCITable - nested table collection type */
                   3144: typedef OCIColl OCITable;
                   3145: 
                   3146: /* OCIIter - collection iterator */
                   3147: typedef struct OCIIter OCIIter;
                   3148: 
                   3149: /*----------------------------- OCICollSize ---------------------------------*/
                   3150: 
                   3151: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   3152: sword OCICollSize(/*_ OCIEnv *env, OCIError *err, CONST OCIColl *coll, 
                   3153:                       sb4 *size _*/);
                   3154: #else /* ANSI C */
                   3155: sword OCICollSize( OCIEnv *env, OCIError *err, CONST OCIColl *coll, 
                   3156:                    sb4 *size );
                   3157: #endif
                   3158: /*
                   3159:    NAME: OCICollSize - OCIColl return current SIZe of the given collection
                   3160:    PARAMETERS:
                   3161:         env(IN) - pointer to OCI environment handle
                   3162:         err (IN/OUT) - error handle. If there is an error, it is
                   3163:                 recorded in 'err' and this function returns OCI_ERROR.
                   3164:                 The error recorded in 'err' can be retrieved by calling
                   3165:                 OCIErrorGet().
                   3166:         coll (IN) - collection whose number of elements is returned
                   3167:        size (OUT) - current number of elements in the collection
                   3168:    DESCRIPTION:
                   3169:           Returns the current number of elements in the given collection.
                   3170: 
                   3171:          For collections of type nested table wherein 'delete element'
                   3172:          operation is allowed, the count returned by OCICollSize() will
                   3173:          NOT be decremented upon deleting elements. For example:
                   3174: 
                   3175:            OCICollSize(...); 
                   3176:            // assume 'size' returned is equal to 5
                   3177:            OCITableDelete(...); // delete one element
                   3178:             OCICollSize(...);
                   3179:            // 'size' returned will still be 5
                   3180: 
                   3181:          To get the count minus the deleted elements use OCITableSize(). 
                   3182:          Continuing the above example,
                   3183: 
                   3184:            OCITableSize(...)
                   3185:            // 'size' returned will be equal to 4
                   3186: 
                   3187:          Note, a trim operation (OCICollTrim) will decrement the count 
                   3188:          by the number of trimmed elements. Continuing the above example,
                   3189: 
                   3190:            OCICollTrim(..,1..); // trim one element
                   3191:            OCICollSize(...);
                   3192:            // 'size' returned will be equal to 4
                   3193:    RETURNS:
                   3194:         OCI_SUCCESS if the function completes successfully.
                   3195:        OCI_INVALID_HANDLE if 'env' or 'err' is NULL.
                   3196:         OCI_ERROR if
                   3197:           error during loading of collection into object cache
                   3198:           any of the input parameters is null
                   3199:  */
                   3200: 
                   3201: /*------------------------------ OCICollMax ---------------------------------*/
                   3202: 
                   3203: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   3204: sb4 OCICollMax(/*_ OCIEnv *env, CONST OCIColl *coll _*/);
                   3205: #else /* ANSI C */
                   3206: sb4 OCICollMax(    OCIEnv *env, CONST OCIColl *coll    );
                   3207: #endif
                   3208: /*
                   3209:    NAME: OCICollMax - OCIColl return MAXimum size (upper-bound) of the
                   3210:                    given collection (in number of elements)
                   3211:    PARAMETERS:
                   3212:         env(IN) - pointer to OCI environment handle
                   3213:         coll (IN) - collection whose upper-bound in number of elements 
                   3214:                is returned
                   3215:    DESCRIPTION:
                   3216:         Returns the max number of elements that the given collection can hold.
                   3217:        A value 0 indicates that the collection has no upper-bound.
                   3218:    REQUIRES:
                   3219:        coll must point to a valid collection descriptor
                   3220:    RETURNS:
                   3221:         upper-bound of the given collection
                   3222:  */
                   3223: 
                   3224: /*-------------------------- OCICollGetElem ---------------------------------*/
                   3225: 
                   3226: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   3227: sword OCICollGetElem(/*_ OCIEnv *env, OCIError *err, CONST OCIColl *coll, 
                   3228:                          sb4 index, boolean *exists, dvoid **elem, 
                   3229:                          dvoid **elemind _*/);
                   3230: #else /* ANSI C */
                   3231: sword OCICollGetElem(    OCIEnv *env, OCIError *err, CONST OCIColl *coll, 
                   3232:                          sb4 index, boolean *exists, dvoid **elem, 
                   3233:                          dvoid **elemind    );
                   3234: #endif
                   3235: /*
                   3236:    NAME: OCICollGetElem - OCIColl GET pointer to the element at the given index
                   3237:    PARAMETERS:
                   3238:        env (IN/OUT) - OCI environment handle initialized in object mode.
                   3239:         err (IN/OUT) - error handle. If there is an error, it is
                   3240:                 recorded in 'err' and this function returns OCI_ERROR.
                   3241:                 The error recorded in 'err' can be retrieved by calling
                   3242:                 OCIErrorGet().
                   3243:         coll (IN) - pointer to the element in this collection is returned
                   3244:         index (IN) - index of the element whose pointer is returned
                   3245:         exists (OUT) - set to FALSE if element at the specified index does 
                   3246:                not exist else TRUE
                   3247:         elem (OUT) - address of the desired element is returned
                   3248:         elemind (OUT) [optional] - address of the null indicator information 
                   3249:                 is returned; if (elemind == NULL) then the null indicator
                   3250:                 information will NOT be returned
                   3251:    DESCRIPTION:
                   3252:         Get the address of the element at the given position. Optionally
                   3253:         this function also returns the address of the element's null indicator
                   3254:         information.
                   3255:  
                   3256:         The following table describes for each collection element type
                   3257:         what the corresponding element pointer type is. The element pointer
                   3258:         is returned via the 'elem' parameter of OCICollGetElem().
                   3259:  
                   3260:            Element Type                       *elem is set to
                   3261:         -----------------------               ---------------
                   3262:          Oracle Number (OCINumber)              OCINumber*
                   3263:          Date (OCIDate)                         OCIDate*
                   3264:          Variable-length string (OCIString*)    OCIString**
                   3265:          Variable-length raw (OCIRaw*)          OCIRaw**
                   3266:          object reference (OCIRef*)             OCIRef**
                   3267:          lob locator (OCILobLocator*)           OCILobLocator**
                   3268:          object type (e.g. person)              person*
                   3269:  
                   3270:         The element pointer returned by OCICollGetElem() is in a form
                   3271:         such that it can not only be used to access the
                   3272:         element data but also is in a form that can be used as the target
                   3273:         (i.e left-hand-side) of an assignment statement.
                   3274:  
                   3275:         For example, assume the user is iterating over the elements of
                   3276:         a collection whose element type is object reference (OCIRef*). A call
                   3277:         to OCICollGetElem() returns pointer to a reference handle
                   3278:         (i.e. OCIRef**). After getting, the pointer to the collection
                   3279:         element, the user may wish to modify it by assigning a new reference.
                   3280:         This can be accomplished via the ref assignment function shown below:
                   3281:  
                   3282:         sword OCIRefAssign( OCIEnv *env, OCIError *err, CONST OCIRef *source,
                   3283:                             OCIRef **target );
                   3284:  
                   3285:         Note that the 'target' parameter of OCIRefAssign() is of type
                   3286:         'OCIRef**'. Hence OCICollGetElem() returns 'OCIRef**'.
                   3287:         If '*target == NULL' a new ref will be allocated by OCIRefAssign()
                   3288:         and returned via the 'target' parameter.
                   3289:  
                   3290:         Similarly, if the collection element was of type string (OCIString*),
                   3291:         OCICollGetElem() returns pointer to string handle
                   3292:         (i.e. OCIString**). If a new string is assigned, via
                   3293:         OCIStringAssign() or OCIStringAssignText() the type of the target
                   3294:         must be 'OCIString **'.
                   3295:  
                   3296:         If the collection element is of type Oracle number, OCICollGetElem()
                   3297:         returns OCINumber*. The prototype of OCINumberAssign() is shown below:
                   3298:  
                   3299:         sword OCINumberAssign(OCIError *err, CONST OCINumber *from,
                   3300:                               OCINumber *to);
                   3301:    RETURNS:
                   3302:         OCI_SUCCESS if the function completes successfully.
                   3303:        OCI_INVALID_HANDLE if 'env' or 'err' is NULL.
                   3304:         OCI_ERROR if
                   3305:           any of the input parameters is null
                   3306:  */
                   3307: 
                   3308: /*----------------------- OCICollAssignElem ---------------------------------*/
                   3309: 
                   3310: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   3311: sword OCICollAssignElem(/*_ OCIEnv *env, OCIError *err, sb4 index, 
                   3312:                             CONST dvoid *elem, 
                   3313:                             CONST dvoid *elemind, OCIColl *coll _*/);
                   3314: #else /* ANSI C */
                   3315: sword OCICollAssignElem(    OCIEnv *env, OCIError *err, sb4 index, 
                   3316:                             CONST dvoid *elem, 
                   3317:                             CONST dvoid *elemind, OCIColl *coll    );
                   3318: #endif
                   3319: /*
                   3320:    NAME: OCICollAssignElem - OCIColl ASsign Element
                   3321:    PARAMETERS:
                   3322:        env (IN/OUT) - OCI environment handle initialized in object mode.
                   3323:         err (IN/OUT) - error handle. If there is an error, it is
                   3324:                 recorded in 'err' and this function returns OCI_ERROR.
                   3325:                 The error recorded in 'err' can be retrieved by calling
                   3326:                 OCIErrorGet().
                   3327:         index (IN) - index of the element whose is assigned to
                   3328:         elem (IN) - element which is assigned from (source element)
                   3329:         elemind (IN) [optional] - pointer to the element's null indicator 
                   3330:                 information; if (elemind == NULL) then the null indicator
                   3331:                 information of the assigned element will be set to non-null.
                   3332:         coll (IN/OUT) - collection to be updated
                   3333:    DESCRIPTION:
                   3334:         Assign the given element value 'elem' to the element at coll[index].
                   3335:         If the collection is of type nested table, the element at the given 
                   3336:         index may not exist (i.e. may have been deleted). In this case, the 
                   3337:         given element is inserted at index 'index'.
                   3338:         Otherwise, the element at index 'index' is updated with the value
                   3339:         of 'elem'.
                   3340:   
                   3341:         Note that the given element is deep-copied and 
                   3342:         'elem' is strictly an input parameter.
                   3343:    RETURNS:
                   3344:         OCI_SUCCESS if the function completes successfully.
                   3345:        OCI_INVALID_HANDLE if 'env' or 'err' is NULL.
                   3346:         OCI_ERROR if
                   3347:           any of the input parameters is null
                   3348:           out of memory error
                   3349:           given index is out of bounds of the given collection
                   3350:  */
                   3351: 
                   3352: /*--------------------------- OCICollAssign ---------------------------------*/
                   3353: 
                   3354: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   3355: sword OCICollAssign(/*_ OCIEnv *env, OCIError *err, CONST OCIColl *rhs, 
                   3356:                         OCIColl *lhs _*/);
                   3357: #else /* ANSI C */
                   3358: sword OCICollAssign(    OCIEnv *env, OCIError *err, CONST OCIColl *rhs, 
                   3359:                         OCIColl *lhs    );
                   3360: #endif
                   3361: /*
                   3362:    NAME: OCICollAssign - OCIColl ASsiGn collection
                   3363:    PARAMETERS:
                   3364:        env (IN/OUT) - OCI environment handle initialized in object mode.
                   3365:         err (IN/OUT) - error handle. If there is an error, it is
                   3366:                 recorded in 'err' and this function returns OCI_ERROR.
                   3367:                 The error recorded in 'err' can be retrieved by calling
                   3368:                 OCIErrorGet().
                   3369:         rhs (IN) - collection to be assigned from
                   3370:         lhs (OUT) - collection to be assigned to
                   3371:    DESCRIPTION:
                   3372:         Assign 'rhs' to 'lhs'. The 'lhs' collection may be decreased or 
                   3373:         increased depending upon the size of 'rhs'. If the 'lhs' contains 
                   3374:         any elements then the elements will be deleted prior to the 
                   3375:         assignment. This function performs a deep-copy. The memory for the 
                   3376:         elements comes from the object cache.
                   3377:  
                   3378:         An error is returned if the element types of the lhs and rhs 
                   3379:         collections do not match. Also, an error is returned if the 
                   3380:         upper-bound of the lhs collection is less than the current number of 
                   3381:         elements in the rhs collection.
                   3382:    RETURNS:
                   3383:         OCI_SUCCESS if the function completes successfully.
                   3384:        OCI_INVALID_HANDLE if 'env' or 'err' is NULL.
                   3385:         OCI_ERROR if
                   3386:           any of the input parameters is null
                   3387:           out of memory error
                   3388:           type mis-match of lhs and rhs collections
                   3389:           upper-bound of lhs collection is less than the current number of 
                   3390:           elements in the rhs collection
                   3391:  */
                   3392: 
                   3393: /*--------------------------- OCICollAppend ---------------------------------*/
                   3394: 
                   3395: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   3396: sword OCICollAppend(/*_ OCIEnv *env, OCIError *err, CONST dvoid *elem, 
                   3397:                         CONST dvoid *elemind, OCIColl *coll _*/);
                   3398: #else /* ANSI C */
                   3399: sword OCICollAppend(    OCIEnv *env, OCIError *err, CONST dvoid *elem, 
                   3400:                         CONST dvoid *elemind, OCIColl *coll    );
                   3401: #endif
                   3402: /*
                   3403:    NAME: OCICollAppend - OCIColl APPend collection
                   3404:    PARAMETERS:
                   3405:        env (IN/OUT) - OCI environment handle initialized in object mode.
                   3406:         err (IN/OUT) - error handle. If there is an error, it is
                   3407:                 recorded in 'err' and this function returns OCI_ERROR.
                   3408:                 The error recorded in 'err' can be retrieved by calling
                   3409:                 OCIErrorGet().
                   3410:         elem (IN) - pointer to the element which is appended to the end
                   3411:                 of the given collection
                   3412:         elemind (IN) [optional] - pointer to the element's null indicator 
                   3413:                 information; if (elemind == NULL) then the null indicator
                   3414:                 information of the appended element will be set to non-null.
                   3415:         coll (IN/OUT) - updated collection
                   3416:    DESCRIPTION:
                   3417:         Append the given element to the end of the given collection. 
                   3418:         Appending an element is equivalent to:
                   3419:           - increasing the size of the collection by 1 element
                   3420:           - updating (deep-copying) the last element's data with the given 
                   3421:             element's data
                   3422:   
                   3423:         Note that the pointer to the given element 'elem' will not be saved 
                   3424:         by this function. So 'elem' is strictly an input parameter.
                   3425:         An error is returned if the current size of the collection
                   3426:         is equal to the max size (upper-bound) of the collection prior to 
                   3427:         appending the element.
                   3428:    RETURNS:
                   3429:         OCI_SUCCESS if the function completes successfully.
                   3430:        OCI_INVALID_HANDLE if 'env' or 'err' is NULL.
                   3431:         OCI_ERROR if
                   3432:           any of the input parameters is null
                   3433:           out of memory error
                   3434:           current size of collection == max size of the collection
                   3435:  */
                   3436: 
                   3437: /*----------------------------- OCICollTrim ---------------------------------*/
                   3438: 
                   3439: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   3440: sword OCICollTrim(/*_ OCIEnv *env, OCIError *err, sb4 trim_num, 
                   3441:                       OCIColl *coll _*/);
                   3442: #else /* ANSI C */
                   3443: sword OCICollTrim(    OCIEnv *env, OCIError *err, sb4 trim_num, 
                   3444:                       OCIColl *coll    );
                   3445: #endif
                   3446: /*
                   3447:    NAME: OCICollTrim - OCIColl Trim elements from the end of the collection
                   3448:    PARAMETERS:
                   3449:        env (IN/OUT) - OCI environment handle initialized in object mode.
                   3450:         err (IN/OUT) - error handle. If there is an error, it is
                   3451:                 recorded in 'err' and this function returns OCI_ERROR.
                   3452:                 The error recorded in 'err' can be retrieved by calling
                   3453:                 OCIErrorGet().
                   3454:         trim_num (IN) - number of elements to trim
                   3455:         coll (IN/OUT) - 'trim_num' of elements are removed (freed) from the
                   3456:                 end of the collection
                   3457:    DESCRIPTION:
                   3458:         Trim the collection by the given number of elements. The elements are 
                   3459:         removed from the end of the collection.
                   3460:   
                   3461:         An error is returned if the 'trim_num' is greater than the current 
                   3462:         size of the collection.
                   3463:    RETURNS:
                   3464:         OCI_SUCCESS if the function completes successfully.
                   3465:        OCI_INVALID_HANDLE if 'env' or 'err' is NULL.
                   3466:         OCI_ERROR if
                   3467:           any of the input parameters is null
                   3468:           'trim_num' is greater than the current size of the collection.
                   3469:  */
                   3470: 
                   3471: /*--------------------------- OCICollIsLocator ------------------------------*/
                   3472: 
                   3473: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   3474: sword OCICollIsLocator(/*_ OCIEnv *env, OCIError *err, CONST OCIColl *coll,
                   3475:                        boolean *result _*/);
                   3476: #else /* ANSI C */
                   3477: sword OCICollIsLocator(OCIEnv *env, OCIError *err, CONST OCIColl *coll,
                   3478:                        boolean *result );
                   3479: #endif
                   3480: /*
                   3481: Name: OCICollIsLocator - OCIColl indicates whether a collection is locator
                   3482:                          based or not.
                   3483: Parameters:
                   3484:         env(IN) - pointer to OCI environment handle
                   3485:         err (IN/OUT) - error handle. If there is an error, it is
                   3486:                 recorded in 'err' and this function returns OCI_ERROR.
                   3487:                 The error recorded in 'err' can be retrieved by calling
                   3488:                 OCIErrorGet().
                   3489:         coll (IN) - collection item.
                   3490:         result (OUT) - TRUE if the collection item is a locator, FALSE
                   3491:                        otherwise
                   3492: Description:
                   3493:         Returns TRUE in the result OUT parameter if the collection item is a
                   3494:         locator, otherwise returns FALSE.
                   3495: Returns:
                   3496:         OCI_SUCCESS if the function completes successfully.
                   3497:         OCI_INVALID_HANDLE if 'env' or 'err' is NULL.
                   3498: */
                   3499: 
                   3500: /*---------------------------- OCIIterCreate --------------------------------*/
                   3501: 
                   3502: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   3503: sword OCIIterCreate(/*_ OCIEnv *env, OCIError *err, CONST OCIColl *coll, 
                   3504:                         OCIIter **itr _*/);
                   3505: #else /* ANSI C */
                   3506: sword OCIIterCreate(    OCIEnv *env, OCIError *err, CONST OCIColl *coll, 
                   3507:                         OCIIter **itr    );
                   3508: #endif
                   3509: /*
                   3510:    NAME: OCIIterCreate - OCIColl Create an ITerator to scan the collection
                   3511:                       elements
                   3512:    PARAMETERS:
                   3513:        env (IN/OUT) - OCI environment handle initialized in object mode.
                   3514:         err (IN/OUT) - error handle. If there is an error, it is
                   3515:                 recorded in 'err' and this function returns OCI_ERROR.
                   3516:                 The error recorded in 'err' can be retrieved by calling
                   3517:                 OCIErrorGet().
                   3518:         coll (IN) - collection which will be scanned; the different 
                   3519:                 collection types are varray and nested table
                   3520:         itr (OUT) - address to the allocated collection iterator is
                   3521:                 returned by this function
                   3522:    DESCRIPTION:
                   3523:         Create an iterator to scan the elements of the collection. The
                   3524:         iterator is created in the object cache. The iterator is initialized
                   3525:         to point to the beginning of the collection.
                   3526:   
                   3527:         If the next function (OCIIterNext) is called immediately 
                   3528:         after creating the iterator then the first element of the collection 
                   3529:         is returned. 
                   3530:         If the previous function (OCIIterPrev) is called immediately after 
                   3531:         creating the iterator then "at beginning of collection" error is 
                   3532:         returned.
                   3533:    RETURNS:
                   3534:         OCI_SUCCESS if the function completes successfully.
                   3535:        OCI_INVALID_HANDLE if 'env' or 'err' is NULL.
                   3536:         OCI_ERROR if
                   3537:           any of the input parameters is null
                   3538:           out of memory error
                   3539:  */
                   3540: 
                   3541: /*----------------------------- OCIIterDelete ------------------------------*/
                   3542: 
                   3543: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   3544: sword OCIIterDelete(/*_ OCIEnv *env, OCIError *err, OCIIter **itr _*/);
                   3545: #else /* ANSI C */
                   3546: sword OCIIterDelete(    OCIEnv *env, OCIError *err, OCIIter **itr    );
                   3547: #endif
                   3548: /*
                   3549:    NAME: OCIIterDelete - OCIColl Delete ITerator
                   3550:    PARAMETERS:
                   3551:        env (IN/OUT) - OCI environment handle initialized in object mode.
                   3552:         err (IN/OUT) - error handle. If there is an error, it is
                   3553:                 recorded in 'err' and this function returns OCI_ERROR.
                   3554:                 The error recorded in 'err' can be retrieved by calling
                   3555:                 OCIErrorGet().
                   3556:         itr (IN/OUT) - the allocated collection iterator is destroyed and
                   3557:                 the 'itr' is set to NULL prior to returning
                   3558:    DESCRIPTION:
                   3559:         Delete the iterator which was previously created by a call to 
                   3560:         OCIIterCreate.
                   3561:    RETURNS:
                   3562:         OCI_SUCCESS if the function completes successfully.
                   3563:        OCI_INVALID_HANDLE if 'env' or 'err' is NULL.
                   3564:         OCI_ERROR if
                   3565:           any of the input parameters is null
                   3566:           to be discovered
                   3567:  */
                   3568: 
                   3569: /*----------------------------- OCIIterInit ---------------------------------*/
                   3570: 
                   3571: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   3572: sword OCIIterInit(/*_ OCIEnv *env, OCIError *err, CONST OCIColl *coll, 
                   3573:                       OCIIter *itr _*/);
                   3574: #else /* ANSI C */
                   3575: sword OCIIterInit(    OCIEnv *env, OCIError *err, CONST OCIColl *coll, 
                   3576:                       OCIIter *itr    );
                   3577: #endif
                   3578: /*
                   3579:    NAME: OCIIterInit - OCIColl Initialize ITerator to scan the given 
                   3580:                    collection
                   3581:    PARAMETERS:
                   3582:        env (IN/OUT) - OCI environment handle initialized in object mode.
                   3583:         err (IN/OUT) - error handle. If there is an error, it is
                   3584:                 recorded in 'err' and this function returns OCI_ERROR.
                   3585:                 The error recorded in 'err' can be retrieved by calling
                   3586:                 OCIErrorGet().
                   3587:         coll (IN) - collection which will be scanned; the different 
                   3588:                 collection types are varray and nested table
                   3589:         itr (IN/OUT) - pointer to an allocated  collection iterator
                   3590:    DESCRIPTION:
                   3591:         Initializes the given iterator to point to the beginning of the 
                   3592:         given collection. This function can be used to:
                   3593:   
                   3594:         a. reset an iterator to point back to the beginning of the collection 
                   3595:         b. reuse an allocated iterator to scan a different collection
                   3596:    RETURNS:
                   3597:         OCI_SUCCESS if the function completes successfully.
                   3598:        OCI_INVALID_HANDLE if 'env' or 'err' is NULL.
                   3599:         OCI_ERROR if
                   3600:           any of the input parameters is null
                   3601:  */
                   3602: 
                   3603: /*------------------------ OCIIterGetCurrent --------------------------------*/
                   3604: 
                   3605: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   3606: sword OCIIterGetCurrent(/*_ OCIEnv *env, OCIError *err, CONST OCIIter *itr, 
                   3607:                             dvoid **elem, dvoid **elemind _*/);
                   3608: #else /* ANSI C */
                   3609: sword OCIIterGetCurrent(    OCIEnv *env, OCIError *err, CONST OCIIter *itr, 
                   3610:                             dvoid **elem, dvoid **elemind    );
                   3611: #endif
                   3612: /*
                   3613:    NAME: OCIIterGetCurrent - OCIColl Iterator based, get CURrent collection
                   3614:                     element
                   3615:    PARAMETERS:
                   3616:        env (IN/OUT) - OCI environment handle initialized in object mode.
                   3617:         err (IN/OUT) - error handle. If there is an error, it is
                   3618:                 recorded in 'err' and this function returns OCI_ERROR.
                   3619:                 The error recorded in 'err' can be retrieved by calling
                   3620:                 OCIErrorGet().
                   3621:         itr (IN) - iterator which points to the current element
                   3622:         elem (OUT) - address of the element pointed by the iterator is returned
                   3623:         elemind (OUT) [optional] - address of the element's null indicator 
                   3624:                 information is returned; if (elemind == NULL) then the null 
                   3625:                 indicator information will NOT be returned
                   3626:    DESCRIPTION:
                   3627:         Returns pointer to the current element and its corresponding null
                   3628:         information.
                   3629:    RETURNS:
                   3630:         OCI_SUCCESS if the function completes successfully.
                   3631:        OCI_INVALID_HANDLE if 'env' or 'err' is NULL.
                   3632:         OCI_ERROR if
                   3633:           any of the input parameters is null
                   3634:  */
                   3635: 
                   3636: /*------------------------------ OCIIterNext --------------------------------*/
                   3637: 
                   3638: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   3639: sword OCIIterNext(/*_ OCIEnv *env, OCIError *err, OCIIter *itr, 
                   3640:                       dvoid **elem, dvoid **elemind, boolean *eoc _*/);
                   3641: #else /* ANSI C */
                   3642: sword OCIIterNext(    OCIEnv *env, OCIError *err, OCIIter *itr, 
                   3643:                       dvoid **elem, dvoid **elemind, boolean *eoc    );
                   3644: #endif
                   3645: /*
                   3646:    NAME: OCIIterNext - OCIColl Iterator based, get NeXT collection element
                   3647:    PARAMETERS:
                   3648:        env (IN/OUT) - OCI environment handle initialized in object mode.
                   3649:         err (IN/OUT) - error handle. If there is an error, it is
                   3650:                 recorded in 'err' and this function returns OCI_ERROR.
                   3651:                 The error recorded in 'err' can be retrieved by calling
                   3652:                 OCIErrorGet().
                   3653:         itr (IN/OUT) - iterator is updated to point to the next element
                   3654:         elem (OUT) - after updating the iterator to point to the next element,
                   3655:                 address of the element is returned
                   3656:         elemind (OUT) [optional] - address of the element's null indicator 
                   3657:                 information is returned; if (elemind == NULL) then the null 
                   3658:                 indicator information will NOT be returned
                   3659:        eoc (OUT) - TRUE if iterator is at End Of Collection (i.e. next
                   3660:                element does not exist) else FALSE
                   3661:    DESCRIPTION:
                   3662:         Returns pointer to the next element and its corresponding null
                   3663:         information. The iterator is updated to point to the next element.
                   3664:   
                   3665:         If the iterator is pointing to the last element of the collection
                   3666:         prior to executing this function, then calling this function will 
                   3667:         set eoc flag to TRUE. The iterator will be left unchanged in this
                   3668:         situation.
                   3669:    RETURNS:
                   3670:         OCI_SUCCESS if the function completes successfully.
                   3671:        OCI_INVALID_HANDLE if 'env' or 'err' is NULL.
                   3672:         OCI_ERROR if
                   3673:           any of the input parameters is null
                   3674:  */
                   3675: 
                   3676: /*------------------------------ OCIIterPrev --------------------------------*/
                   3677: 
                   3678: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   3679: sword OCIIterPrev(/*_ OCIEnv *env, OCIError *err, OCIIter *itr, 
                   3680:                       dvoid **elem, dvoid **elemind, boolean *boc _*/);
                   3681: #else /* ANSI C */
                   3682: sword OCIIterPrev(    OCIEnv *env, OCIError *err, OCIIter *itr, 
                   3683:                       dvoid **elem, dvoid **elemind, boolean *boc    );
                   3684: #endif
                   3685: /*
                   3686:    NAME: OCIIterPrev - OCIColl Iterator based, get PReVious collection element
                   3687:    PARAMETERS:
                   3688:        env (IN/OUT) - OCI environment handle initialized in object mode.
                   3689:         err (IN/OUT) - error handle. If there is an error, it is
                   3690:                 recorded in 'err' and this function returns OCI_ERROR.
                   3691:                 The error recorded in 'err' can be retrieved by calling
                   3692:                 OCIErrorGet().
                   3693:         itr (IN/OUT) - iterator is updated to point to the previous 
                   3694:                 element
                   3695:         elem (OUT) - after updating the iterator to point to the previous 
                   3696:                 element, address of the element is returned
                   3697:         elemind (OUT) [optional] - address of the element's null indicator 
                   3698:                 information is returned; if (elemind == NULL) then the null 
                   3699:                 indicator information will NOT be returned
                   3700:         boc (OUT) - TRUE if iterator is at Beginning Of Collection (i.e.
                   3701:                previous element does not exist) else FALSE.
                   3702:    DESCRIPTION:
                   3703:         Returns pointer to the previous element and its corresponding null
                   3704:         information. The iterator is updated to point to the previous element.
                   3705:   
                   3706:         If the iterator is pointing to the first element of the collection
                   3707:         prior to executing this function, then calling this function will 
                   3708:         set 'boc' to TRUE. The iterator will be left unchanged in this 
                   3709:         situation.
                   3710:    RETURNS:
                   3711:         OCI_SUCCESS if the function completes successfully.
                   3712:        OCI_INVALID_HANDLE if 'env' or 'err' is NULL.
                   3713:         OCI_ERROR if
                   3714:           any of the input parameters is null
                   3715:  */
                   3716: 
                   3717: /*****************************************************************************/
                   3718: /*           FUNCTIONS WHICH OPERATE ONLY ON NESTED TABLE OCITable*()        */
                   3719: /*****************************************************************************/
                   3720: 
                   3721: /*---------------------------- OCITableSize ---------------------------------*/
                   3722: 
                   3723: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   3724: sword OCITableSize(/*_ OCIEnv *env, OCIError *err, CONST OCITable *tbl, 
                   3725:                        sb4 *size _*/);
                   3726: #else /* ANSI C */
                   3727: sword OCITableSize( OCIEnv *env, OCIError *err, CONST OCITable *tbl, 
                   3728:                     sb4 *size);
                   3729: #endif
                   3730: /*
                   3731:    NAME: OCITableSize - OCITable return current SIZe of the given 
                   3732:                   nested table (not including deleted elements)
                   3733:    PARAMETERS:
                   3734:         env(IN) - pointer to OCI environment handle
                   3735:         err (IN/OUT) - error handle. If there is an error, it is
                   3736:                 recorded in 'err' and this function returns OCI_ERROR.
                   3737:                 The error recorded in 'err' can be retrieved by calling
                   3738:                 OCIErrorGet().
                   3739:         tbl (IN) - nested table whose number of elements is returned
                   3740:        size (OUT) - current number of elements in the nested table. The count
                   3741:                does not include deleted elements.
                   3742:    DESCRIPTION:
                   3743:         Returns the count of elements in the given nested table. 
                   3744: 
                   3745:        The count returned by OCITableSize() will be decremented upon 
                   3746:        deleting elements from the nested table. So, this count DOES NOT 
                   3747:        includes any "holes" created by deleting elements. 
                   3748:        For example:
                   3749: 
                   3750:            OCITableSize(...); 
                   3751:            // assume 'size' returned is equal to 5
                   3752:            OCITableDelete(...); // delete one element
                   3753:             OCITableSize(...);
                   3754:            // 'size' returned will be equal to 4
                   3755: 
                   3756:        To get the count plus the count of deleted elements use 
                   3757:        OCICollSize(). Continuing the above example,
                   3758: 
                   3759:            OCICollSize(...)
                   3760:            // 'size' returned will still be equal to 5
                   3761:    RETURNS:
                   3762:         OCI_SUCCESS if the function completes successfully.
                   3763:        OCI_INVALID_HANDLE if 'env' or 'err' is NULL.
                   3764:         OCI_ERROR if
                   3765:           error during loading of nested table into object cache
                   3766:           any of the input parameters is null
                   3767:  */
                   3768: 
                   3769: /*---------------------- OCITableExists ---------------------------------*/
                   3770: 
                   3771: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   3772: sword OCITableExists(/*_ OCIEnv *env, OCIError *err, CONST OCITable *tbl,
                   3773:                              sb4 index, boolean *exists _*/);
                   3774: #else /* ANSI C */
                   3775: sword OCITableExists(    OCIEnv *env, OCIError *err, CONST OCITable *tbl,
                   3776:                              sb4 index, boolean *exists    );
                   3777: #endif
                   3778: /*
                   3779:    NAME: OCITableExists - OCITable test whether element at the given index
                   3780:                     EXIsts
                   3781:    PARAMETERS:
                   3782:        env (IN/OUT) - OCI environment handle initialized in object mode.
                   3783:         err (IN/OUT) - error handle. If there is an error, it is
                   3784:                 recorded in 'err' and this function returns OCI_ERROR.
                   3785:                 The error recorded in 'err' can be retrieved by calling
                   3786:                 OCIErrorGet().
                   3787:         tbl (IN) - table in which the given index is checked
                   3788:         index (IN) - index of the element which is checked for existence
                   3789:         exists (OUT) - set to TRUE if element at given 'index' exists
                   3790:                 else set to FALSE
                   3791:    DESCRIPTION:
                   3792:         Test whether an element exists at the given 'index'.
                   3793:    RETURNS:
                   3794:         OCI_SUCCESS if the function completes successfully.
                   3795:        OCI_INVALID_HANDLE if 'env' or 'err' is NULL.
                   3796:         OCI_ERROR if
                   3797:           any of the input parameters is null
                   3798:  */
                   3799: 
                   3800: /*--------------------------- OCITableDelete -------------------------------*/
                   3801: 
                   3802: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   3803: sword OCITableDelete(/*_ OCIEnv *env, OCIError *err, sb4 index, 
                   3804:                       OCITable *tbl _*/);
                   3805: #else /* ANSI C */
                   3806: sword OCITableDelete(    OCIEnv *env, OCIError *err, sb4 index, 
                   3807:                       OCITable *tbl    );
                   3808: #endif
                   3809: /*
                   3810:    NAME: OCITableDelete - OCITable DELete element at the specified index
                   3811:    PARAMETERS:
                   3812:        env (IN/OUT) - OCI environment handle initialized in object mode.
                   3813:         err (IN/OUT) - error handle. If there is an error, it is
                   3814:                 recorded in 'err' and this function returns OCI_ERROR.
                   3815:                 The error recorded in 'err' can be retrieved by calling
                   3816:                 OCIErrorGet().
                   3817:         index (IN) - index of the element which must be deleted
                   3818:         tbl (IN) - table whose element is deleted
                   3819:    DESCRIPTION:
                   3820:         Delete the element at the given 'index'. Note that the position
                   3821:         ordinals of the remaining elements of the table is not changed by the
                   3822:         delete operation. So delete creates "holes" in the table.
                   3823: 
                   3824:         An error is returned if the element at the specified 'index' has
                   3825:         been previously deleted.
                   3826:    RETURNS:
                   3827:         OCI_SUCCESS if the function completes successfully.
                   3828:        OCI_INVALID_HANDLE if 'env' or 'err' is NULL.
                   3829:         OCI_ERROR if
                   3830:           any of the input parameters is null
                   3831:           given index is not valid
                   3832:  */
                   3833: 
                   3834: /*--------------------------- OCITableFirst ---------------------------------*/
                   3835: 
                   3836: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   3837: sword OCITableFirst(/*_ OCIEnv *env, OCIError *err, CONST OCITable *tbl, 
                   3838:                         sb4 *index  _*/);
                   3839: #else /* ANSI C */
                   3840: sword OCITableFirst(    OCIEnv *env, OCIError *err, CONST OCITable *tbl, 
                   3841:                         sb4 *index     );
                   3842: #endif
                   3843: /*
                   3844:    NAME: OCITableFirst - OCITable return FirST index of table
                   3845:    PARAMETERS:
                   3846:        env (IN/OUT) - OCI environment handle initialized in object mode.
                   3847:         err (IN/OUT) - error handle. If there is an error, it is
                   3848:                 recorded in 'err' and this function returns OCI_ERROR.
                   3849:                 The error recorded in 'err' can be retrieved by calling
                   3850:                 OCIErrorGet().
                   3851:         tbl (IN) - table which is scanned
                   3852:         index (OUT) - first index of the element which exists in the given 
                   3853:                 table is returned
                   3854:    DESCRIPTION:
                   3855:         Return the first index of the element which exists in the given 
                   3856:         table. 
                   3857:    RETURNS:
                   3858:         OCI_SUCCESS if the function completes successfully.
                   3859:        OCI_INVALID_HANDLE if 'env' or 'err' is NULL.
                   3860:         OCI_ERROR if
                   3861:           table is empty
                   3862:  */
                   3863: 
                   3864: /*---------------------------- OCITableLast ---------------------------------*/
                   3865: 
                   3866: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   3867: sword OCITableLast(/*_ OCIEnv *env, OCIError *err, CONST OCITable *tbl, 
                   3868:                        sb4 *index  _*/);
                   3869: #else /* ANSI C */
                   3870: sword OCITableLast(    OCIEnv *env, OCIError *err, CONST OCITable *tbl, 
                   3871:                        sb4 *index     );
                   3872: #endif
                   3873: /*
                   3874:    NAME: OCITableFirst - OCITable return LaST index of table
                   3875:    PARAMETERS:
                   3876:        env (IN/OUT) - OCI environment handle initialized in object mode.
                   3877:         err (IN/OUT) - error handle. If there is an error, it is
                   3878:                 recorded in 'err' and this function returns OCI_ERROR.
                   3879:                 The error recorded in 'err' can be retrieved by calling
                   3880:                 OCIErrorGet().
                   3881:         tbl (IN) - table which is scanned
                   3882:         index (OUT) - last index of the element which exists in the given 
                   3883:                 table is returned
                   3884:    DESCRIPTION:
                   3885:         Return the last index of the element which exists in the given 
                   3886:         table. 
                   3887:    RETURNS:
                   3888:         OCI_SUCCESS if the function completes successfully.
                   3889:        OCI_INVALID_HANDLE if 'env' or 'err' is NULL.
                   3890:         OCI_ERROR if
                   3891:           table is empty
                   3892:  */
                   3893: 
                   3894: /*---------------------------- OCITableNext ---------------------------------*/
                   3895: 
                   3896: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   3897: sword OCITableNext(/*_ OCIEnv *env, OCIError *err, sb4 index, 
                   3898:                        CONST OCITable *tbl, sb4 *next_index,
                   3899:                        boolean *exists _*/);
                   3900: #else /* ANSI C */
                   3901: sword OCITableNext(    OCIEnv *env, OCIError *err, sb4 index, 
                   3902:                        CONST OCITable *tbl, sb4 *next_index,
                   3903:                        boolean *exists    );
                   3904: #endif
                   3905: /*
                   3906:    NAME: OCITableNext - OCITable return NeXT available index of table
                   3907:    PARAMETERS:
                   3908:        env (IN/OUT) - OCI environment handle initialized in object mode.
                   3909:         err (IN/OUT) - error handle. If there is an error, it is
                   3910:                 recorded in 'err' and this function returns OCI_ERROR.
                   3911:                 The error recorded in 'err' can be retrieved by calling
                   3912:                 OCIErrorGet().
                   3913:         index (IN) - starting at 'index' the index of the next element
                   3914:                 which exists is returned
                   3915:         tbl (IN) - table which is scanned
                   3916:         next_index (OUT) - index of the next element which exists 
                   3917:                 is returned
                   3918:         exists (OUT) - FALSE if no next index available else TRUE
                   3919:    DESCRIPTION:
                   3920:         Return the smallest position j, greater than 'index', such that 
                   3921:         exists(j) is TRUE.
                   3922:    RETURNS:
                   3923:         OCI_SUCCESS if the function completes successfully.
                   3924:        OCI_INVALID_HANDLE if 'env' or 'err' is NULL.
                   3925:         OCI_ERROR if
                   3926:           no next index available
                   3927:  */
                   3928: 
                   3929: /*---------------------------- OCITablePrev ---------------------------------*/
                   3930: 
                   3931: #if !defined(__STDC__) && !defined(__cplusplus) /* K&R C - not ANSI C */
                   3932: sword OCITablePrev(/*_ OCIEnv *env, OCIError *err, sb4 index, 
                   3933:                        CONST OCITable *tbl, sb4 *prev_index,
                   3934:                        boolean *exists _*/);
                   3935: #else /* ANSI C */
                   3936: sword OCITablePrev(    OCIEnv *env, OCIError *err, sb4 index, 
                   3937:                        CONST OCITable *tbl, sb4 *prev_index,
                   3938:                        boolean *exists    );
                   3939: #endif
                   3940: /*
                   3941:    NAME: OCITablePrev - OCITable return PReVious available index of table
                   3942:    PARAMETERS:
                   3943:        env (IN/OUT) - OCI environment handle initialized in object mode.
                   3944:         err (IN/OUT) - error handle. If there is an error, it is
                   3945:                 recorded in 'err' and this function returns OCI_ERROR.
                   3946:                 The error recorded in 'err' can be retrieved by calling
                   3947:                 OCIErrorGet().
                   3948:         index (IN) - starting at 'index' the index of the previous element
                   3949:                 which exists is returned
                   3950:         tbl (IN) - table which is scanned
                   3951:         prev_index (OUT) - index of the previous element which exists 
                   3952:                 is returned
                   3953:         exists (OUT) - FALSE if no next index available else TRUE
                   3954:    DESCRIPTION:
                   3955:         Return the largest position j, less than 'index', such that 
                   3956:         exists(j) is TRUE.
                   3957:    RETURNS:
                   3958:         OCI_SUCCESS if the function completes successfully.
                   3959:        OCI_INVALID_HANDLE if 'env' or 'err' is NULL.
                   3960:         OCI_ERROR if
                   3961:           no previous index available
                   3962:  */
                   3963: 
                   3964: /*------------------------ OCINumberToLnx -----------------------------------*/
                   3965: /* void OCINumberToLnx(/o_ OCINumber *num _o/); */
                   3966: 
                   3967: #define OCINumberToLnx(num) ((lnxnum_t *)num)
                   3968: 
                   3969: /* 
                   3970:    NAME:   OCINumberToLnx
                   3971:    PARAMETERS:
                   3972:            num (IN) - OCINumber to convert ;
                   3973:    DESCRIPTION: 
                   3974:            Converts OCINumber to its internal lnx format 
                   3975:            This is not to be used in Public interfaces , but
                   3976:            has been provided due to special requirements from 
                   3977:            SQLPLUS development group as they require to call 
                   3978:            Core funtions directly . 
                   3979: */
                   3980: 
                   3981: #endif /* ORL_ORACLE */

E-mail: