新增sql连接,目前支持mysql、sqlite、oracle连接以及相关数据库操作
This commit is contained in:
@@ -0,0 +1,886 @@
|
||||
/* Copyright (c) 1981, 2005, Oracle. All rights reserved. */
|
||||
/* Copyright (c) 1984, 2005, Oracle. All rights reserved. */
|
||||
|
||||
/*
|
||||
NAME
|
||||
ocidef
|
||||
CONTENTS
|
||||
Oracle Call Interface cursor area and LDA definitions
|
||||
NOTES
|
||||
none
|
||||
OWNER
|
||||
Oates
|
||||
DATE
|
||||
09/07/82
|
||||
MODIFIED
|
||||
mbastawa 09/16/05 - dbhygiene
|
||||
dmukhin 06/29/05 - ANSI prototypes; miscellaneous cleanup
|
||||
srseshad 03/25/03 - convert oci public api to ansi
|
||||
csteinba 11/05/02 - bug 2521931: redefine OTYACL
|
||||
aahluwal 06/03/02 - bug 2360115
|
||||
bpalaval 02/08/01 - Change text to oratext.
|
||||
chliang 02/01/01 - fix olint error.
|
||||
bpalaval 11/16/00 - Bug 1244685 : Fix ALTER CLUSTER issue..
|
||||
slari 11/08/00 - remove functions duplicated in ociapr.h
|
||||
whe 09/01/99 - 976457:check __cplusplus for C++ code
|
||||
skmishra 04/23/97 - Provide C++ compatibility
|
||||
lchidamb 06/26/96 - put upidef.h, riddef.h within #ifndef
|
||||
slari 06/12/96 - add ocigft_getFcnType
|
||||
dchatter 11/10/95 - ocignfd - oci get native file descriptor
|
||||
slari 05/11/95 - change OCIEVDEF/OCIEVTSF to UPIEVDEF/UPIEVTSF
|
||||
dchatter 04/06/95 - add ifdef flags around OCI_flags
|
||||
lchidamb 04/06/95 - drop maxdsz from ocibndps/ocidfnps
|
||||
slari 04/07/95 - rename opinit to ocipin
|
||||
slari 03/13/95 - thread safety changes
|
||||
dchatter 03/08/95 - piece definitions OCI_*_PIECE
|
||||
lchidamb 12/06/94 - add support for binding/defining with skips
|
||||
dchatter 03/06/95 - merge changes from branch 1.12.720.1
|
||||
dchatter 02/06/95 - add defines for login mode parameters
|
||||
dchatter 07/06/94 - Deleting CRSCHK, with refcursor, no way to set this
|
||||
dchatter 06/13/94 - add a new LDA flag LDANBL
|
||||
rkooi 11/18/92 - update ocidpr interface
|
||||
mmoore 10/31/92 - add ocidpr
|
||||
gpongrac 11/17/92 - fix oexfet prototype
|
||||
sjain 01/03/92 - Add ocibra
|
||||
rjenkins 11/04/91 - adding prototypes for oparse and oexfet
|
||||
sjain 04/15/91 - Change ocistf proto
|
||||
sjain 04/01/91 - Rearrange oty codes. Add new ones
|
||||
Jain 12/03/90 - Add #define for new describe call
|
||||
Jain 11/29/90 - Add new function code for the new oci calls
|
||||
Mendels 01/20/89 - fix 19170: make ocitbl CONST_DATA
|
||||
Kabcene 01/27/88 - change interfaces to match V5
|
||||
Navab 12/09/87 - add a parameter to ocierr call
|
||||
Navab 11/30/87 - add ocierr, rename ocioer
|
||||
Navab 10/08/87 - add prototypes for procedure declarations
|
||||
Howard 09/07/87 - endif blah
|
||||
Howard 05/11/87 - Add OTY types
|
||||
Howard 04/27/87 - move ocldef defines here
|
||||
Oates 10/15/85 - Add OCANCEL
|
||||
Oates 09/30/85 - Implement ORA*Net
|
||||
Oates 06/27/85 - Make datatype compatible with upidef.h
|
||||
Andy 05/07/85 - delete CSRFBPIC
|
||||
*/
|
||||
|
||||
#ifndef UPIDEF
|
||||
#include <upidef.h>
|
||||
#endif
|
||||
|
||||
#ifndef RIDDEF
|
||||
#include <riddef.h>
|
||||
#endif
|
||||
|
||||
#include <ociapr.h>
|
||||
|
||||
#ifndef OCIDEF
|
||||
#define OCIDEF
|
||||
|
||||
|
||||
#define CSRCHECK 172 /* csrdef is a cursor */
|
||||
#define LDACHECK 202 /* csrdef is a login data area */
|
||||
struct csrdef
|
||||
{
|
||||
sb2 csrrc; /* return code: v2 codes, v4 codes negative */
|
||||
ub2 csrft; /* function type */
|
||||
ub4 csrrpc; /* rows processed count */
|
||||
ub2 csrpeo; /* parse error offset */
|
||||
ub1 csrfc; /* function code */
|
||||
ub1 csrlfl; /* lda flag to indicate type of login */
|
||||
ub2 csrarc; /* actual untranslated return code */
|
||||
ub1 csrwrn; /* warning flags */
|
||||
ub1 csrflg; /* error action */
|
||||
sword csrcn; /* cursor number */
|
||||
riddef csrrid; /* rowid structure */
|
||||
sword csrose; /* os dependent error code */
|
||||
ub1 csrchk; /* check byte = CSRCHECK - in cursor */
|
||||
/* check byte = LDACHECK - in LDA */
|
||||
struct hstdef *csrhst; /* pointer to the hst */
|
||||
};
|
||||
typedef struct csrdef csrdef;
|
||||
typedef struct csrdef ldadef; /* lda is the same as a csr */
|
||||
|
||||
|
||||
/* values for csrlfl */
|
||||
#define LDAFLG 1 /* ...via ologon */
|
||||
#define LDAFLO 2 /* ...via olon or orlon */
|
||||
#define LDANBL 3 /* ...nb logon in progress */
|
||||
|
||||
/* valuses for crsfc */
|
||||
#define csrfpa 2 /* ...OSQL */
|
||||
#define csrfex 4 /* ...OEXEC */
|
||||
#define csrfbi 6 /* ...OBIND */
|
||||
#define csrfdb 8 /* ...ODFINN */
|
||||
#define csrfdi 10 /* ...ODSRBN */
|
||||
#define csrffe 12 /* ...OFETCH */
|
||||
#define csrfop 14 /* ...OOPEN */
|
||||
#define csrfcl 16 /* ...OCLOSE */
|
||||
#define csrfds 22 /* ...ODSC */
|
||||
#define csrfnm 24 /* ...ONAME */
|
||||
#define csrfp3 26 /* ...OSQL3 */
|
||||
#define csrfbr 28 /* ...OBNDRV */
|
||||
#define csrfbx 30 /* ...OBNDRN */
|
||||
/*#defe csrfdf 32*/ /* ???? */
|
||||
#define csrfso 34 /* ...OOPT */
|
||||
#define csrfre 36 /* ...ORESUM */
|
||||
#define csrfbn 50 /* ...OBINDN */
|
||||
#define csrfca 52 /* ..OCANCEL */
|
||||
#define csrfsd 54 /* ..OSQLD */
|
||||
#define csrfef 56 /* ..OEXFEN */
|
||||
#define csrfln 58 /* ..OFLNG */
|
||||
#define csrfdp 60 /* ..ODSCSP */
|
||||
#define csrfba 62 /* ..OBNDRA */
|
||||
#define csrfbps 63 /*..OBINDPS */
|
||||
#define csrfdps 64 /*..ODEFINPS */
|
||||
#define csrfgpi 65 /* ...OGETPI */
|
||||
#define csrfspi 66 /* ...OSETPI */
|
||||
|
||||
/* values for csrwrn */
|
||||
#define CSRWANY 0x01 /* there is a warning flag set */
|
||||
#define CSRWTRUN 0x02 /* a data item was truncated */
|
||||
#define CSRWNVIC 0x04 /* NULL values were used in an aggregate function */
|
||||
#define CSRWITCE 0x08 /* column count not equal to into list count */
|
||||
#define CSRWUDNW 0x10 /* update or delete without where clause */
|
||||
#define CSRWRSV0 0x20
|
||||
#define CSRWROLL 0x40 /* rollback required */
|
||||
#define CSRWRCHG 0x80 /* change after query start on select for update */
|
||||
|
||||
/* values fro csrflg */
|
||||
#define CSRFSPND 0x01 /* current operation suspended */
|
||||
#define CSRFATAL 0x02 /* fatal operation: transaction rolled back */
|
||||
#define CSRFBROW 0x04 /* current row backed out */
|
||||
#define CSRFREFC 0x08 /* ref cursor type CRSCHK disabled for this cursor */
|
||||
#define CSRFNOAR 0x10 /* ref cursor type binds, so no array bind/execute */
|
||||
|
||||
/* define function codes; in order of octdef.h */
|
||||
#define OTYCTB 1 /* CREATE TABLE */
|
||||
#define OTYSER 2 /* set role */
|
||||
#define OTYINS 3 /* INSERT */
|
||||
#define OTYSEL 4 /* SELECT */
|
||||
#define OTYUPD 5 /* UPDATE */
|
||||
#define OTYDRO 6 /* drop role */
|
||||
#define OTYDVW 7 /* DROP VIEW */
|
||||
/* once was validate index */
|
||||
/* once was create partition */
|
||||
/* once was alter partition */
|
||||
#define OTYDTB 8 /* DROP TABLE */
|
||||
/* once was alter space */
|
||||
/* once was drop space */
|
||||
#define OTYDEL 9 /* DELETE */
|
||||
#define OTYCVW 10 /* create view */
|
||||
#define OTYDUS 11 /* drop user */
|
||||
#define OTYCRO 12 /* create role */
|
||||
#define OTYCSQ 13 /* create sequence */
|
||||
#define OTYASQ 14 /* alter sequence */
|
||||
#define OTYACL 15 /* alter cluster */
|
||||
#define OTYDSQ 16 /* drop sequence */
|
||||
#define OTYCSC 17 /* create schema */
|
||||
#define OTYCCL 18 /* CREATE CLUSTER */
|
||||
/* once was alter cluster */
|
||||
#define OTYCUS 19 /* create user */
|
||||
#define OTYCIX 20 /* CREATE INDEX */
|
||||
#define OTYDIX 21 /* DROP INDEX */
|
||||
#define OTYDCL 22 /* DROP CLUSTER */
|
||||
#define OTYVIX 23 /* validate index */
|
||||
#define OTYCPR 24 /* create procedure */
|
||||
#define OTYAPR 25 /* alter procedure */
|
||||
#define OTYATB 26 /* alter table */
|
||||
/* once was evaluate */
|
||||
#define OTYXPL 27 /* explain */
|
||||
#define OTYGRA 28 /* grant */
|
||||
#define OTYREV 29 /* revoke */
|
||||
#define OTYCSY 30 /* create synonym */
|
||||
#define OTYDSY 31 /* drop synonym */
|
||||
#define OTYASY 32 /* alter system switch log */
|
||||
#define OTYSET 33 /* set transaction */
|
||||
#define OTYPLS 34 /* pl/sql execute */
|
||||
#define OTYLTB 35 /* lock */
|
||||
#define OTYNOP 36 /* noop */
|
||||
#define OTYRNM 37 /* rename */
|
||||
#define OTYCMT 38 /* comment */
|
||||
#define OTYAUD 39 /* audit */
|
||||
#define OTYNOA 40 /* no audit */
|
||||
#define OTYAIX 41 /* ALTER INDEX */
|
||||
#define OTYCED 42 /* create external database */
|
||||
#define OTYDED 43 /* drop external database */
|
||||
#define OTYCDB 44 /* create database */
|
||||
#define OTYADB 45 /* alter database */
|
||||
#define OTYCRS 46 /* create rollback segment */
|
||||
#define OTYARS 47 /* alter rollback segment */
|
||||
#define OTYDRS 48 /* drop rollback segment */
|
||||
#define OTYCTS 49 /* create tablespace */
|
||||
#define OTYATS 50 /* alter tablespace */
|
||||
#define OTYDTS 51 /* drop tablespace */
|
||||
#define OTYASE 52 /* alter session */
|
||||
#define OTYAUR 53 /* alter user */
|
||||
#define OTYCWK 54 /* commit (work) */
|
||||
#define OTYROL 55 /* rollback */
|
||||
#define OTYSPT 56 /* savepoint */
|
||||
|
||||
/* For number greater than 56 the the type is the same as defined in
|
||||
** octdef.h for that number. So for completion look at octdef.h
|
||||
*/
|
||||
|
||||
#define OTYDEV OTYCVW /* old DEFINE VIEW = create view */
|
||||
|
||||
/* FUNCTION CODES */
|
||||
#define OCLFPA 2 /* parse - OSQL */
|
||||
#define OCLFEX 4 /* execute - OEXEC */
|
||||
#define OCLFBI 6 /* BIND by name - OBIND */
|
||||
#define OCLFDB 8 /* define buffer - ODEFIN */
|
||||
#define OCLFDI 10 /* describe item - ODSC */
|
||||
#define OCLFFE 12 /* fetch - OFETCH */
|
||||
#define OCLFOC 14 /* open cursor - OOPEN */
|
||||
# define OCLFLI OCLFOC /* old name for open cursor - OOPEN */
|
||||
#define OCLFCC 16 /* close cursor - OCLOSE */
|
||||
# define OCLFLO OCLFCC /* old name for close cursor - OCLOSE */
|
||||
#define OCLFDS 22 /* describe - ODSC */
|
||||
#define OCLFON 24 /* get table and column names - ONAME */
|
||||
#define OCLFP3 26 /* parse - OSQL3 */
|
||||
#define OCLFBR 28 /* bind reference by name - OBNDRV */
|
||||
#define OCLFBX 30 /* bind referecne numeric - OBNDRN */
|
||||
#define OCLFSO 34 /* special function - OOPT */
|
||||
#define OCLFRE 36 /* resume - ORESUM */
|
||||
#define OCLFBN 50 /* bindn */
|
||||
#define OCLFMX 52 /* maximum function number */
|
||||
|
||||
#ifdef NEVER /* unused codes */
|
||||
# define OCLFLK 18 /* open for kernel operations */
|
||||
# define OCLFEK 20 /* execute kernel operations */
|
||||
# define OCLFOK 22 /* kernel close */
|
||||
# define OCLFIN 28 /* logon to oracle */
|
||||
# define OCLFOF 30 /* logoff from oracle */
|
||||
# define OCLFAX 32 /* allocate a context area */
|
||||
# define OCLFPI 34 /* page in context area */
|
||||
# define OCLFIS 36 /* special system logon */
|
||||
# define OCLFCO 38 /* cancel the current operation */
|
||||
# define OCLFGI 40 /* get database id */
|
||||
# define OCLFJN 42 /* journal operation */
|
||||
# define OCLFCL 44 /* cleanup prior execute operation */
|
||||
# define OCLFMC 46 /* map a cursor area */
|
||||
# define OCLFUC 48 /* unmap cursor and restore user maping */
|
||||
#endif /*NEVER *//* obsolete codes */
|
||||
|
||||
|
||||
/* values for ocimode in ocipin call */
|
||||
|
||||
#define OCIEVDEF UPIEVDEF /* default : non-thread safe enivronment */
|
||||
#define OCIEVTSF UPIEVTSF /* thread-safe environment */
|
||||
|
||||
|
||||
/* OCIL* flags used to determine the mode of login, using ocilog().
|
||||
** Currently defined only for non-blocking and thread-safe logins.
|
||||
*/
|
||||
|
||||
#define OCILMDEF UPILMDEF /* default, regular login */
|
||||
#define OCILMNBL UPILMNBL /* non-blocking logon */
|
||||
#define OCILMESY UPILMESY /* thread safe but external sync */
|
||||
#define OCILMISY UPILMISY /* internal sync, we do it */
|
||||
#define OCILMTRY UPILMTRY /* try to, but do not block on mutex */
|
||||
|
||||
|
||||
/*
|
||||
* since sqllib uses both ocidef and ocidfn the following defines
|
||||
* need to be guarded
|
||||
*/
|
||||
#ifndef OCI_FLAGS
|
||||
#define OCI_FLAGS
|
||||
|
||||
/* OCI_*_PIECE defines the piece types that are returned or set
|
||||
*/
|
||||
|
||||
#define OCI_ONE_PIECE UPI_ONE_PIECE /* there or this is the only piece */
|
||||
#define OCI_FIRST_PIECE UPI_FIRST_PIECE /* the first of many pieces */
|
||||
#define OCI_NEXT_PIECE UPI_NEXT_PIECE /* the next of many pieces */
|
||||
#define OCI_LAST_PIECE UPI_LAST_PIECE /* the last piece of this column */
|
||||
#endif
|
||||
|
||||
/*
|
||||
** OCITAB: define return code pairs for version 2 to 3 conversions
|
||||
*/
|
||||
struct ocitab
|
||||
{
|
||||
sb2 ocitv3; /* Version 3/4 return code */
|
||||
sb2 ocitv2; /* Version 2 equivalent return code */
|
||||
};
|
||||
typedef struct ocitab ocitab;
|
||||
|
||||
externref const ocitab ocitbl[];
|
||||
|
||||
/* macros to check cursors and LDA's. */
|
||||
/* macros to set error codes */
|
||||
|
||||
# define CRSCHK(c) if ((c->csrchk != CSRCHECK)\
|
||||
&& !bit(c->csrflg, CSRFREFC))\
|
||||
return(ocir32(c, OER(1001)))
|
||||
# define ldaerr(l, e) ( l->csrrc = (sb2)(-( l->csrarc = (ub2)(e)) ) )
|
||||
# define LDACHK(l) if (l->csrchk != LDACHECK) \
|
||||
return(ldaerr(l, OER(1001)))
|
||||
|
||||
|
||||
/************************************************/
|
||||
/* OCI PROCEDURE DECLARATIONS */
|
||||
/************************************************/
|
||||
|
||||
|
||||
|
||||
|
||||
/*****************************/
|
||||
/* Database logon/logout */
|
||||
/*****************************/
|
||||
sword ocilog( ldadef *lda, struct hstdef *hst, oratext *uid, sword uidl,
|
||||
oratext *psw, sword pswl, oratext* conn, sword connl,
|
||||
ub4 mode );
|
||||
sword ocilon( ldadef *lda, oratext *uid, sword uidl, oratext *psw,
|
||||
sword pswl, sword audit );
|
||||
sword ocilgi( ldadef *lda, sb2 areacount );
|
||||
sword ocirlo( ldadef *lda, struct hstdef *hst, oratext *uid, sword uidl,
|
||||
oratext *psw, sword pswl, sword audit );
|
||||
/* ocilon - logon to oracle
|
||||
** ocilgi - version 2 compatible ORACLE logon call.
|
||||
** no login to ORACLE is performed: the LDA is initialized
|
||||
** ocirlo - version 5 compatible ORACLE Remote Login call,
|
||||
** oracle login is executed.
|
||||
** lda - pointer to ldadef
|
||||
** uid - user id [USER[/PASSWORD]]
|
||||
** uidl - length of uid, if -1 strlen(uid) is used
|
||||
** psw - password string; ignored if specified in uid
|
||||
** pswl - length of psw, if -1 strlen(psw) is used
|
||||
** audit - is not supported; the only permissible value is 0
|
||||
** areacount - unused
|
||||
*/
|
||||
|
||||
sword ocilof( ldadef *lda );
|
||||
/*
|
||||
** ocilof - disconnect from ORACLE
|
||||
** lda - pointer to ldadef
|
||||
*/
|
||||
|
||||
|
||||
/*********************/
|
||||
/* Error Messages */
|
||||
/*********************/
|
||||
sword ocierr( ldadef *lda, sb2 rcode, oratext *buffer, sword bufl );
|
||||
sword ocidhe( sb2 rcode, oratext *buffer );
|
||||
/*
|
||||
** Move the text explanation for an ORACLE error to a user defined buffer
|
||||
** ocierr - will return the message associated with the hstdef stored
|
||||
** in the lda.
|
||||
** ocidhe - will return the message associated with the default host.
|
||||
** lda - lda associated with the login session
|
||||
** rcode - error code as returned by V3 call interface
|
||||
** buffer - address of a user buffer of at least 132 characters
|
||||
*/
|
||||
|
||||
|
||||
/***********************/
|
||||
/* Cursor Open/Close */
|
||||
/***********************/
|
||||
sword ociope( struct csrdef *cursor, ldadef *lda, oratext *dbn, sword dbnl,
|
||||
sword areasize, oratext *uid, sword uidl );
|
||||
|
||||
sword ociclo( struct csrdef *cursor );
|
||||
/*
|
||||
** open or close a cursor.
|
||||
** cursor - pointer to csrdef
|
||||
** ldadef - pointer to ldadef
|
||||
** dbn - unused
|
||||
** dbnl - unused
|
||||
** areasize - if (areasize == -1) areasize <- system default initial size
|
||||
** else if (areasize IN [1..256]) areasize <- areasize * 1024;
|
||||
** most applications should use the default size since context
|
||||
** areas are extended as needed until memory is exhausted.
|
||||
** uid - user id
|
||||
** uidl - userid length
|
||||
*/
|
||||
|
||||
/***********************************/
|
||||
/* CONTROL AND OPTIONS */
|
||||
/***********************************/
|
||||
sword ocibre( ldadef *lda );
|
||||
/*
|
||||
** ocibrk - Oracle Call Interface send BReaK Sends a break to
|
||||
** oracle. If oracle is active, the current operation is
|
||||
** cancelled. May be called asynchronously. DOES NOT SET
|
||||
** OERRCD in the hst. This is because ocibrk may be called
|
||||
** asynchronously. Callers must test the return code.
|
||||
** lda - pointer to a ldadef
|
||||
*/
|
||||
|
||||
sword ocican( struct csrdef *cursor );
|
||||
/*
|
||||
** cancel the operation on the cursor, no additional OFETCH calls
|
||||
** will be issued for the existing cursor without an intervening
|
||||
** OEXEC call.
|
||||
** cursor - pointer to csrdef
|
||||
*/
|
||||
|
||||
sword ocisfe( struct csrdef *cursor, sword erropt, sword waitopt );
|
||||
/*
|
||||
** ocisfe - user interface set error options
|
||||
** set the error and cursor options.
|
||||
** allows user to set the options for dealing with fatal dml errors
|
||||
** and other cursor related options
|
||||
** see oerdef for valid settings
|
||||
** cursor - pointer to csrdef
|
||||
** erropt - error optionsn
|
||||
** waitopr - wait options
|
||||
*/
|
||||
|
||||
|
||||
/***************************************/
|
||||
/* COMMIT/ROLLBACK/AUTOCOMMIT */
|
||||
/***************************************/
|
||||
sword ocicom( ldadef *lda );
|
||||
sword ocirol( ldadef *lda );
|
||||
/*
|
||||
** ocicom - commit the current transaction
|
||||
** ocirol - roll back the current transaction
|
||||
*/
|
||||
|
||||
sword ocicon( ldadef *lda );
|
||||
sword ocicof( ldadef *lda );
|
||||
/*
|
||||
** ocicon - auto Commit ON
|
||||
** ocicof - auto Commit OFf
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/************************/
|
||||
/* parsing */
|
||||
/************************/
|
||||
sword ocisq3(struct csrdef *cursor, oratext * /* sqlstm */, sword sqllen);
|
||||
/*
|
||||
** ocisq3 - user interface parse sql statement
|
||||
** cursor - pointer to csrdef
|
||||
** sqlstm - pointer to SQL statement
|
||||
** sqllen - length of SQL statement. if -1, strlen(sqlstm) is used
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/***************************/
|
||||
/* BINDING */
|
||||
/***************************/
|
||||
/* these are for the opcode in ocibndps, ocidfnps */
|
||||
#define OCI_PCWS 0
|
||||
#define OCI_SKIP 1
|
||||
|
||||
sword ocibin( struct csrdef *cursor, oratext *sqlvar, sword sqlvl,
|
||||
ub1 *progv, sword progvl, sword ftype, sword scale,
|
||||
oratext *fmt, sword fmtl, sword fmtt );
|
||||
sword ocibrv( struct csrdef *cursor, oratext *sqlvar, sword sqlvl,
|
||||
ub1 *progv, sword progvl, sword ftype, sword scale, sb2 *indp,
|
||||
oratext *fmt, sword fmtl, sword fmtt );
|
||||
sword ocibra( struct csrdef *cursor, oratext *sqlvar, sword sqlvl,
|
||||
ub1 *progv, sword progvl, sword ftype, sword scale,
|
||||
sb2 *indp, ub2 *aln, ub2 *rcp, ub4 mal, ub4 *cal,
|
||||
oratext *fmt, sword fmtl, sword fmtt );
|
||||
sword ocibndps( struct csrdef *cursor, ub1 opcode, oratext *sqlvar,
|
||||
sb4 sqlvl, ub1 *progv, sb4 progvl, sword ftype,
|
||||
sword scale, sb2 *indp, ub2 *aln, ub2 *rcp, sb4 pv_skip,
|
||||
sb4 ind_skip, sb4 len_skip, sb4 rc_skip, ub4 mal,
|
||||
ub4 *cal, oratext *fmt, sb4 fmtl, sword fmtt );
|
||||
sword ocibnn ( struct csrdef *cursor, ub2 sqlvn, ub1 *progv, sword progvl,
|
||||
sword ftype, sword scale, oratext *fmt, sword fmtl,
|
||||
sword fmtt );
|
||||
sword ocibrn( struct csrdef *cursor, sword sqlvn, ub1 *progv, sword progvl,
|
||||
sword ftype, sword scale, sb2 *indp, oratext *fmt, sword fmtl,
|
||||
sword fmtt );
|
||||
/*
|
||||
** ocibin - bind by value by name
|
||||
** ocibrv - bind by reference by name
|
||||
** ocibra - bind by reference by name (array)
|
||||
** ocibndps - bind by reference by name (array) piecewise or with skips
|
||||
** ocibnn - bind by value numeric
|
||||
** ocibrn - bind by reference numeric
|
||||
**
|
||||
** the contents of storage specified in bind-by-value calls are
|
||||
** evaluated immediately.
|
||||
** the addresses of storage specified in bind-by-reference calls are
|
||||
** remembered, and the contents are examined at every execute.
|
||||
**
|
||||
** cursor - pointer to csrdef
|
||||
** sqlvn - the number represented by the name of the bind variables
|
||||
** for variables of the form :n or &n for n in [1..256)
|
||||
** (i.e. &1, :234). unnecessarily using larger numbers
|
||||
** in the range wastes space.
|
||||
** sqlvar - the name of the bind variable (:name or &name)
|
||||
** sqlval - the length of the name;
|
||||
** in bindif -1, strlen(bvname) is used
|
||||
** progv - pointer to the object to bind.
|
||||
** progvl - length of object to bind.
|
||||
** in bind-by-value if specified as -1 then strlen(bfa) is
|
||||
** used (really only makes sends with character types)
|
||||
** in bind-by-value, if specified as -1 then UB2MAXVAL
|
||||
** is used. Again this really makes sense only with
|
||||
** SQLT_STR.
|
||||
** ftype - datatype of object
|
||||
** indp - pointer to indicator variable.
|
||||
** -1 means to ignore bfa/bfl and bind NULL;
|
||||
** not -1 means to bind the contents of bfa/bfl
|
||||
** bind the contents pointed to by bfa
|
||||
** aln - Alternate length pointer
|
||||
** rcp - Return code pointer
|
||||
** mal - Maximum array length
|
||||
** cal - Current array length pointer
|
||||
** fmt - format string
|
||||
** fmtl - length of format string; if -1, strlen(fmt) is used
|
||||
** fmtt - desired output type after applying forat mask. Not
|
||||
** really yet implemented
|
||||
** scale - number of decimal digits in a cobol packed decimal (type 7)
|
||||
**
|
||||
** Note that the length of bfa when bound as SQLT_STR is reduced
|
||||
** to strlen(bfa).
|
||||
** Note that trailing blanks are stripped of storage of SQLT_STR.
|
||||
*/
|
||||
|
||||
/***************************/
|
||||
/* DESCRIBING */
|
||||
/***************************/
|
||||
sword ocidsc ( struct csrdef *cursor, sword pos, sb2 *dbsize, sb2 *fsize,
|
||||
sb2 *rcode, sb2 *dtype, sb1 *buf, sb2 *bufl, sb2 *dsize );
|
||||
sword ocidsr( struct csrdef *cursor, sword pos, sb2 *dbsize, sb2 *dtype,
|
||||
sb2 *fsize );
|
||||
sword ocinam( struct csrdef *cursor, sword pos, sb1 *tbuf, sb2 *tbufl,
|
||||
sb1 *buf, sb2 *bufl );
|
||||
/*
|
||||
** ocidsc, ocidsr: Obtain information about a column
|
||||
** ocinam : get the name of a column
|
||||
** cursor - pointer to csrdef
|
||||
** pos - position in select list from [1..N]
|
||||
** dbsize - place to store the database size
|
||||
** fsize - place to store the fetched size
|
||||
** rcode - place to store the fetched column returned code
|
||||
** dtype - place to store the data type
|
||||
** buf - array to store the column name
|
||||
** bufl - place to store the column name length
|
||||
** dsize - maximum display size
|
||||
** tbuf - place to store the table name
|
||||
** tbufl - place to store the table name length
|
||||
*/
|
||||
|
||||
sword ocidsp ( struct csrdef *cursor, sword pos, sb4 *dbsize, sb2 *dbtype,
|
||||
sb1 *cbuf, sb4 *cbufl, sb4 *dsize, sb2 *pre, sb2 *scl,
|
||||
sb2 *nul );
|
||||
|
||||
sword ocidpr( ldadef *lda, oratext *object_name, size_t object_length,
|
||||
void * reserved1, size_t reserved1_length, void * reserved2,
|
||||
size_t reserved2_length, ub2 *overload, ub2 *position,
|
||||
ub2 *level, oratext **argument_name, ub2 *argument_length,
|
||||
ub2 *datatype, ub1 *default_supplied, ub1 *in_out,
|
||||
ub4 *length, sb2 *precision, sb2 *scale, ub1 *radix,
|
||||
ub4 *spare, ub4 *total_elements );
|
||||
/*
|
||||
** OCIDPR - User Program Interface: Describe Stored Procedure
|
||||
**
|
||||
** This routine is used to obtain information about the calling
|
||||
** arguments of a stored procedure. The client provides the
|
||||
** name of the procedure using "object_name" and "database_name"
|
||||
** (database name is optional). The client also supplies the
|
||||
** arrays for OCIDPR to return the values and indicates the
|
||||
** length of array via the "total_elements" parameter. Upon return
|
||||
** the number of elements used in the arrays is returned in the
|
||||
** "total_elements" parameter. If the array is too small then
|
||||
** an error will be returned and the contents of the return arrays
|
||||
** are invalid.
|
||||
**
|
||||
**
|
||||
** EXAMPLE :
|
||||
**
|
||||
** Client provides -
|
||||
**
|
||||
** object_name - SCOTT.ACCOUNT_UPDATE@BOSTON
|
||||
** total_elements - 100
|
||||
**
|
||||
**
|
||||
** ACCOUNT_UPDATE is an overloaded function with specification :
|
||||
**
|
||||
** type number_table is table of number index by binary_integer;
|
||||
** table account (account_no number, person_id number,
|
||||
** balance number(7,2))
|
||||
** table person (person_id number(4), person_nm varchar2(10))
|
||||
**
|
||||
** function ACCOUNT_UPDATE (account number,
|
||||
** person person%rowtype, amounts number_table,
|
||||
** trans_date date) return accounts.balance%type;
|
||||
**
|
||||
** function ACCOUNT_UPDATE (account number,
|
||||
** person person%rowtype, amounts number_table,
|
||||
** trans_no number) return accounts.balance%type;
|
||||
**
|
||||
**
|
||||
** Values returned -
|
||||
**
|
||||
** overload position argument level datatype length prec scale rad
|
||||
** -------------------------------------------------------------------
|
||||
** 0 0 0 NUMBER 22 7 2 10
|
||||
** 0 1 ACCOUNT 0 NUMBER 22 0 0 0
|
||||
** 0 2 PERSON 0 RECORD 0 0 0 0
|
||||
** 0 2 PERSON_ID 1 NUMBER 22 4 0 10
|
||||
** 0 2 PERSON_NM 1 VARCHAR2 10 0 0 0
|
||||
** 0 3 AMOUNTS 0 TABLE 0 0 0 0
|
||||
** 0 3 1 NUMBER 22 0 0 0
|
||||
** 0 4 TRANS_NO 0 NUMBER 22 0 0 0
|
||||
**
|
||||
** 1 0 0 NUMBER 22 7 2 10
|
||||
** 1 1 ACCOUNT 0 NUMBER 22 0 0 0
|
||||
** 1 2 PERSON 0 RECORD 0 0 0 0
|
||||
** 1 2 PERSON_ID 1 NUMBER 22 4 0 10
|
||||
** 1 2 PERSON_NM 1 VARCHAR2 10 0 0 0
|
||||
** 1 3 AMOUNTS 0 TABLE 0 0 0 0
|
||||
** 1 3 1 NUMBER 22 0 0 0
|
||||
** 1 4 TRANS_DATE 0 NUMBER 22 0 0 0
|
||||
**
|
||||
**
|
||||
** OCIDPR Argument Descriptions -
|
||||
**
|
||||
** ldadef - pointer to ldadef
|
||||
** object_name - object name, synonyms are also accepted and will
|
||||
** be translate, currently only procedure and function
|
||||
** names are accepted, also NLS names are accepted.
|
||||
** Currently, the accepted format of a name is
|
||||
** [[part1.]part2.]part3[@dblink] (required)
|
||||
** object_length - object name length (required)
|
||||
** reserved1 - reserved for future use
|
||||
** reserved1_length - reserved for future use
|
||||
** reserved2 - reserved for future use
|
||||
** reserved2_length - reserved for future use
|
||||
** overload - array indicating overloaded procedure # (returned)
|
||||
** position - array of argument positions, position 0 is a
|
||||
** function return argument (returned)
|
||||
** level - array of argument type levels, used to describe
|
||||
** sub-datatypes of data structures like records
|
||||
** and arrays (returned)
|
||||
** argument_name - array of argument names, only returns first
|
||||
** 30 characters of argument names, note storage
|
||||
** for 30 characters is allocated by client (returned)
|
||||
** argument_length - array of argument name lengths (returned)
|
||||
** datatype - array of oracle datatypes (returned)
|
||||
** default_supplied - array indicating parameter has default (returned)
|
||||
** 0 = no default, 1 = default supplied
|
||||
** in_out - array indicating if argument is IN or OUT (returned
|
||||
** 0 = IN param, 1 = OUT param, 2 = IN/OUT param
|
||||
** length - array of argument lengths (returned)
|
||||
** precision - array of precisions (if number type)(returned)
|
||||
** scale - array of scales (if number type)(returned)
|
||||
** radix - array of radix (if number type)(returned)
|
||||
** spare - array of spares.
|
||||
** total_elements - size of arrays supplied by client (required),
|
||||
** total number of elements filled (returned)
|
||||
*/
|
||||
|
||||
/*************************************/
|
||||
/* DEFINING */
|
||||
/*************************************/
|
||||
sword ocidfi( struct csrdef *cursor, sword pos, ub1 *buf, sword bufl,
|
||||
sword ftype, sb2 *rc, sword scale );
|
||||
sword ocidfn( struct csrdef *cursor, sword pos, ub1 *buf, sword bufl,
|
||||
sword ftype, sword scale, sb2 *indp, oratext *fmt, sword fmtl,
|
||||
sword fmtt, ub2 *rl, ub2 *rc );
|
||||
sword ocidfnps( struct csrdef *cursor, ub1 opcode, sword pos, ub1 *buf,
|
||||
sb4 bufl, sword ftype, sword scale,
|
||||
sb2 *indp, oratext *fmt, sb4 fmtl,
|
||||
sword fmtt, ub2 *rl, ub2 *rc,
|
||||
sb4 pv_skip, sb4 ind_skip, sb4 len_skip,
|
||||
sb4 rc_skip );
|
||||
|
||||
|
||||
/* Define a user data buffer using upidfn
|
||||
** cursor - pointer to csrdef
|
||||
** pos - position of a field or exp in the select list of a query
|
||||
** bfa/bfl - address and length of client-supplied storage
|
||||
to receive data
|
||||
** ftype - user datatype
|
||||
** scale - number of fractional digits for cobol packed decimals
|
||||
** indp - place to store the length of the returned value. If returned
|
||||
** value is:
|
||||
** negative, the field fetched was NULL
|
||||
** zero , the field fetched was same length or shorter than
|
||||
** the buffer provided
|
||||
** positive, the field fetched was truncated
|
||||
** fmt - format string
|
||||
** fmtl - length of format string, if -1 strlent(fmt) used
|
||||
** rl - place to store column length after each fetch
|
||||
** rc - place to store column error code after each fetch
|
||||
** fmtt - fomat type
|
||||
*/
|
||||
|
||||
/********************************/
|
||||
/* PIECE INFORMATION GET/SET */
|
||||
/********************************/
|
||||
sword ocigetpi( struct csrdef *cursor, ub1 *piecep,
|
||||
void **ctxpp, ub4 *iterp, ub4 *indexp );
|
||||
sword ocisetpi( struct csrdef *cursor, ub1 piece,
|
||||
void *bufp, ub4 *lenp );
|
||||
|
||||
|
||||
/********************************/
|
||||
/* EXECUTE */
|
||||
/********************************/
|
||||
sword ociexe( struct csrdef *cursor );
|
||||
sword ociexn( struct csrdef *cursor, sword iters, sword roff );
|
||||
sword ociefn( struct csrdef *cursor, ub4 nrows, sword can, sword exact );
|
||||
/*
|
||||
** ociexe - execute a cursor
|
||||
** ociexn - execute a cursosr N times
|
||||
** cursor - pointer to a csrdef
|
||||
** iters - number of times to execute cursor
|
||||
** roff - offset within the bind variable array at which to begin
|
||||
** operations.
|
||||
*/
|
||||
|
||||
|
||||
/*********************************/
|
||||
/* FETCHING */
|
||||
/*********************************/
|
||||
sword ocifet( struct csrdef *cursor );
|
||||
sword ocifen( struct csrdef *cursor, sword nrows );
|
||||
/* ocifet - fetch the next row
|
||||
** ocifen - fetch n rows
|
||||
** cursor - pointer to csrdef
|
||||
** nrows - number of rows to be fetched
|
||||
*/
|
||||
|
||||
sword ocilng( struct csrdef *cursor, sword posit, ub1 *bfa, sb4 bfl,
|
||||
sword dty, ub4 *rln, sb4 off );
|
||||
|
||||
/*********************************/
|
||||
/* CONVERSION */
|
||||
/*********************************/
|
||||
sword ocic32( struct csrdef *cursor );
|
||||
/*
|
||||
** Convert selected version 3 return codes to the equivalent
|
||||
** version 2 code.
|
||||
** csrdef->csrrc is set to the converted code
|
||||
** csrdef->csrft is set to v2 oracle statment type
|
||||
** csrdef->csrrpc is set to the rows processed count
|
||||
** csrdef->csrpeo is set to error postion
|
||||
**
|
||||
** cursor - pointer to csrdef
|
||||
*/
|
||||
|
||||
|
||||
sword ocir32( struct csrdef *cursor, sword retcode );
|
||||
/*
|
||||
** Convert selected version 3 return codes to the equivalent version 2
|
||||
** code.
|
||||
**
|
||||
** cursor - pointer to csrdef
|
||||
** retcode - place to store the return code
|
||||
*/
|
||||
|
||||
|
||||
void ociscn( sword **arglst, char *mask_addr, sword **newlst );
|
||||
/*
|
||||
** Convert call-by-ref to call-by-value:
|
||||
** takes an arg list and a mask address, determines which args need
|
||||
** conversion to a value, and creates a new list begging at the address
|
||||
** of newlst.
|
||||
**
|
||||
** arglst - list of arguments
|
||||
** mast_addr _ mask address determines args needing conversion
|
||||
** newlst - new list of args
|
||||
*/
|
||||
|
||||
sword ocistf ( sword typ, sword bufl, sword rdig, oratext *fmt,
|
||||
struct csrdef *cursor, sword *err );
|
||||
/* Convert a packed decimal buffer length (bytes) and scale to a format
|
||||
** string of the form mm.+/-nn, where mm is the number of packed
|
||||
** decimal digits, and nn is the scaling factor. A positive scale name
|
||||
** nn digits to the rights of the decimal; a negative scale means nn zeros
|
||||
** should be supplied to the left of the decimal.
|
||||
** bufl - length of the packed decimal buffer
|
||||
** rdig - number of fractional digits
|
||||
** fmt - pointer to a string holding the conversion format
|
||||
** cursor - pointer to csrdef
|
||||
** err - pointer to word storing error code
|
||||
*/
|
||||
|
||||
|
||||
/******************************************/
|
||||
/* Non-blocking operations */
|
||||
/******************************************/
|
||||
sword ocinbs( ldadef *lda ); /* set a connection to non-blocking */
|
||||
sword ocinbt( ldadef *lda ); /* test if connection is non-blocking */
|
||||
sword ocinbc( ldadef *lda ); /* clear a connection to blocking */
|
||||
sword ocinlo( ldadef *lda, struct hstdef *hst, oratext *conn,
|
||||
sword connl, oratext *uid, sword uidl,
|
||||
oratext *psw, sword pswl, sword audit );
|
||||
/* logon in non-blocking fashion */
|
||||
/* ocinlo allows an application to logon in non-blocking fashion.
|
||||
** lda - pointer to ldadef
|
||||
** hst - pointer to a 256 byte area, must be cleared to zero before call
|
||||
** conn - the database link (if specified @LINK in uid will be ignored)
|
||||
** connl - length of conn; if -1 strlen(conn) is used
|
||||
** uid - user id [USER[/PASSWORD][@LINK]]
|
||||
** uidl - length of uid, if -1 strlen(uid) is used
|
||||
** psw - password string; ignored if specified in uid
|
||||
** pswl - length of psw, if -1 strlen(psw) is used
|
||||
** audit - is not supported; the only permissible value is 0
|
||||
*/
|
||||
|
||||
/***************************************************/
|
||||
/* Procedure Declaration for Pro*C */
|
||||
/***************************************************/
|
||||
/* Note: The following routines are used in Pro*C and have the
|
||||
same interface as their couterpart in OCI.
|
||||
Althought the interface follows for more details please refer
|
||||
to the above routines */
|
||||
|
||||
/******************************************/
|
||||
/* initialization/logon/logof */
|
||||
/******************************************/
|
||||
sword ocipin( ub4 mode );
|
||||
|
||||
sword ologin( ldadef *lda, sb2 areacount );
|
||||
sword ologon( ldadef *lda, sb2 areacount );
|
||||
|
||||
/*****************************************/
|
||||
/* Open/Close/Parse Cursor */
|
||||
/*****************************************/
|
||||
|
||||
/*
|
||||
** ocisqd - oci delayed parse (Should be used only with deferred upi/oci)
|
||||
** FUNCTION: Call upidpr to delay the parse of the sql statement till the
|
||||
** time that a call needs to be made to the kernel (execution or
|
||||
** describe time )
|
||||
** RETURNS: Oracle return code.
|
||||
*/
|
||||
sword ocisq7( struct csrdef *cursor, oratext * /* sqlstm */, sb4 sqllen,
|
||||
sword defflg, ub4 sqlt );
|
||||
|
||||
/*****************************************/
|
||||
/* Bind */
|
||||
/*****************************************/
|
||||
sword obind( struct csrdef *cursor, oratext *sqlvar, sword sqlvl,
|
||||
ub1 *progv, sword progvl, sword ftype, sword scale,
|
||||
oratext *fmt, sword fmtl, sword fmtt );
|
||||
sword obindn( struct csrdef *cursor, ub2 sqlvn, ub1 *progv, sword progvl,
|
||||
sword ftype, sword scale, oratext *fmt, sword fmtl,
|
||||
sword fmtt );
|
||||
|
||||
/**********************************************/
|
||||
/* Define */
|
||||
/**********************************************/
|
||||
sword odfinn( struct csrdef *cursor, sword pos, ub1 *buf, sword bufl,
|
||||
sword ftype, sb2 *rc, sword scale );
|
||||
|
||||
/**********************************************/
|
||||
/* Describe */
|
||||
/**********************************************/
|
||||
sword odsrbn( struct csrdef *cursor, sword pos, sb2 *dbsize, sb2 *dtype,
|
||||
sb2 *fsize );
|
||||
|
||||
|
||||
/******************************************/
|
||||
/* Non-blocking operations */
|
||||
/******************************************/
|
||||
sword onblon( ldadef *lda, struct hstdef *hst, oratext *conn,
|
||||
sword connl, oratext *uid, sword uidl,
|
||||
oratext *psw, sword pswl, sword audit );
|
||||
/* logon in non-blocking fashion */
|
||||
sword ocignfd( ldadef *lda, void *nfdp ); /* get native fd */
|
||||
|
||||
ub2 ocigft_getFcnType( ub2 oertyp ); /* get sql function code */
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user