Re: OCI (Oracle Call Interface)

From: <andy.cooper_at_ibm.net>
Date: 1998/06/21
Message-ID: <358d6922.0_at_news1.ibm.net>


[Quoted] I use this unit to interface to the OCI. It is my translation of ociapr.h, oratypes.h, and some stuff from the OCI manual. It should probably carry an Oracle copyright.

x-------- cut here ---------x
unit OCI;

interface

const
  CDA_SIZE = 64; (* OCI Logon Modes for olog call *)

  OCI_LM_DEF       = 0;           (* default login *)
  OCI_LM_NBL       = 1;           (* non-blocking logon *)

(* OCI Environment Modes for opinit call *)
  OCI_EV_DEF       = 0;           (* default single-threaded environment *)
  OCI_EV_TSF       = 1;           (* thread-safe environment *)

(* OCI_*_PIECE defines the piece types that are returned or set *)
  OCI_ONE_PIECE    = 0;           (* there or this is the only piece *)
  OCI_FIRST_PIECE  = 1;           (* the first of many pieces *)
  OCI_NEXT_PIECE   = 2;           (* the next of many pieces *)
  OCI_LAST_PIECE   = 3;           (* the last piece of this column *)

(* input data types *)
  SQLT_CHR         = 1;           (* (ORANET TYPE) character string *)
  SQLT_NUM         = 2;           (* (ORANET TYPE) oracle numeric *)
  SQLT_INT         = 3;           (* (ORANET TYPE) integer *)
  SQLT_FLT         = 4;           (* (ORANET TYPE) Floating point number *)
  SQLT_STR         = 5;           (* zero terminated string *)
  SQLT_VNU         = 6;           (* NUM with preceding length byte *)
  SQLT_PDN         = 7;           (* (ORANET TYPE) Packed Decimal Numeric *)
  SQLT_LNG         = 8;           (* long *)
  SQLT_VCS         = 9;           (* Variable character string *)
  SQLT_NON         = 10;          (* Null/empty PCC Descriptor entry *)
  SQLT_RID         = 11;          (* rowid *)
  SQLT_DAT         = 12;          (* date in oracle format *)
  SQLT_VBI         = 15;          (* binary in VCS format *)
  SQLT_BIN         = 23;          (* binary data(DTYBIN) *)
  SQLT_LBI         = 24;          (* long binary *)
  SQLT_UIN         = 68;          (* unsigned integer *)
  SQLT_SLS         = 91;          (* Display sign leading separate *)
  SQLT_LVC         = 94;          (* Longer longs (char) *)
  SQLT_LVB         = 95;          (* Longer long binary *)
  SQLT_AFC         = 96;          (* Ansi fixed char *)
  SQLT_AVC         = 97;          (* Ansi Var char *)
  SQLT_CUR         = 102;         (* cursor  type *)
  SQLT_LAB         = 105;         (* label type *)
  SQLT_OSL         = 106;         (* oslabel type *)

  OCI_def          = 1;           (* deferred mode *)
  OCI_imm          = 0;           (* non deferred mode *)

Type
  sb1              = shortint;    {8 bit signed}
  sb2              = smallint;    {16 bit signed}
  sb4              = longint;     {32 bit signed}
  sword            = longint;     {32 bit signed - maxvalue +/- 32768}

  ub4              = cardinal;    {32 bit unsigned - 32 bit compiler
only!!!}
  ub2              = word;        {16 bit unsigned}
  ub1              = byte;        {8 bit unsigned}
  size_t           = longint;

  rd = record
    rcs4      : ub4;
    rcs5      : ub2;
    rcs6      : ub1;

  end;

  rid = record {rowid}

    rcsx      : rd;
    rcs7      : ub4;
    rcs8      : ub2

  end;
  cda_head = record        (* Used for size calcualtion only!!!! *)
    v2_rc     : sb2;       (* V2 return code *)
    ft        : ub2;       (* SQL function type *)
    rpc       : ub4;       (* rows processed count *)
    peo       : ub2;       (* parse error offset *)
    fc        : ub1;       (* OCI function code *)
    rcs1      : ub1;       (* filler area *)
    rc        : ub2;       (* V7 return code *)
    wrn       : ub1;       (* warning flags *)
    rcs2      : ub1;       (* reserved *)
    rcs3      : sword;     (* reserved *)
    rowid     : rid;
    ose       : sword;     (* OSD dependent error *)
    chk       : ub1;
    rcsp      : pointer;     (* pointer to reserved area *)
  end;

  cda_def = record

    v2_rc     : sb2;       (* 0  V2 return code *)
    ft        : ub2;       (* 2  SQL function type *)
    rpc       : ub4;       (* 4  rows processed count *)
    peo       : ub2;       (* 8  parse error offset *)
    fc        : ub1;       (* 10 OCI function code *)
    rcs1      : ub1;       (* 11 filler area *)
    rc        : ub2;       (* 12 V7 return code *)
    wrn       : ub1;       (* 14 warning flags *)
    rcs2      : ub1;       (* 15 reserved *)
    rcs3      : sword;     (* 16 reserved *)
    rowid     : rid;       (* 20 *)
    ose       : sword;     (* 33 OSD dependent error *)
    chk       : ub1;       (* 37 *)
    rcsp      : pointer;   (* 38 pointer to reserved area *)
    rcs9      : array[1..cda_size-sizeof(cda_head)] of byte;  (* filler *)
  end;

  hda_def = array[0..255] of byte;

function olog(var lda:cda_def; var hda:hda_def; (* logon on to database *)

              uid : pchar; uidl : sword;
              pswd : pchar; pswdl : sword;
              conn : pchar; connl: sword;
              mode : ub4):sword; cdecl;
function ologof(var lda : cda_def):sword;cdecl;         (* log off database
*)
function oopen(var cursor:cda_def;var lda:cda_def;        (* open cursor *)
                 dbn:pchar;dbnl:sword;arsize:sword;
                 uid:pchar;uidl:sword):sword;cdecl;
function oclose(var cursor:cda_def):sword;cdecl;        (* close cursor *)
function ocof (var lda:cda_def):sword; cdecl;           (* auto-commit off
*)
function ocom (var lda:cda_def):sword; cdecl;           (* auto-commit on *)
function ocon (var lda:cda_def):sword; cdecl; function obreak(var lda:cda_def):sword; cdecl; function ocan(var cursor:cda_def):sword; cdecl;

function oexec (var cursor:cda_def):sword; cdecl; function oexfet (var cursor:cda_def;nrows:ub4;

                 cancel, exact:sword):sword; cdecl;
function oexn (var cursor:cda_def;iters, rowoff:sword):sword; cdecl; function ofen (var cursor:cda_def; nrows:sword):sword; cdecl; function ofetch (var cursor:cda_def):sword; cdecl; function odefin(var cursor:cda_def;pos:sword;var buf;bufl:sword;
                ftype:sword;scale:sword;var indp:sb2;fmt:pointer;fmtl:sword;
                fmtt:sword;var rlen:ub2;var rcode:ub2):sword; cdecl;
(* Oci BIND (Piecewise or with Skips) *) function obindps(var cursor:cda_def; opcode:ub1; sqlvar:pchar;
        sqlvl:sb4; var pvctx:ub1; progvl:sb4;
        ftype, scale: sword;
        var indp:sb2; var alen, arcode:ub2;
        pv_skip, ind_skip, alen_skip, rc_skip:sb4;
        maxsiz:ub4; var cursiz:ub4;
        fmt:pchar; fmtl:sb4; fmtt:sword):sword; cdecl;

(* Oci DEFINe (Piecewise or with Skips) *) function odefinps(var cursor:cda_def; opcode:ub1;pos:sword;var bufctx;   bufl:sb4;ftype, scale:sword;
  var indp:sb2; fmt:pchar; fmtl:sb4; fmtt:sword;   var rlen, rcode:ub2;
  pv_skip, ind_skip, alen_skip, rc_skip:sb4):sword;cdecl;

function opinit(mode:ub4):sword;cdecl;
function orol(var lda:cda_def):sword;cdecl; function oopt(var cursor:cda_def; rbopt, waitopt:sword):sword;cdecl; function osetpi(var cursor:cda_def; piece:ub1; bufp:pointer; var lenp:ub4):sword;cdecl;
procedure sqlld2(var lda:cda_def; cname:pchar;var cnlen:sb4);cdecl; procedure sqllda(var lda:cda_def);cdecl; function oflng(var cursor:cda_def; pos:sword; var buf:ub1;

               bufl:sb4; dtype:sword; var retl:ub4; offset:sb4):sword;cdecl;
function ogetpi(var cursor:cda_def; var piecep:ub1;var ctxpp:pointer;
                var iterp, indexp:ub4):sword;cdecl;
function oparse(var cursor:cda_def; sqlstm:pchar; sqllen:sb4;
                defflg:sword; lngflg:ub4):sword;cdecl
function odessp(var cursor:cda_def; objnam:pchar; onlen:size_t;
              var rsv1:ub1; rsv1ln:size_t; var rsv2:ub1; rsv2ln:size_t;
              var ovrld, pos, level:ub2; var argnam:pchar;
              var arnlen, dtype:ub2; var defsup, mode:ub1;
              var dtsiz:ub4; var prec, scale:ub2; var radix:ub1;
              var spare, arrsiz:ub4):sword;cdecl;
function odescr(var cursor:cda_def; pos:sword; var dbsize:sb4;
{                 var dbtype:sb2; var cbuf:sb1; var cbufl, dsize:sb4;}
                 var dbtype:sb2; cbuf:pchar; var cbufl, dsize:sb4;
                 var prec, scale, nullok:sb2):sword;cdecl;

function oerhms(var lda:cda_def;rcode:sb2;                (* error message
*)
                buf:pchar;bufsiz:sword):sword; cdecl;

(* non-blocking functions *)

function onbset (var lda:cda_def):sword; cdecl;
function onbtst (var lda:cda_def):sword; cdecl;
function onbclr (var lda:cda_def):sword; cdecl;

function ognfd (var lda:cda_def;fdp:pointer):sword; cdecl;

implementation

function olog; cdecl; external 'ociw32.dll'; function ologof; cdecl; external 'ociw32.dll'; function oopen; cdecl; external 'ociw32.dll'; function oclose; cdecl; external 'ociw32.dll';

function oparse;cdecl external 'ociw32.dll'; function odescr;cdecl; external 'ociw32.dll'; function obindps; cdecl; external 'ociw32.dll'; function odefinps; cdecl; external 'ociw32.dll';

function ocof; cdecl; external 'ociw32.dll';
function ocom; cdecl; external 'ociw32.dll';
function ocon; cdecl; external 'ociw32.dll';
function obreak; cdecl; external 'ociw32.dll'; function ocan; cdecl; external 'ociw32.dll';

function oexec; cdecl; external 'ociw32.dll'; function oexfet; cdecl; external 'ociw32.dll'; function oexn; cdecl; external 'ociw32.dll'; function ofen; cdecl; external 'ociw32.dll'; function ofetch; cdecl; external 'ociw32.dll'; function odefin; cdecl; external 'ociw32.dll';

function opinit;cdecl; external 'ociw32.dll'; function orol;cdecl; external 'ociw32.dll'; function oopt;cdecl; external 'ociw32.dll'; function osetpi;cdecl; external 'ociw32.dll'; procedure sqlld2;cdecl; external 'ociw32.dll'; procedure sqllda;cdecl; external 'ociw32.dll'; function oflng;cdecl; external 'ociw32.dll'; function ogetpi;cdecl; external 'ociw32.dll';

function odessp;cdecl; external 'ociw32.dll'; function oerhms; cdecl; external 'ociw32.dll';

function onbset; cdecl; external 'ociw32.dll';
function onbtst; cdecl; external 'ociw32.dll';
function onbclr; cdecl; external 'ociw32.dll';
function ognfd ; cdecl; external 'ociw32.dll';

end.

x---- end cut ----x

Richard Willemsen wrote in message <358a4a66.12738270_at_192.168.0.1>...
>Hi All,
>
>Does anybody has or can tell be where to find a Delphi 3 (Pascal or Object
>Pascal) unit which imports OCI (Oracle Call Interface)?
>
>grtnx,
>Richard
>
>
>-----
>Real programmers don't comment their code.
>It was hard to write, it should be hard to understand.
>-----
>Richard Willemsen
>http://www.xs4all.nl/~rwillems/
Received on Sun Jun 21 1998 - 00:00:00 CEST

Original text of this message