00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035 #include "ocilib_internal.h"
00036
00037
00038
00039
00040
00041 OCI_Library OCILib;
00042
00043 OCI_SQLCmdInfo SQLCmds[OCI_SQLCMD_COUNT] =
00044 {
00045 {OCI_SFC_CREATE_TABLE , MT("CREATE TABLE") },
00046 {OCI_SFC_SET_ROLE , MT("SET ROLE") },
00047 {OCI_SFC_INSERT , MT("INSERT") },
00048 {OCI_SFC_SELECT , MT("SELECT") },
00049 {OCI_SFC_UPDATE , MT("UPDATE") },
00050 {OCI_SFC_DROP_ROLE , MT("DROP ROLE") },
00051 {OCI_SFC_DROP_VIEW , MT("DROP VIEW") },
00052 {OCI_SFC_DROP_TABLE , MT("DROP TABLE") },
00053 {OCI_SFC_DELETE , MT("DELETE") },
00054 {OCI_SFC_CREATE_VIEW , MT("CREATE VIEW") },
00055 {OCI_SFC_DROP_USER , MT("DROP USER") },
00056 {OCI_SFC_CREATE_ROLE , MT("CREATE ROLE") },
00057 {OCI_SFC_CREATE_SEQUENCE , MT("CREATE SEQUENCE") },
00058 {OCI_SFC_ALTER_SEQUENCE , MT("ALTER SEQUENCE") },
00059 {OCI_SFC_DROP_SEQUENCE , MT("DROP SEQUENCE") },
00060 {OCI_SFC_CREATE_SCHEMA , MT("CREATE SCHEMA") },
00061 {OCI_SFC_CREATE_CLUSTER , MT("CREATE CLUSTER") },
00062 {OCI_SFC_CREATE_USER , MT("CREATE USER") },
00063 {OCI_SFC_CREATE_INDEX , MT("CREATE INDEX") },
00064 {OCI_SFC_DROP_INDEX , MT("DROP INDEX") },
00065 {OCI_SFC_DROP_CLUSTER , MT("DROP CLUSTER") },
00066 {OCI_SFC_VALIDATE_INDEX , MT("VALIDATE INDEX") },
00067 {OCI_SFC_CREATE_PROCEDURE , MT("CREATE PROCEDURE") },
00068 {OCI_SFC_ALTER_PROCEDURE , MT("ALTER PROCEDURE") },
00069 {OCI_SFC_ALTER_TABLE , MT("ALTER TABLE") },
00070 {OCI_SFC_EXPLAIN , MT("EXPLAIN") },
00071 {OCI_SFC_GRANT , MT("GRANT") },
00072 {OCI_SFC_REVOKE , MT("REVOKE") },
00073 {OCI_SFC_CREATE_SYNONYM , MT("CREATE SYNONYM") },
00074 {OCI_SFC_DROP_SYNONYM , MT("DROP SYNONYM") },
00075 {OCI_SFC_ALTER_SYSTEM_SWITCHLOG , MT("ALTER SYSTEM SWITCHLOG") },
00076 {OCI_SFC_SET_TRANSACTION , MT("SET TRANSACTION") },
00077 {OCI_SFC_PLSQL_EXECUTE , MT("PL/SQL EXECUTE") },
00078 {OCI_SFC_LOCK , MT("LOCK") },
00079 {OCI_SFC_NOOP , MT("NOOP") },
00080 {OCI_SFC_RENAME , MT("RENAME") },
00081 {OCI_SFC_COMMENT , MT("COMMENT") },
00082 {OCI_SFC_AUDIT , MT("AUDIT") },
00083 {OCI_SFC_NO_AUDIT , MT("NO AUDIT") },
00084 {OCI_SFC_ALTER_INDEX , MT("ALTER INDEX") },
00085 {OCI_SFC_CREATE_EXTERNAL_DATABASE , MT("CREATE EXTERNAL DATABASE") },
00086 {OCI_SFC_DROP_EXTERNALDATABASE , MT("DROP EXTERNALDATABASE") },
00087 {OCI_SFC_CREATE_DATABASE , MT("CREATE DATABASE") },
00088 {OCI_SFC_ALTER_DATABASE , MT("ALTER DATABASE") },
00089 {OCI_SFC_CREATE_ROLLBACK_SEGMENT , MT("CREATE ROLLBACK SEGMENT") },
00090 {OCI_SFC_ALTER_ROLLBACK_SEGMENT , MT("ALTER ROLLBACK SEGMENT") },
00091 {OCI_SFC_DROP_ROLLBACK_SEGMENT , MT("DROP ROLLBACK SEGMENT") },
00092 {OCI_SFC_CREATE_TABLESPACE , MT("CREATE TABLESPACE") },
00093 {OCI_SFC_ALTER_TABLESPACE , MT("ALTER TABLESPACE") },
00094 {OCI_SFC_DROP_TABLESPACE , MT("DROP TABLESPACE") },
00095 {OCI_SFC_ALTER_SESSION , MT("ALTER SESSION") },
00096 {OCI_SFC_ALTER_USER , MT("ALTER USER") },
00097 {OCI_SFC_COMMIT_WORK , MT("COMMIT (WORK)") },
00098 {OCI_SFC_ROLLBACK , MT("ROLLBACK") },
00099 {OCI_SFC_SAVEPOINT , MT("SAVEPOINT") },
00100 {OCI_SFC_CREATE_CONTROL_FILE , MT("CREATE CONTROL FILE") },
00101 {OCI_SFC_ALTER_TRACING , MT("ALTER TRACING") },
00102 {OCI_SFC_CREATE_TRIGGER , MT("CREATE TRIGGER") },
00103 {OCI_SFC_ALTER_TRIGGER , MT("ALTER TRIGGER") },
00104 {OCI_SFC_DROP_TRIGGER , MT("DROP TRIGGER") },
00105 {OCI_SFC_ANALYZE_TABLE , MT("ANALYZE TABLE") },
00106 {OCI_SFC_ANALYZE_INDEX , MT("ANALYZE INDEX") },
00107 {OCI_SFC_ANALYZE_CLUSTER , MT("ANALYZE CLUSTER") },
00108 {OCI_SFC_CREATE_PROFILE , MT("CREATE PROFILE") },
00109 {OCI_SFC_DROP_PROFILE , MT("DROP PROFILE") },
00110 {OCI_SFC_ALTER_PROFILE , MT("ALTER PROFILE") },
00111 {OCI_SFC_DROP_PROCEDURE , MT("DROP PROCEDURE") },
00112 {OCI_SFC_ALTER_RESOURCE_COST , MT("ALTER RESOURCE COST") },
00113 {OCI_SFC_CREATE_SNAPSHOT_LOG , MT("CREATE SNAPSHOT LOG") },
00114 {OCI_SFC_ALTER_SNAPSHOT_LOG , MT("ALTER SNAPSHOT LOG") },
00115 {OCI_SFC_DROP_SNAPSHOT_LOG , MT("DROP SNAPSHOT LOG") },
00116 {OCI_SFC_DROP_SUMMARY , MT("DROP SUMMARY") },
00117 {OCI_SFC_CREATE_SNAPSHOT , MT("CREATE SNAPSHOT") },
00118 {OCI_SFC_ALTER_SNAPSHOT , MT("ALTER SNAPSHOT") },
00119 {OCI_SFC_DROP_SNAPSHOT , MT("DROP SNAPSHOT") },
00120 {OCI_SFC_CREATE_TYPE , MT("CREATE TYPE") },
00121 {OCI_SFC_DROP_TYPE , MT("DROP TYPE") },
00122 {OCI_SFC_ALTER_ROLE , MT("ALTER ROLE") },
00123 {OCI_SFC_ALTER_TYPE , MT("ALTER TYPE") },
00124 {OCI_SFC_CREATE_TYPE_BODY , MT("CREATE TYPE BODY") },
00125 {OCI_SFC_ALTER_TYPE_BODY , MT("ALTER TYPE BODY") },
00126 {OCI_SFC_DROP_TYPE_BODY , MT("DROP TYPE BODY") },
00127 {OCI_SFC_DROP_LIBRARY , MT("DROP LIBRARY") },
00128 {OCI_SFC_TRUNCATE_TABLE , MT("TRUNCATE TABLE") },
00129 {OCI_SFC_TRUNCATE_CLUSTER , MT("TRUNCATE CLUSTER") },
00130 {OCI_SFC_CREATE_BITMAPFILE , MT("CREATE BITMAPFILE") },
00131 {OCI_SFC_ALTER_VIEW , MT("ALTER VIEW") },
00132 {OCI_SFC_DROP_BITMAPFILE , MT("DROP BITMAPFILE") },
00133 {OCI_SFC_SET_CONSTRAINTS , MT("SET CONSTRAINTS") },
00134 {OCI_SFC_CREATE_FUNCTION , MT("CREATE FUNCTION") },
00135 {OCI_SFC_ALTER_FUNCTION , MT("ALTER FUNCTION") },
00136 {OCI_SFC_DROP_FUNCTION , MT("DROP FUNCTION") },
00137 {OCI_SFC_CREATE_PACKAGE , MT("CREATE PACKAGE") },
00138 {OCI_SFC_ALTER_PACKAGE , MT("ALTER PACKAGE") },
00139 {OCI_SFC_DROP_PACKAGE , MT("DROP PACKAGE") },
00140 {OCI_SFC_CREATE_PACKAGE_BODY , MT("CREATE PACKAGE BODY") },
00141 {OCI_SFC_ALTER_PACKAGE_BODY , MT("ALTER PACKAGE BODY") },
00142 {OCI_SFC_DROP_PACKAGE_BODY , MT("DROP PACKAGE BODY") },
00143 {OCI_SFC_CREATE_DIRECTORY , MT("CREATE DIRECTORY") },
00144 {OCI_SFC_DROP_DIRECTORY , MT("DROP DIRECTORY") },
00145 {OCI_SFC_CREATE_LIBRARY , MT("CREATE LIBRARY") },
00146 {OCI_SFC_CREATE_JAVA , MT("CREATE JAVA") },
00147 {OCI_SFC_ALTER_JAVA , MT("ALTER JAVA") },
00148 {OCI_SFC_DROP_JAVA , MT("DROP JAVA") },
00149 {OCI_SFC_CREATE_OPERATOR , MT("CREATE OPERATOR") },
00150 {OCI_SFC_CREATE_INDEXTYPE , MT("CREATE INDEXTYPE") },
00151 {OCI_SFC_DROP_INDEXTYPE , MT("DROP INDEXTYPE") },
00152 {OCI_SFC_ALTER_INDEXTYPE , MT("ALTER INDEXTYPE") },
00153 {OCI_SFC_DROP_OPERATOR , MT("DROP OPERATOR") },
00154 {OCI_SFC_ASSOCIATE_STATISTICS , MT("ASSOCIATE STATISTICS") },
00155 {OCI_SFC_DISASSOCIATE_STATISTICS , MT("DISASSOCIATE STATISTICS") },
00156 {OCI_SFC_CALL_METHOD , MT("CALL METHOD") },
00157 {OCI_SFC_CREATE_SUMMARY , MT("CREATE SUMMARY") },
00158 {OCI_SFC_ALTER_SUMMARY , MT("ALTER SUMMARY") },
00159 {OCI_SFC_CREATE_DIMENSION , MT("CREATE DIMENSION") },
00160 {OCI_SFC_ALTER_DIMENSION , MT("ALTER DIMENSION") },
00161 {OCI_SFC_DROP_DIMENSION , MT("DROP DIMENSION") },
00162 {OCI_SFC_CREATE_CONTEXT , MT("CREATE CONTEXT") },
00163 {OCI_SFC_DROP_CONTEXT , MT("DROP CONTEXT") },
00164 {OCI_SFC_ALTER_OUTLINE , MT("ALTER OUTLINE") },
00165 {OCI_SFC_CREATE_OUTLINE , MT("CREATE OUTLINE") },
00166 {OCI_SFC_DROP_OUTLINE , MT("DROP OUTLINE") },
00167 {OCI_SFC_UPDATE_INDEXES , MT("UPDATE INDEXES") },
00168 {OCI_SFC_ALTER_OPERATOR , MT("ALTER OPERATOR") }
00169 };
00170
00171
00172 #ifdef OCI_IMPORT_RUNTIME
00173
00174
00175
00176 OCIENVCREATE OCIEnvCreate = NULL;
00177 OCISERVERATTACH OCIServerAttach = NULL;
00178 OCISERVERDETACH OCIServerDetach = NULL;
00179 OCIHANDLEALLOC OCIHandleAlloc = NULL;
00180 OCIHANDLEFREE OCIHandleFree = NULL;
00181 OCIDESCRIPTORALLOC OCIDescriptorAlloc = NULL;
00182 OCIDESCRIPTORFREE OCIDescriptorFree = NULL;
00183 OCISESSIONBEGIN OCISessionBegin = NULL;
00184 OCISESSIONEND OCISessionEnd = NULL;
00185 OCIPASSWORDCHANGE OCIPasswordChange = NULL;
00186 OCIBINDBYPOS OCIBindByPos = NULL;
00187 OCIBINDBYNAME OCIBindByName = NULL;
00188 OCIBINDDYNAMIC OCIBindDynamic = NULL;
00189 OCIBINDOBJECT OCIBindObject = NULL;
00190 OCIDEFINEBYPOS OCIDefineByPos = NULL;
00191 OCIDEFINEOBJECT OCIDefineObject = NULL;
00192 OCISTMTPREPARE OCIStmtPrepare = NULL;
00193 OCISTMTEXECUTE OCIStmtExecute = NULL;
00194 OCISTMTFETCH OCIStmtFetch = NULL;
00195 OCISTMTFETCH2 OCIStmtFetch2 = NULL;
00196 OCISTMTGETPIECEINFO OCIStmtGetPieceInfo = NULL;
00197 OCISTMTSETPIECEINFO OCIStmtSetPieceInfo = NULL;
00198 OCIPARAMGET OCIParamGet = NULL;
00199 OCIPARAMSET OCIParamSet = NULL;
00200 OCITRANSSTART OCITransStart = NULL;
00201 OCITRANSDETACH OCITransDetach = NULL;
00202 OCITRANSPREPARE OCITransPrepare = NULL;
00203 OCITRANSFORGET OCITransForget = NULL;
00204 OCITRANSCOMMIT OCITransCommit = NULL;
00205 OCITRANSROLLBACK OCITransRollback = NULL;
00206 OCIERRORGET OCIErrorGet = NULL;
00207 OCILOBCREATETEMPORARY OCILobCreateTemporary = NULL;
00208 OCILOBFREETEMPORARY OCILobFreeTemporary = NULL;
00209 OCILOBISTEMPORARY OCILobIsTemporary = NULL;
00210 OCILOBAPPEND OCILobAppend = NULL;
00211 OCILOBCOPY OCILobCopy = NULL;
00212 OCILOBGETLENGTH OCILobGetLength = NULL;
00213 OCILOBREAD OCILobRead = NULL;
00214 OCILOBWRITE OCILobWrite = NULL;
00215 OCILOBTRIM OCILobTrim = NULL;
00216 OCILOBERASE OCILobErase = NULL;
00217 OCILOBOPEN OCILobOpen = NULL;
00218 OCILOBCLOSE OCILobClose = NULL;
00219 OCILOBLOCATORASSIGN OCILobLocatorAssign = NULL;
00220 OCILOBASSIGN OCILobAssign = NULL;
00221 OCILOBISEQUAL OCILobIsEqual = NULL;
00222 OCILOBFLUSHBUFFER OCILobFlushBuffer = NULL;
00223 OCILOBGETSTORAGELIMIT OCILobGetStorageLimit = NULL;
00224 OCILOBFILEOPEN OCILobFileOpen = NULL;
00225 OCILOBFILECLOSE OCILobFileClose = NULL;
00226 OCILOBFILECLOSEALL OCILobFileCloseAll = NULL;
00227 OCILOBFILEISOPEN OCILobFileIsOpen = NULL;
00228 OCILOBFILEEXISTS OCILobFileExists = NULL;
00229 OCILOBFIELGETNAME OCILobFileGetName = NULL;
00230 OCILOBFILESETNAME OCILobFileSetName = NULL;
00231 OCILOBLOADFROMFILE OCILobLoadFromFile = NULL;
00232 OCILOBWRITEAPPEND OCILobWriteAppend = NULL;
00233 OCISERVERVERSION OCIServerVersion = NULL;
00234 OCIBREAK OCIBreak = NULL;
00235 OCIATTRGET OCIAttrGet = NULL;
00236 OCIATTRSET OCIAttrSet = NULL;
00237 OCIDATEASSIGN OCIDateAssign = NULL;
00238 OCIDATETOTEXT OCIDateToText = NULL;
00239 OCIDATEFROMTEXT OCIDateFromText = NULL;
00240 OCIDATECOMPARE OCIDateCompare = NULL;
00241 OCIDATEADDMONTHS OCIDateAddMonths = NULL;
00242 OCIDATEADDDAYS OCIDateAddDays = NULL;
00243 OCIDATELASTDAY OCIDateLastDay = NULL;
00244 OCIDATEDAYSBETWEEN OCIDateDaysBetween = NULL;
00245 OCIDATEZONETOZONE OCIDateZoneToZone = NULL;
00246 OCIDATENEXTDAY OCIDateNextDay = NULL;
00247 OCIDATECHECK OCIDateCheck = NULL;
00248 OCIDATESYSDATE OCIDateSysDate = NULL;
00249 OCIDESCRIBEANY OCIDescribeAny = NULL;
00250 OCIINTERVALASSIGN OCIIntervalAssign = NULL;
00251 OCIINTERVALCHECK OCIIntervalCheck = NULL;
00252 OCIINTERVALCOMPARE OCIIntervalCompare = NULL;
00253 OCIINTERVALFROMTEXT OCIIntervalFromText = NULL;
00254 OCIINTERVALTOTEXT OCIIntervalToText = NULL;
00255 OCIINTERVALFROMTZ OCIIntervalFromTZ = NULL;
00256 OCIINTERVALGETDAYSECOND OCIIntervalGetDaySecond = NULL;
00257 OCIINTERVALGETYEARMONTH OCIIntervalGetYearMonth = NULL;
00258 OCIINTERVALSETDAYSECOND OCIIntervalSetDaySecond = NULL;
00259 OCIINTERVALSETYEARMONTH OCIIntervalSetYearMonth = NULL;
00260 OCIINTERVALSUBTRACT OCIIntervalSubtract = NULL;
00261 OCIINTERVALADD OCIIntervalAdd = NULL;
00262 OCIDATETIMEASSIGN OCIDateTimeAssign = NULL;
00263 OCIDATETIMECHECK OCIDateTimeCheck = NULL;
00264 OCIDATETIMECOMPARE OCIDateTimeCompare = NULL;
00265 OCIDATETIMECONSTRUCT OCIDateTimeConstruct = NULL;
00266 OCIDATETIMECONVERT OCIDateTimeConvert = NULL;
00267 OCIDATETIMEFROMARRAY OCIDateTimeFromArray = NULL;
00268 OCIDATETIMETOARRAY OCIDateTimeToArray = NULL;
00269 OCIDATETIMEFROMTEXT OCIDateTimeFromText = NULL;
00270 OCIDATETIMETOTEXT OCIDateTimeToText = NULL;
00271 OCIDATETIMEGETDATE OCIDateTimeGetDate = NULL;
00272 OCIDATETIMEGETTIME OCIDateTimeGetTime = NULL;
00273 OCIDATETIMEGETTIMEZONENAME OCIDateTimeGetTimeZoneName = NULL;
00274 OCIDATETIMEGETTIMEZONEOFFSET OCIDateTimeGetTimeZoneOffset = NULL;
00275 OCIDATETIMEINTERVALADD OCIDateTimeIntervalAdd = NULL;
00276 OCIDATETIMEINTERVALSUB OCIDateTimeIntervalSub = NULL;
00277 OCIDATETIMESUBTRACT OCIDateTimeSubtract = NULL;
00278 OCIDATETIMESYSTIMESTAMP OCIDateTimeSysTimeStamp = NULL;
00279 OCIARRAYDESCRIPTORFREE OCIArrayDescriptorFree = NULL;
00280 OCICLIENTVERSION OCIClientVersion = NULL;
00281 OCITYPEBYNAME OCITypeByName = NULL;
00282 OCINUMBERTOINT OCINumberToInt = NULL;
00283 OCINUMBERFROMINT OCINumberFromInt = NULL;
00284 OCINUMBERTOREAL OCINumberToReal = NULL;
00285 OCINUMBERFROMREAL OCINumberFromReal = NULL;
00286 OCINUMBERTOTEXT OCINumberToText = NULL;
00287 OCINUMBERFROMTEXT OCINumberFromText = NULL;
00288 OCISTRINGPTR OCIStringPtr = NULL;
00289 OCISTRINGASSIGNTEXT OCIStringAssignText = NULL;
00290 OCIRAWPTR OCIRawPtr = NULL;
00291 OCIRAWASSIGNBYTES OCIRawAssignBytes = NULL;
00292 OCIRAWALLOCSIZE OCIRawAllocSize = NULL;
00293 OCIOBJECTNEW OCIObjectNew = NULL;
00294 OCIOBJECTFREE OCIObjectFree = NULL;
00295 OCIOBJECTSETATTR OCIObjectSetAttr = NULL;
00296 OCIOBJECTGETATTR OCIObjectGetAttr = NULL;
00297 OCIOBJECTPIN OCIObjectPin = NULL;
00298 OCIOBJECTUNPIN OCIObjectUnpin = NULL;
00299 OCIOBJECTCOPY OCIObjectCopy = NULL;
00300 OCIOBJECTGETOBJECTREF OCIObjectGetObjectRef = NULL;
00301 OCIOBJECTGETPROPERTY OCIObjectGetProperty = NULL;
00302 OCIOBJECTGETIND OCIObjectGetInd = NULL;
00303 OCIREFASSIGN OCIRefAssign = NULL;
00304 OCIREFISNULL OCIRefIsNull = NULL;
00305 OCIREFCLEAR OCIRefClear = NULL;
00306 OCIREFTOHEX OCIRefToHex = NULL;
00307 OCIREFHEXSIZE OCIRefHexSize = NULL;
00308 OCITHREADPROCESSINIT OCIThreadProcessInit = NULL;
00309 OCITHREADINIT OCIThreadInit = NULL;
00310 OCITHREADTERM OCIThreadTerm = NULL;
00311 OCITHREADIDINIT OCIThreadIdInit = NULL;
00312 OCITHREADIDDESTROY OCIThreadIdDestroy = NULL;
00313 OCITHREADHNDINIT OCIThreadHndInit = NULL;
00314 OCITHREADHNDDESTROY OCIThreadHndDestroy = NULL;
00315 OCITHREADCREATE OCIThreadCreate = NULL;
00316 OCITHREADJOIN OCIThreadJoin = NULL;
00317 OCITHREADCLOSE OCIThreadClose = NULL;
00318 OCITHREADMUTEXINIT OCIThreadMutexInit = NULL;
00319 OCITHREADMUTEXDESTROY OCIThreadMutexDestroy = NULL;
00320 OCITHREADMUTEXACQUIRE OCIThreadMutexAcquire = NULL;
00321 OCITHREADMUTEXRELEASE OCIThreadMutexRelease = NULL;
00322 OCITHREADKEYINIT OCIThreadKeyInit = NULL;
00323 OCITHREADKEYDESTROY OCIThreadKeyDestroy = NULL;
00324 OCITHREADKEYSET OCIThreadKeySet = NULL;
00325 OCITHREADKEYGET OCIThreadKeyGet = NULL;
00326 OCICONNECTIONPOOLCREATE OCIConnectionPoolCreate = NULL;
00327 OCICONNECTIONPOOLDESTROY OCIConnectionPoolDestroy = NULL;
00328 OCICOLLSIZE OCICollSize = NULL;
00329 OCICOLLMAX OCICollMax = NULL;
00330 OCICOLLGETITEM OCICollGetElem = NULL;
00331 OCICOLLASSIGNELEM OCICollAssignElem = NULL;
00332 OCICOLLASSIGN OCICollAssign = NULL;
00333 OCICOLLAPPEND OCICollAppend = NULL;
00334 OCICOLLTRIM OCICollTrim = NULL;
00335 OCIITERCREATE OCIIterCreate = NULL;
00336 OCIITERDELETE OCIIterDelete = NULL;
00337 OCIITERINIT OCIIterInit = NULL;
00338 OCIITERNEXT OCIIterNext = NULL;
00339 OCIITERPREV OCIIterPrev = NULL;
00340 OCIDIRPATHABORT OCIDirPathAbort = NULL;
00341 OCIDIRPATHDATASAVE OCIDirPathDataSave = NULL;
00342 OCIDIRPATHFINISH OCIDirPathFinish = NULL;
00343 OCIDIRPATHPREPARE OCIDirPathPrepare = NULL;
00344 OCIDIRPATHLOADSTREAM OCIDirPathLoadStream = NULL;
00345 OCIDIRPATHCOLARRAYENTRYSET OCIDirPathColArrayEntrySet = NULL;
00346 OCIDIRPATHCOLARRAYRESET OCIDirPathColArrayReset = NULL;
00347 OCIDIRPATHCOLARRAYTOSTREAM OCIDirPathColArrayToStream = NULL;
00348 OCIDIRPATHSTREAMRESET OCIDirPathStreamReset = NULL;
00349 OCIDIRPATHFLUSHROW OCIDirPathFlushRow = NULL;
00350 OCICACHEFREE OCICacheFree = NULL;
00351 OCIPING OCIPing = NULL;
00352
00353 OCIDBSTARTUP OCIDBStartup = NULL;
00354 OCIDBSHUTDOWN OCIDBShutdown = NULL;
00355
00356
00357 OCISTMTPREPARE2 OCIStmtPrepare2 = NULL;
00358 OCISTMTRELEASE OCIStmtRelease = NULL;
00359
00360 #ifdef ORAXB8_DEFINED
00361
00362 OCILOBCOPY2 OCILobCopy2 = NULL;
00363 OCILOBERASE2 OCILobErase2 = NULL;
00364 OCILOBGETLENGTH2 OCILobGetLength2 = NULL;
00365 OCILOBLOADFROMFILE2 OCILobLoadFromFile2 = NULL;
00366 OCILOBREAD2 OCILobRead2 = NULL;
00367 OCILOBTRIM2 OCILobTrim2 = NULL;
00368 OCILOBWRITE2 OCILobWrite2 = NULL;
00369 OCILOBWRITEAPPEND2 OCILobWriteAppend2 = NULL;
00370
00371 #endif
00372
00373 #endif
00374
00375
00376
00377
00378
00379
00380
00381
00382
00383 boolean OCI_KeyMapFree(void)
00384 {
00385 boolean res = TRUE;
00386 OCI_HashEntry *e = NULL;
00387 OCI_HashValue *v = NULL;
00388 int i, n, nb_err = 0;
00389
00390 OCI_CHECK(OCILib.key_map == NULL, TRUE)
00391
00392 n = OCI_HashGetSize(OCILib.key_map);
00393
00394 for (i = 0; i < n; i++)
00395 {
00396 e = OCI_HashGetEntry(OCILib.key_map, i);
00397
00398 while (e != NULL)
00399 {
00400 v = e->values;
00401
00402 while (v != NULL)
00403 {
00404 if (FALSE == OCI_ThreadKeyFree((OCI_ThreadKey *) (v->value.p_void)))
00405 nb_err++;
00406
00407 v = v->next;
00408 }
00409
00410 e = e->next;
00411 }
00412 }
00413
00414 res = (OCI_HashFree(OCILib.key_map) && (nb_err == 0));
00415
00416 OCILib.key_map = NULL;
00417
00418 return res;
00419 }
00420
00421
00422
00423
00424
00425 void OCI_SetStatus(boolean res)
00426 {
00427 OCI_Error *err = OCI_ErrorGet(FALSE);
00428
00429 if (err != NULL)
00430 {
00431 err->raise = (res == FALSE);
00432 }
00433 }
00434
00435
00436
00437
00438
00439
00440
00441
00442
00443 boolean OCI_API OCI_Initialize(POCI_ERROR err_handler, const mtext *home,
00444 unsigned int mode)
00445 {
00446 boolean res = TRUE;
00447 ub4 oci_mode = OCI_ENV_MODE | OCI_OBJECT;
00448
00449 #ifdef OCI_IMPORT_RUNTIME
00450
00451 char path[OCI_SIZE_BUFFER+1];
00452
00453 size_t len = 0;
00454
00455 #endif
00456
00457
00458
00459 if (OCILib.loaded == TRUE)
00460 return TRUE;
00461
00462 memset(&OCILib, 0, sizeof(OCI_Library));
00463
00464 OCILib.error_handler = err_handler;
00465
00466 OCILib.version_compile = OCI_VERSION_COMPILE;
00467 OCILib.version_runtime = OCI_VERSION_RUNTIME;
00468
00469 OCILib.env_mode = mode;
00470
00471 #ifdef OCI_IMPORT_LINKAGE
00472
00473 OCI_NOT_USED(home);
00474
00475 #if defined(OCI_BIG_UINT_ENABLED)
00476
00477 OCILib.use_lob_ub8 = TRUE;
00478
00479 #endif
00480
00481 #if defined(OCI_STMT_SCROLLABLE_READONLY)
00482
00483 OCILib.use_scrollable_cursors = TRUE;
00484
00485 #endif
00486
00487 #else
00488
00489 memset(path, 0, sizeof(path));
00490
00491 #if defined(OCI_CHARSET_UNICODE)
00492
00493 if (home != NULL && home[0] != 0)
00494 len = wcstombs(path, home, sizeof(path));
00495
00496 #else
00497
00498 if (home != NULL && home[0] != 0)
00499 {
00500 strncat(path, home, sizeof(path));
00501
00502 len = strlen(path);
00503 }
00504
00505 #endif
00506
00507 if ((len > 0) && (len < sizeof(path)) && (path[len-1] != OCI_CHAR_SLASH))
00508 {
00509 path[len] = OCI_CHAR_SLASH;
00510 len++;
00511 }
00512
00513 strncat(path, OCI_DL_ANSI_NAME, sizeof(path) - len);
00514
00515 OCILib.lib_handle = LIB_OPEN(path);
00516
00517 if (OCILib.lib_handle != NULL)
00518 {
00519
00520
00521
00522
00523
00524
00525 LIB_SYMBOL(OCILib.lib_handle, "OCIEnvCreate", OCIEnvCreate,
00526 OCIENVCREATE);
00527
00528 LIB_SYMBOL(OCILib.lib_handle, "OCIServerAttach", OCIServerAttach,
00529 OCISERVERATTACH);
00530 LIB_SYMBOL(OCILib.lib_handle, "OCIServerDetach", OCIServerDetach,
00531 OCISERVERDETACH);
00532
00533 LIB_SYMBOL(OCILib.lib_handle, "OCIHandleAlloc", OCIHandleAlloc,
00534 OCIHANDLEALLOC);
00535 LIB_SYMBOL(OCILib.lib_handle, "OCIHandleFree", OCIHandleFree,
00536 OCIHANDLEFREE);
00537
00538 LIB_SYMBOL(OCILib.lib_handle, "OCIDescriptorAlloc", OCIDescriptorAlloc,
00539 OCIDESCRIPTORALLOC);
00540 LIB_SYMBOL(OCILib.lib_handle, "OCIDescriptorFree", OCIDescriptorFree,
00541 OCIDESCRIPTORFREE);
00542
00543 LIB_SYMBOL(OCILib.lib_handle, "OCIAttrSet", OCIAttrSet,
00544 OCIATTRSET);
00545 LIB_SYMBOL(OCILib.lib_handle, "OCIAttrGet", OCIAttrGet,
00546 OCIATTRGET);
00547
00548 LIB_SYMBOL(OCILib.lib_handle, "OCIParamSet", OCIParamSet,
00549 OCIPARAMSET);
00550 LIB_SYMBOL(OCILib.lib_handle, "OCIParamGet", OCIParamGet,
00551 OCIPARAMGET);
00552
00553 LIB_SYMBOL(OCILib.lib_handle, "OCISessionBegin", OCISessionBegin,
00554 OCISESSIONBEGIN);
00555 LIB_SYMBOL(OCILib.lib_handle, "OCISessionEnd", OCISessionEnd,
00556 OCISESSIONEND);
00557
00558 LIB_SYMBOL(OCILib.lib_handle, "OCIPasswordChange", OCIPasswordChange,
00559 OCIPASSWORDCHANGE);
00560
00561 LIB_SYMBOL(OCILib.lib_handle, "OCITransStart", OCITransStart,
00562 OCITRANSSTART);
00563 LIB_SYMBOL(OCILib.lib_handle, "OCITransDetach", OCITransDetach,
00564 OCITRANSDETACH);
00565 LIB_SYMBOL(OCILib.lib_handle, "OCITransPrepare", OCITransPrepare,
00566 OCITRANSPREPARE);
00567 LIB_SYMBOL(OCILib.lib_handle, "OCITransForget", OCITransForget,
00568 OCITRANSFORGET);
00569 LIB_SYMBOL(OCILib.lib_handle, "OCITransCommit", OCITransCommit,
00570 OCITRANSCOMMIT);
00571 LIB_SYMBOL(OCILib.lib_handle, "OCITransRollback", OCITransRollback,
00572 OCITRANSROLLBACK);
00573
00574 LIB_SYMBOL(OCILib.lib_handle, "OCIErrorGet", OCIErrorGet,
00575 OCIERRORGET);
00576 LIB_SYMBOL(OCILib.lib_handle, "OCIServerVersion", OCIServerVersion,
00577 OCISERVERVERSION);
00578 LIB_SYMBOL(OCILib.lib_handle, "OCIBreak", OCIBreak,
00579 OCIBREAK);
00580
00581 LIB_SYMBOL(OCILib.lib_handle, "OCIBindByPos", OCIBindByPos,
00582 OCIBINDBYPOS);
00583 LIB_SYMBOL(OCILib.lib_handle, "OCIBindByName", OCIBindByName,
00584 OCIBINDBYNAME);
00585 LIB_SYMBOL(OCILib.lib_handle, "OCIBindDynamic", OCIBindDynamic,
00586 OCIBINDDYNAMIC);
00587 LIB_SYMBOL(OCILib.lib_handle, "OCIBindObject", OCIBindObject,
00588 OCIBINDOBJECT);
00589
00590 LIB_SYMBOL(OCILib.lib_handle, "OCIDefineByPos", OCIDefineByPos,
00591 OCIDEFINEBYPOS);
00592 LIB_SYMBOL(OCILib.lib_handle, "OCIDefineObject", OCIDefineObject,
00593 OCIDEFINEOBJECT);
00594
00595 LIB_SYMBOL(OCILib.lib_handle, "OCIStmtPrepare", OCIStmtPrepare,
00596 OCISTMTPREPARE);
00597 LIB_SYMBOL(OCILib.lib_handle, "OCIStmtExecute", OCIStmtExecute,
00598 OCISTMTEXECUTE);
00599 LIB_SYMBOL(OCILib.lib_handle, "OCIStmtFetch", OCIStmtFetch,
00600 OCISTMTFETCH);
00601 LIB_SYMBOL(OCILib.lib_handle, "OCIStmtFetch2", OCIStmtFetch2,
00602 OCISTMTFETCH2);
00603
00604 LIB_SYMBOL(OCILib.lib_handle, "OCIStmtGetPieceInfo", OCIStmtGetPieceInfo,
00605 OCISTMTGETPIECEINFO);
00606 LIB_SYMBOL(OCILib.lib_handle, "OCIStmtSetPieceInfo", OCIStmtSetPieceInfo,
00607 OCISTMTSETPIECEINFO);
00608
00609 LIB_SYMBOL(OCILib.lib_handle, "OCILobCreateTemporary", OCILobCreateTemporary,
00610 OCILOBCREATETEMPORARY);
00611 LIB_SYMBOL(OCILib.lib_handle, "OCILobFreeTemporary", OCILobFreeTemporary,
00612 OCILOBFREETEMPORARY);
00613 LIB_SYMBOL(OCILib.lib_handle, "OCILobIsTemporary", OCILobIsTemporary,
00614 OCILOBISTEMPORARY);
00615 LIB_SYMBOL(OCILib.lib_handle, "OCILobRead", OCILobRead,
00616 OCILOBREAD);
00617 LIB_SYMBOL(OCILib.lib_handle, "OCILobWrite", OCILobWrite,
00618 OCILOBWRITE);
00619 LIB_SYMBOL(OCILib.lib_handle, "OCILobCopy", OCILobCopy,
00620 OCILOBCOPY);
00621 LIB_SYMBOL(OCILib.lib_handle, "OCILobTrim", OCILobTrim,
00622 OCILOBTRIM);
00623 LIB_SYMBOL(OCILib.lib_handle, "OCILobErase", OCILobErase,
00624 OCILOBERASE);
00625 LIB_SYMBOL(OCILib.lib_handle, "OCILobAppend", OCILobAppend,
00626 OCILOBAPPEND);
00627 LIB_SYMBOL(OCILib.lib_handle, "OCILobGetLength", OCILobGetLength,
00628 OCILOBGETLENGTH);
00629 LIB_SYMBOL(OCILib.lib_handle, "OCILobOpen", OCILobOpen,
00630 OCILOBOPEN);
00631 LIB_SYMBOL(OCILib.lib_handle, "OCILobClose", OCILobClose,
00632 OCILOBCLOSE);
00633
00634 #ifdef ORAXB8_DEFINED
00635
00636 LIB_SYMBOL(OCILib.lib_handle, "OCILobCopy2", OCILobCopy2,
00637 OCILOBCOPY2);
00638 LIB_SYMBOL(OCILib.lib_handle, "OCILobErase2", OCILobErase2,
00639 OCILOBERASE2);
00640 LIB_SYMBOL(OCILib.lib_handle, "OCILobGetLength2", OCILobGetLength2,
00641 OCILOBGETLENGTH2);
00642 LIB_SYMBOL(OCILib.lib_handle, "OCILobLoadFromFile2", OCILobLoadFromFile2,
00643 OCILOBLOADFROMFILE2);
00644 LIB_SYMBOL(OCILib.lib_handle, "OCILobRead2", OCILobRead2,
00645 OCILOBREAD2);
00646 LIB_SYMBOL(OCILib.lib_handle, "OCILobTrim2", OCILobTrim2,
00647 OCILOBTRIM2);
00648 LIB_SYMBOL(OCILib.lib_handle, "OCILobWrite2", OCILobWrite2,
00649 OCILOBWRITE2);
00650 LIB_SYMBOL(OCILib.lib_handle, "OCILobWriteAppend2", OCILobWriteAppend2,
00651 OCILOBWRITEAPPEND2);
00652
00653 #endif
00654
00655 LIB_SYMBOL(OCILib.lib_handle, "OCILobFileOpen", OCILobFileOpen,
00656 OCILOBFILEOPEN);
00657 LIB_SYMBOL(OCILib.lib_handle, "OCILobFileClose", OCILobFileClose,
00658 OCILOBFILECLOSE);
00659 LIB_SYMBOL(OCILib.lib_handle, "OCILobFileCloseAll", OCILobFileCloseAll,
00660 OCILOBFILECLOSEALL);
00661 LIB_SYMBOL(OCILib.lib_handle, "OCILobFileIsOpen", OCILobFileIsOpen,
00662 OCILOBFILEISOPEN);
00663 LIB_SYMBOL(OCILib.lib_handle, "OCILobFileExists", OCILobFileExists,
00664 OCILOBFILEEXISTS);
00665 LIB_SYMBOL(OCILib.lib_handle, "OCILobFileGetName", OCILobFileGetName,
00666 OCILOBFIELGETNAME);
00667 LIB_SYMBOL(OCILib.lib_handle, "OCILobFileSetName", OCILobFileSetName,
00668 OCILOBFILESETNAME);
00669 LIB_SYMBOL(OCILib.lib_handle, "OCILobLoadFromFile", OCILobLoadFromFile,
00670 OCILOBLOADFROMFILE);
00671 LIB_SYMBOL(OCILib.lib_handle, "OCILobWriteAppend", OCILobWriteAppend,
00672 OCILOBWRITEAPPEND);
00673 LIB_SYMBOL(OCILib.lib_handle, "OCILobIsEqual", OCILobIsEqual,
00674 OCILOBISEQUAL);
00675 LIB_SYMBOL(OCILib.lib_handle, "OCILobAssign", OCILobAssign,
00676 OCILOBASSIGN);
00677 LIB_SYMBOL(OCILib.lib_handle, "OCILobLocatorAssign", OCILobLocatorAssign,
00678 OCILOBLOCATORASSIGN);
00679 LIB_SYMBOL(OCILib.lib_handle, "OCILobFlushBuffer", OCILobFlushBuffer,
00680 OCILOBFLUSHBUFFER);
00681 LIB_SYMBOL(OCILib.lib_handle, "OCILobGetStorageLimit", OCILobGetStorageLimit,
00682 OCILOBGETSTORAGELIMIT);
00683
00684 LIB_SYMBOL(OCILib.lib_handle, "OCIDateAssign", OCIDateAssign,
00685 OCIDATEASSIGN);
00686 LIB_SYMBOL(OCILib.lib_handle, "OCIDateToText", OCIDateToText,
00687 OCIDATETOTEXT);
00688 LIB_SYMBOL(OCILib.lib_handle, "OCIDateFromText", OCIDateFromText,
00689 OCIDATEFROMTEXT);
00690 LIB_SYMBOL(OCILib.lib_handle, "OCIDateCompare", OCIDateCompare,
00691 OCIDATECOMPARE);
00692 LIB_SYMBOL(OCILib.lib_handle, "OCIDateAddMonths", OCIDateAddMonths,
00693 OCIDATEADDMONTHS);
00694 LIB_SYMBOL(OCILib.lib_handle, "OCIDateAddDays", OCIDateAddDays,
00695 OCIDATEADDDAYS);
00696 LIB_SYMBOL(OCILib.lib_handle, "OCIDateLastDay", OCIDateLastDay,
00697 OCIDATELASTDAY);
00698 LIB_SYMBOL(OCILib.lib_handle, "OCIDateDaysBetween", OCIDateDaysBetween,
00699 OCIDATEDAYSBETWEEN);
00700 LIB_SYMBOL(OCILib.lib_handle, "OCIDateZoneToZone", OCIDateZoneToZone,
00701 OCIDATEZONETOZONE);
00702 LIB_SYMBOL(OCILib.lib_handle, "OCIDateNextDay", OCIDateNextDay,
00703 OCIDATENEXTDAY);
00704 LIB_SYMBOL(OCILib.lib_handle, "OCIDateCheck", OCIDateCheck,
00705 OCIDATECHECK);
00706 LIB_SYMBOL(OCILib.lib_handle, "OCIDateSysDate", OCIDateSysDate,
00707 OCIDATESYSDATE);
00708 LIB_SYMBOL(OCILib.lib_handle, "OCIDescribeAny", OCIDescribeAny,
00709 OCIDESCRIBEANY);
00710
00711 LIB_SYMBOL(OCILib.lib_handle, "OCIIntervalAssign", OCIIntervalAssign,
00712 OCIINTERVALASSIGN);
00713 LIB_SYMBOL(OCILib.lib_handle, "OCIIntervalCheck", OCIIntervalCheck,
00714 OCIINTERVALCHECK);
00715 LIB_SYMBOL(OCILib.lib_handle, "OCIIntervalCompare", OCIIntervalCompare,
00716 OCIINTERVALCOMPARE);
00717 LIB_SYMBOL(OCILib.lib_handle, "OCIIntervalFromText", OCIIntervalFromText,
00718 OCIINTERVALFROMTEXT);
00719 LIB_SYMBOL(OCILib.lib_handle, "OCIIntervalToText", OCIIntervalToText,
00720 OCIINTERVALTOTEXT);
00721 LIB_SYMBOL(OCILib.lib_handle, "OCIIntervalFromTZ", OCIIntervalFromTZ,
00722 OCIINTERVALFROMTZ);
00723 LIB_SYMBOL(OCILib.lib_handle, "OCIIntervalGetDaySecond", OCIIntervalGetDaySecond,
00724 OCIINTERVALGETDAYSECOND);
00725 LIB_SYMBOL(OCILib.lib_handle, "OCIIntervalGetYearMonth", OCIIntervalGetYearMonth,
00726 OCIINTERVALGETYEARMONTH);
00727 LIB_SYMBOL(OCILib.lib_handle, "OCIIntervalSetDaySecond", OCIIntervalSetDaySecond,
00728 OCIINTERVALSETDAYSECOND);
00729 LIB_SYMBOL(OCILib.lib_handle, "OCIIntervalSetYearMonth", OCIIntervalSetYearMonth,
00730 OCIINTERVALSETYEARMONTH);
00731 LIB_SYMBOL(OCILib.lib_handle, "OCIIntervalSubtract", OCIIntervalSubtract,
00732 OCIINTERVALSUBTRACT);
00733 LIB_SYMBOL(OCILib.lib_handle, "OCIIntervalAdd", OCIIntervalAdd,
00734 OCIINTERVALADD);
00735
00736 LIB_SYMBOL(OCILib.lib_handle, "OCIDateTimeAssign", OCIDateTimeAssign,
00737 OCIDATETIMEASSIGN);
00738 LIB_SYMBOL(OCILib.lib_handle, "OCIDateTimeCheck", OCIDateTimeCheck,
00739 OCIDATETIMECHECK);
00740 LIB_SYMBOL(OCILib.lib_handle, "OCIDateTimeCompare", OCIDateTimeCompare,
00741 OCIDATETIMECOMPARE);
00742 LIB_SYMBOL(OCILib.lib_handle, "OCIDateTimeConstruct", OCIDateTimeConstruct,
00743 OCIDATETIMECONSTRUCT);
00744 LIB_SYMBOL(OCILib.lib_handle, "OCIDateTimeConvert", OCIDateTimeConvert,
00745 OCIDATETIMECONVERT);
00746 LIB_SYMBOL(OCILib.lib_handle, "OCIDateTimeFromArray", OCIDateTimeFromArray,
00747 OCIDATETIMEFROMARRAY);
00748 LIB_SYMBOL(OCILib.lib_handle, "OCIDateTimeToArray", OCIDateTimeToArray,
00749 OCIDATETIMETOARRAY);
00750 LIB_SYMBOL(OCILib.lib_handle, "OCIDateTimeFromText", OCIDateTimeFromText,
00751 OCIDATETIMEFROMTEXT);
00752 LIB_SYMBOL(OCILib.lib_handle, "OCIDateTimeToText", OCIDateTimeToText,
00753 OCIDATETIMETOTEXT);
00754 LIB_SYMBOL(OCILib.lib_handle, "OCIDateTimeGetDate", OCIDateTimeGetDate,
00755 OCIDATETIMEGETDATE);
00756 LIB_SYMBOL(OCILib.lib_handle, "OCIDateTimeGetTime", OCIDateTimeGetTime,
00757 OCIDATETIMEGETTIME);
00758 LIB_SYMBOL(OCILib.lib_handle, "OCIDateTimeGetTimeZoneName", OCIDateTimeGetTimeZoneName,
00759 OCIDATETIMEGETTIMEZONENAME);
00760 LIB_SYMBOL(OCILib.lib_handle, "OCIDateTimeGetTimeZoneOffset", OCIDateTimeGetTimeZoneOffset,
00761 OCIDATETIMEGETTIMEZONEOFFSET);
00762 LIB_SYMBOL(OCILib.lib_handle, "OCIDateTimeIntervalAdd", OCIDateTimeIntervalAdd,
00763 OCIDATETIMEINTERVALADD);
00764 LIB_SYMBOL(OCILib.lib_handle, "OCIDateTimeIntervalSub", OCIDateTimeIntervalSub,
00765 OCIDATETIMEINTERVALSUB);
00766 LIB_SYMBOL(OCILib.lib_handle, "OCIDateTimeSubtract", OCIDateTimeSubtract,
00767 OCIDATETIMESUBTRACT);
00768 LIB_SYMBOL(OCILib.lib_handle, "OCIDateTimeSysTimeStamp", OCIDateTimeSysTimeStamp,
00769 OCIDATETIMESYSTIMESTAMP);
00770
00771 LIB_SYMBOL(OCILib.lib_handle, "OCITypeByName", OCITypeByName,
00772 OCITYPEBYNAME);
00773
00774 LIB_SYMBOL(OCILib.lib_handle, "OCINumberToInt", OCINumberToInt,
00775 OCINUMBERTOINT);
00776 LIB_SYMBOL(OCILib.lib_handle, "OCINumberFromInt", OCINumberFromInt,
00777 OCINUMBERFROMINT);
00778
00779 LIB_SYMBOL(OCILib.lib_handle, "OCINumberToReal", OCINumberToReal,
00780 OCINUMBERTOREAL);
00781 LIB_SYMBOL(OCILib.lib_handle, "OCINumberFromReal", OCINumberFromReal,
00782 OCINUMBERFROMREAL);
00783
00784 LIB_SYMBOL(OCILib.lib_handle, "OCINumberToText", OCINumberToText,
00785 OCINUMBERTOTEXT);
00786 LIB_SYMBOL(OCILib.lib_handle, "OCINumberFromText", OCINumberFromText,
00787 OCINUMBERFROMTEXT);
00788
00789 LIB_SYMBOL(OCILib.lib_handle, "OCIStringPtr", OCIStringPtr,
00790 OCISTRINGPTR);
00791 LIB_SYMBOL(OCILib.lib_handle, "OCIStringAssignText", OCIStringAssignText,
00792 OCISTRINGASSIGNTEXT);
00793
00794 LIB_SYMBOL(OCILib.lib_handle, "OCIRawPtr", OCIRawPtr,
00795 OCIRAWPTR);
00796 LIB_SYMBOL(OCILib.lib_handle, "OCIRawAssignBytes", OCIRawAssignBytes,
00797 OCIRAWASSIGNBYTES);
00798 LIB_SYMBOL(OCILib.lib_handle, "OCIRawAllocSize", OCIRawAllocSize,
00799 OCIRAWALLOCSIZE);
00800
00801 LIB_SYMBOL(OCILib.lib_handle, "OCIObjectNew", OCIObjectNew,
00802 OCIOBJECTNEW);
00803 LIB_SYMBOL(OCILib.lib_handle, "OCIObjectFree", OCIObjectFree,
00804 OCIOBJECTFREE);
00805 LIB_SYMBOL(OCILib.lib_handle, "OCIObjectSetAttr", OCIObjectSetAttr,
00806 OCIOBJECTSETATTR);
00807 LIB_SYMBOL(OCILib.lib_handle, "OCIObjectGetAttr", OCIObjectGetAttr,
00808 OCIOBJECTGETATTR);
00809 LIB_SYMBOL(OCILib.lib_handle, "OCIObjectPin", OCIObjectPin,
00810 OCIOBJECTPIN);
00811 LIB_SYMBOL(OCILib.lib_handle, "OCIObjectUnpin", OCIObjectUnpin,
00812 OCIOBJECTUNPIN);
00813 LIB_SYMBOL(OCILib.lib_handle, "OCIObjectCopy", OCIObjectCopy,
00814 OCIOBJECTCOPY);
00815 LIB_SYMBOL(OCILib.lib_handle, "OCIObjectGetObjectRef", OCIObjectGetObjectRef,
00816 OCIOBJECTGETOBJECTREF);
00817 LIB_SYMBOL(OCILib.lib_handle, "OCIObjectGetProperty", OCIObjectGetProperty,
00818 OCIOBJECTGETPROPERTY);
00819 LIB_SYMBOL(OCILib.lib_handle, "OCIObjectGetInd", OCIObjectGetInd,
00820 OCIOBJECTGETIND);
00821
00822
00823 LIB_SYMBOL(OCILib.lib_handle, "OCIRefAssign", OCIRefAssign,
00824 OCIREFASSIGN);
00825 LIB_SYMBOL(OCILib.lib_handle, "OCIRefIsNull", OCIRefIsNull,
00826 OCIREFISNULL);
00827 LIB_SYMBOL(OCILib.lib_handle, "OCIRefClear", OCIRefClear,
00828 OCIREFCLEAR);
00829 LIB_SYMBOL(OCILib.lib_handle, "OCIRefToHex", OCIRefToHex,
00830 OCIREFTOHEX);
00831 LIB_SYMBOL(OCILib.lib_handle, "OCIRefHexSize", OCIRefHexSize,
00832 OCIREFHEXSIZE);
00833
00834 LIB_SYMBOL(OCILib.lib_handle, "OCIArrayDescriptorFree", OCIArrayDescriptorFree,
00835 OCIARRAYDESCRIPTORFREE);
00836
00837 LIB_SYMBOL(OCILib.lib_handle, "OCIClientVersion", OCIClientVersion,
00838 OCICLIENTVERSION);
00839
00840 LIB_SYMBOL(OCILib.lib_handle, "OCIThreadProcessInit", OCIThreadProcessInit,
00841 OCITHREADPROCESSINIT);
00842 LIB_SYMBOL(OCILib.lib_handle, "OCIThreadInit", OCIThreadInit,
00843 OCITHREADINIT);
00844 LIB_SYMBOL(OCILib.lib_handle, "OCIThreadTerm", OCIThreadTerm,
00845 OCITHREADTERM);
00846
00847 LIB_SYMBOL(OCILib.lib_handle, "OCIThreadIdInit", OCIThreadIdInit,
00848 OCITHREADIDINIT);
00849 LIB_SYMBOL(OCILib.lib_handle, "OCIThreadIdDestroy", OCIThreadIdDestroy,
00850 OCITHREADIDDESTROY);
00851 LIB_SYMBOL(OCILib.lib_handle, "OCIThreadHndInit", OCIThreadHndInit,
00852 OCITHREADHNDINIT);
00853 LIB_SYMBOL(OCILib.lib_handle, "OCIThreadHndDestroy", OCIThreadHndDestroy,
00854 OCITHREADHNDDESTROY);
00855 LIB_SYMBOL(OCILib.lib_handle, "OCIThreadCreate", OCIThreadCreate,
00856 OCITHREADCREATE);
00857 LIB_SYMBOL(OCILib.lib_handle, "OCIThreadJoin", OCIThreadJoin,
00858 OCITHREADJOIN);
00859 LIB_SYMBOL(OCILib.lib_handle, "OCIThreadClose", OCIThreadClose,
00860 OCITHREADCLOSE);
00861
00862 LIB_SYMBOL(OCILib.lib_handle, "OCIThreadMutexInit", OCIThreadMutexInit,
00863 OCITHREADMUTEXINIT);
00864 LIB_SYMBOL(OCILib.lib_handle, "OCIThreadMutexDestroy", OCIThreadMutexDestroy,
00865 OCITHREADMUTEXDESTROY);
00866 LIB_SYMBOL(OCILib.lib_handle, "OCIThreadMutexAcquire", OCIThreadMutexAcquire,
00867 OCITHREADMUTEXACQUIRE);
00868 LIB_SYMBOL(OCILib.lib_handle, "OCIThreadMutexRelease", OCIThreadMutexRelease,
00869 OCITHREADMUTEXRELEASE);
00870
00871 LIB_SYMBOL(OCILib.lib_handle, "OCIThreadKeyInit", OCIThreadKeyInit,
00872 OCITHREADKEYINIT);
00873 LIB_SYMBOL(OCILib.lib_handle, "OCIThreadKeyDestroy", OCIThreadKeyDestroy,
00874 OCITHREADKEYDESTROY);
00875 LIB_SYMBOL(OCILib.lib_handle, "OCIThreadKeySet", OCIThreadKeySet,
00876 OCITHREADKEYSET);
00877 LIB_SYMBOL(OCILib.lib_handle, "OCIThreadKeyGet", OCIThreadKeyGet,
00878 OCITHREADKEYGET);
00879
00880 LIB_SYMBOL(OCILib.lib_handle, "OCIConnectionPoolCreate", OCIConnectionPoolCreate,
00881 OCICONNECTIONPOOLCREATE);
00882 LIB_SYMBOL(OCILib.lib_handle, "OCIConnectionPoolDestroy", OCIConnectionPoolDestroy,
00883 OCICONNECTIONPOOLDESTROY);
00884
00885 LIB_SYMBOL(OCILib.lib_handle, "OCICollSize", OCICollSize,
00886 OCICOLLSIZE);
00887 LIB_SYMBOL(OCILib.lib_handle, "OCICollMax", OCICollMax,
00888 OCICOLLMAX);
00889 LIB_SYMBOL(OCILib.lib_handle, "OCICollGetElem", OCICollGetElem,
00890 OCICOLLGETITEM);
00891 LIB_SYMBOL(OCILib.lib_handle, "OCICollAssignElem", OCICollAssignElem,
00892 OCICOLLASSIGNELEM);
00893 LIB_SYMBOL(OCILib.lib_handle, "OCICollAssign", OCICollAssign,
00894 OCICOLLASSIGN);
00895 LIB_SYMBOL(OCILib.lib_handle, "OCICollAppend", OCICollAppend,
00896 OCICOLLAPPEND);
00897 LIB_SYMBOL(OCILib.lib_handle, "OCICollTrim", OCICollTrim,
00898 OCICOLLTRIM);
00899
00900 LIB_SYMBOL(OCILib.lib_handle, "OCIIterCreate", OCIIterCreate,
00901 OCIITERCREATE);
00902 LIB_SYMBOL(OCILib.lib_handle, "OCIIterDelete", OCIIterDelete,
00903 OCIITERDELETE);
00904 LIB_SYMBOL(OCILib.lib_handle, "OCIIterInit", OCIIterInit,
00905 OCIITERINIT);
00906 LIB_SYMBOL(OCILib.lib_handle, "OCIIterNext", OCIIterNext,
00907 OCIITERNEXT);
00908 LIB_SYMBOL(OCILib.lib_handle, "OCIIterPrev", OCIIterPrev,
00909 OCIITERPREV);
00910
00911 LIB_SYMBOL(OCILib.lib_handle, "OCIDirPathAbort", OCIDirPathAbort,
00912 OCIDIRPATHABORT);
00913 LIB_SYMBOL(OCILib.lib_handle, "OCIDirPathDataSave", OCIDirPathDataSave,
00914 OCIDIRPATHDATASAVE);
00915 LIB_SYMBOL(OCILib.lib_handle, "OCIDirPathFinish", OCIDirPathFinish,
00916 OCIDIRPATHFINISH);
00917 LIB_SYMBOL(OCILib.lib_handle, "OCIDirPathPrepare", OCIDirPathPrepare,
00918 OCIDIRPATHPREPARE);
00919 LIB_SYMBOL(OCILib.lib_handle, "OCIDirPathLoadStream", OCIDirPathLoadStream,
00920 OCIDIRPATHLOADSTREAM);
00921 LIB_SYMBOL(OCILib.lib_handle, "OCIDirPathColArrayEntrySet", OCIDirPathColArrayEntrySet,
00922 OCIDIRPATHCOLARRAYENTRYSET);
00923 LIB_SYMBOL(OCILib.lib_handle, "OCIDirPathColArrayReset", OCIDirPathColArrayReset,
00924 OCIDIRPATHCOLARRAYRESET);
00925 LIB_SYMBOL(OCILib.lib_handle, "OCIDirPathColArrayToStream", OCIDirPathColArrayToStream,
00926 OCIDIRPATHCOLARRAYTOSTREAM);
00927 LIB_SYMBOL(OCILib.lib_handle, "OCIDirPathStreamReset", OCIDirPathStreamReset,
00928 OCIDIRPATHSTREAMRESET);
00929 LIB_SYMBOL(OCILib.lib_handle, "OCIDirPathFlushRow", OCIDirPathFlushRow,
00930 OCIDIRPATHFLUSHROW);
00931
00932 LIB_SYMBOL(OCILib.lib_handle, "OCICacheFree", OCICacheFree,
00933 OCICACHEFREE);
00934
00935 LIB_SYMBOL(OCILib.lib_handle, "OCIDBStartup", OCIDBStartup,
00936 OCIDBSTARTUP);
00937 LIB_SYMBOL(OCILib.lib_handle, "OCIDBShutdown", OCIDBShutdown,
00938 OCIDBSHUTDOWN);
00939
00940 LIB_SYMBOL(OCILib.lib_handle, "OCIStmtPrepare2", OCIStmtPrepare2,
00941 OCISTMTPREPARE2);
00942 LIB_SYMBOL(OCILib.lib_handle, "OCIStmtRelease", OCIStmtRelease,
00943 OCISTMTRELEASE);
00944
00945
00946
00947 if (OCIArrayDescriptorFree != NULL)
00948 {
00949 OCILib.version_runtime = OCI_11_1;
00950 }
00951 else if (OCIClientVersion != NULL)
00952 {
00953 OCILib.version_runtime = OCI_10_2;
00954 }
00955 else if (OCILobWrite2 != NULL)
00956 {
00957 OCILib.version_runtime = OCI_10_1;
00958 }
00959 else if (OCIStmtPrepare2 != NULL)
00960 {
00961 OCILib.version_runtime = OCI_9_2;
00962 }
00963 else if (OCIDateTimeGetTimeZoneName != NULL)
00964 {
00965 OCILib.version_runtime = OCI_9_0;
00966 }
00967 else if (OCIThreadProcessInit != NULL)
00968 {
00969 OCILib.version_runtime = OCI_8_1;
00970 }
00971 else if (OCIEnvCreate != NULL)
00972 {
00973 OCILib.version_runtime = OCI_8_0;
00974 }
00975 else
00976 {
00977 LIB_CLOSE(OCILib.lib_handle);
00978
00979 OCI_ExceptionLoadingSymbols();
00980
00981 res = FALSE;
00982 }
00983 }
00984 else
00985 {
00986 OCI_ExceptionLoadingSharedLib();
00987
00988 res = FALSE;
00989 }
00990
00991 if (res == TRUE)
00992 {
00993
00994 #if defined(OCI_BIG_UINT_ENABLED)
00995
00996 if ((OCILib.version_runtime >= OCI_10_1) && (OCILobCopy2 != NULL))
00997 {
00998 OCILib.use_lob_ub8 = TRUE;
00999 }
01000
01001 #endif
01002
01003 #if defined(OCI_STMT_SCROLLABLE_READONLY)
01004
01005 if ((OCILib.version_runtime >= OCI_9_0) && (OCIStmtFetch2 != NULL))
01006 {
01007 OCILib.use_scrollable_cursors = TRUE;
01008 }
01009
01010 #endif
01011
01012 }
01013
01014 #endif
01015
01016 #if defined(OCI_CHARSET_UNICODE)
01017
01018
01019
01020 if ((res == TRUE) && (OCILib.version_runtime < OCI_9_0))
01021 {
01022 OCI_ExceptionNotAvailable(NULL, OCI_FEATURE_UNICODE_USERDATA);
01023
01024 res = FALSE;
01025 }
01026
01027 #endif
01028
01029
01030
01031 if (res == TRUE)
01032 {
01033
01034
01035 if (mode & OCI_ENV_THREADED)
01036 oci_mode |= OCI_THREADED;
01037
01038
01039
01040 res = res && (OCI_SUCCESS == OCIEnvCreate(&OCILib.env, oci_mode,
01041 (dvoid *) NULL, NULL, NULL, NULL,
01042 (size_t) 0, (dvoid **) NULL));
01043
01044 if (res == FALSE)
01045 {
01046 OCI_ExceptionOCIEnvironment();
01047 }
01048
01049
01050
01051 res = res && (OCI_SUCCESS == OCI_HandleAlloc((dvoid *) OCILib.env,
01052 (dvoid **) (void *) &OCILib.err,
01053 (ub4) OCI_HTYPE_ERROR,
01054 (size_t) 0, (dvoid **) NULL));
01055 }
01056
01057
01058
01059 if (res == TRUE)
01060 {
01061 if (OCI_LIB_THREADED)
01062 {
01063 OCIThreadProcessInit();
01064
01065 res = (OCI_SUCCESS == OCIThreadInit(OCILib.env, OCILib.err));
01066 }
01067
01068
01069
01070 OCILib.key_errs = OCI_ThreadKeyCreateInternal((POCI_THREADKEYDEST) OCI_ErrorFree);
01071
01072
01073
01074 if (res == TRUE)
01075 {
01076 OCILib.cons = OCI_ListCreate(OCI_IPC_CONNECTION);
01077
01078 res = (OCILib.cons != NULL);
01079 }
01080
01081
01082
01083 if (res == TRUE)
01084 {
01085
01086 OCILib.pools = OCI_ListCreate(OCI_IPC_CONNPOOL);
01087
01088 res = (OCILib.pools != NULL);
01089 }
01090
01091 }
01092
01093 if (res == TRUE)
01094 OCILib.loaded = TRUE;
01095
01096 return res;
01097 }
01098
01099
01100
01101
01102
01103 boolean OCI_API OCI_Cleanup(void)
01104 {
01105 boolean res = TRUE;
01106
01107
01108
01109 OCI_ListForEach(OCILib.cons, (boolean (*)(void *)) OCI_ConnectionClose);
01110 OCI_ListClear(OCILib.cons);
01111
01112
01113
01114 OCI_ListForEach(OCILib.pools, (boolean (*)(void *)) OCI_ConnPoolClose);
01115 OCI_ListClear(OCILib.pools);
01116
01117
01118
01119 OCI_KeyMapFree();
01120
01121 OCI_ListFree(OCILib.cons);
01122 OCI_ListFree(OCILib.pools);
01123
01124 OCILib.cons = NULL;
01125 OCILib.pools = NULL;
01126 OCILib.key_map = NULL;
01127
01128
01129
01130 if (OCI_LIB_THREADED)
01131 {
01132 OCI_CALL0
01133 (
01134 res, OCILib.err,
01135
01136 OCIThreadTerm(OCILib.env, OCILib.err)
01137 )
01138 }
01139
01140
01141
01142 if (OCILib.key_errs != NULL)
01143 {
01144 OCI_ThreadKey *key = OCILib.key_errs;
01145 OCI_Error *err = OCI_ErrorGet(FALSE);
01146
01147 OCILib.key_errs = NULL;
01148
01149 OCI_ErrorFree(err);
01150 OCI_ThreadKeySet(key, NULL);
01151 OCI_ThreadKeyFree(key);
01152 }
01153
01154
01155
01156 OCILib.loaded = FALSE;
01157
01158
01159
01160 if (OCILib.err != NULL)
01161 OCI_HandleFree(OCILib.err, OCI_HTYPE_ERROR);
01162
01163
01164
01165
01166
01167
01168 if (OCILib.env != NULL)
01169 OCIHandleFree(OCILib.env, OCI_HTYPE_ENV);
01170
01171 #ifdef OCI_IMPORT_RUNTIME
01172
01173 if (OCILib.lib_handle != NULL)
01174 LIB_CLOSE(OCILib.lib_handle);
01175
01176 #endif
01177
01178
01179
01180 if (OCILib.nb_hndlp > 0)
01181 {
01182 OCI_ExceptionUnfreedData(OCI_HDLE_HANDLE, OCILib.nb_hndlp);
01183 res = FALSE;
01184 }
01185
01186
01187
01188 if (OCILib.nb_descp > 0)
01189 {
01190 OCI_ExceptionUnfreedData(OCI_HDLE_DESCRIPTOR, OCILib.nb_descp);
01191 res = FALSE;
01192 }
01193
01194
01195
01196 if (OCILib.nb_objinst > 0)
01197 {
01198 OCI_ExceptionUnfreedData(OCI_HDLE_OBJECT, OCILib.nb_objinst);
01199 res = FALSE;
01200 }
01201
01202 memset(&OCILib, 0, sizeof(OCILib));
01203
01204 return res;
01205 }
01206
01207
01208
01209
01210
01211 unsigned int OCI_API OCI_GetOCICompileVersion(void)
01212 {
01213 return (unsigned int) OCILib.version_compile;
01214 }
01215
01216
01217
01218
01219
01220 unsigned int OCI_API OCI_GetOCIRuntimeVersion(void)
01221 {
01222 return (unsigned int) OCILib.version_runtime;
01223 }
01224
01225
01226
01227
01228
01229 unsigned int OCI_API OCI_GetImportMode(void)
01230 {
01231 return (unsigned int) OCI_IMPORT_MODE;
01232 }
01233
01234
01235
01236
01237
01238 unsigned int OCI_API OCI_GetCharsetMetaData(void)
01239 {
01240 return (unsigned int) OCI_CHAR_MTEXT;
01241 }
01242
01243
01244
01245
01246
01247 unsigned int OCI_API OCI_GetCharsetUserData(void)
01248 {
01249 return (unsigned int) OCI_CHAR_DTEXT;
01250 }
01251
01252
01253
01254
01255
01256 OCI_Error * OCI_API OCI_GetLastError(void)
01257 {
01258 OCI_Error *err = NULL;
01259
01260 if ((OCILib.loaded == FALSE) || (OCI_LIB_CONTEXT))
01261 {
01262 err = OCI_ErrorGet(TRUE);
01263
01264 if (err != NULL)
01265 {
01266 if (err->raise == FALSE)
01267 err = NULL;
01268 }
01269 }
01270
01271 return err;
01272 }
01273
01274
01275
01276
01277
01278 boolean OCI_API OCI_DatabaseStartup(const mtext *db, const mtext *user,
01279 const mtext *pwd, unsigned int sess_mode,
01280 unsigned int start_mode, unsigned int start_flag,
01281 const mtext *spfile
01282 )
01283 {
01284 boolean res = TRUE;
01285 OCI_Connection *con = NULL;
01286
01287 OCI_CHECK_REMOTE_DBS_CONTROL_ENABLED(FALSE);
01288
01289 #if OCI_VERSION_COMPILE >= OCI_10_2
01290
01291 if (start_mode & OCI_DB_SPM_START)
01292 {
01293 OCIAdmin *adm = NULL;
01294
01295
01296
01297 con = OCI_ConnectionCreate(db, user, pwd, sess_mode | OCI_PRELIM_AUTH);
01298
01299 res = (con != NULL);
01300
01301
01302
01303 if (res == TRUE)
01304 {
01305 res = (OCI_SUCCESS == OCI_HandleAlloc((dvoid *) OCILib.env,
01306 (dvoid **) (void *) &adm,
01307 (ub4) OCI_HTYPE_ADMIN,
01308 (size_t) 0, (dvoid **) NULL));
01309 }
01310
01311
01312
01313 if ((res == TRUE) && (spfile != NULL) && (spfile[0] != 0))
01314 {
01315 void *ostr = NULL;
01316 int osize = -1;
01317
01318 ostr = OCI_GetInputMetaString(spfile, &osize);
01319
01320 OCI_CALL2
01321 (
01322 res, con,
01323
01324 OCIAttrSet((dvoid *) adm, (ub4) OCI_HTYPE_ADMIN,
01325 (dvoid *) ostr, (ub4) osize,
01326 (ub4) OCI_ATTR_ADMIN_PFILE, con->err)
01327 )
01328
01329 OCI_ReleaseMetaString(ostr);
01330 }
01331
01332
01333
01334 OCI_CALL2
01335 (
01336 res, con,
01337
01338 OCIDBStartup(con->cxt, con->err, (OCIAdmin *) adm,
01339 OCI_DEFAULT, start_flag)
01340 )
01341
01342
01343
01344 if (adm != NULL)
01345 {
01346 OCI_HandleFree(OCILib.err, OCI_HTYPE_ADMIN);
01347 }
01348
01349
01350
01351 OCI_ConnectionFree(con);
01352 }
01353
01354
01355
01356 con = OCI_ConnectionCreate(db, user, pwd, sess_mode);
01357
01358 res = (con != NULL);
01359
01360
01361
01362 if (res == TRUE)
01363 {
01364 OCI_Statement *stmt = OCI_StatementCreate(con);
01365
01366
01367
01368 if (start_mode & OCI_DB_SPM_MOUNT)
01369 res = (res && OCI_ExecuteStmt(stmt, MT("ALTER DATABASE MOUNT")));
01370
01371
01372
01373 if (start_mode & OCI_DB_SPM_OPEN)
01374 res = (res && OCI_ExecuteStmt(stmt, MT("ALTER DATABASE OPEN")));
01375
01376 OCI_StatementFree(stmt);
01377 }
01378
01379
01380
01381 OCI_ConnectionFree(con);
01382
01383 #else
01384
01385 res = FALSE;
01386
01387 OCI_NOT_USED(db);
01388 OCI_NOT_USED(user);
01389 OCI_NOT_USED(pwd);
01390 OCI_NOT_USED(sess_mode);
01391 OCI_NOT_USED(start_mode);
01392 OCI_NOT_USED(start_flag);
01393 OCI_NOT_USED(spfile);
01394 OCI_NOT_USED(con);
01395
01396 #endif
01397
01398 OCI_RESULT(res);
01399
01400 return res;
01401 }
01402
01403
01404
01405
01406
01407
01408 boolean OCI_API OCI_DatabaseShutdown(const mtext *db, const mtext *user,
01409 const mtext *pwd, unsigned int sess_mode,
01410 unsigned int shut_mode, unsigned int shut_flag
01411 )
01412 {
01413 boolean res = TRUE;
01414 OCI_Connection *con = NULL;
01415
01416 OCI_CHECK_REMOTE_DBS_CONTROL_ENABLED(FALSE);
01417
01418 #if OCI_VERSION_COMPILE >= OCI_10_2
01419
01420
01421
01422 con = OCI_ConnectionCreate(db, user, pwd, sess_mode);
01423
01424 if (con != NULL);
01425 {
01426
01427
01428 if ((con->trs != NULL) && (shut_flag == OCI_DB_SDF_ABORT))
01429 {
01430 OCI_TransactionFree(con->trs);
01431
01432 con->trs = NULL;
01433 }
01434
01435
01436
01437 if (shut_mode & OCI_DB_SDM_SHUTDOWN)
01438 {
01439
01440
01441 OCI_CALL2
01442 (
01443 res, con,
01444
01445 OCIDBShutdown(con->cxt, con->err, (OCIAdmin *) NULL, shut_flag)
01446 )
01447 }
01448
01449
01450
01451 if ((res == TRUE) && (shut_flag != OCI_DB_SDF_ABORT))
01452 {
01453 OCI_Statement *stmt = OCI_StatementCreate(con);
01454
01455
01456
01457 if (shut_mode & OCI_DB_SDM_CLOSE)
01458 res = (res && OCI_ExecuteStmt(stmt, MT("ALTER DATABASE CLOSE NORMAL")));
01459
01460
01461
01462 if (shut_mode & OCI_DB_SDM_DISMOUNT)
01463 res = (res && OCI_ExecuteStmt(stmt,MT( "ALTER DATABASE DISMOUNT")));
01464
01465 OCI_StatementFree(stmt);
01466
01467
01468
01469 if (con->trs != NULL)
01470 {
01471 OCI_TransactionFree(con->trs);
01472
01473 con->trs = NULL;
01474 }
01475
01476
01477
01478 OCI_CALL2
01479 (
01480 res, con,
01481
01482 OCIDBShutdown(con->cxt, con->err, (OCIAdmin *) 0, OCI_DBSHUTDOWN_FINAL)
01483 )
01484 }
01485
01486
01487
01488 OCI_ConnectionFree(con);
01489 }
01490
01491 #else
01492
01493 res = FALSE;
01494
01495 OCI_NOT_USED(db);
01496 OCI_NOT_USED(user);
01497 OCI_NOT_USED(pwd);
01498 OCI_NOT_USED(sess_mode);
01499 OCI_NOT_USED(shut_mode);
01500 OCI_NOT_USED(shut_flag);
01501 OCI_NOT_USED(con);
01502 #endif
01503
01504 OCI_RESULT(res);
01505
01506 return res;
01507 }
01508