📄 ora8api_linux.cpp
字号:
// ora8API_linux.cpp
//
//////////////////////////////////////////////////////////////////////
#include <SQLAPI.h>
#include <oraAPI.h>
#include <assert.h>
#include "samisc.h"
#include "errmsg.h"
#include <dlfcn.h>static const char *g_sORA8DLLName = "libclntsh.so";
static void *g_hORA8DLL = NULL;
long g_nORA8DLLVersionLoaded = 0;
static long g_nORA8DLLRefs = 0;
// API definitions
ora8API g_ora8API;
ora8API::ora8API()
{
// 8.0.x calls
OCIInitialize = NULL;
OCIHandleAlloc = NULL;
OCIHandleFree = NULL;
OCIDescriptorAlloc = NULL;
OCIDescriptorFree = NULL;
OCIEnvInit = NULL;
OCIServerAttach = NULL;
OCIServerDetach = NULL;
OCISessionBegin = NULL;
OCISessionEnd = NULL;
OCILogon = NULL;
OCILogoff = NULL;
OCIPasswordChange = NULL;
OCIStmtPrepare = NULL;
OCIBindByPos = NULL;
OCIBindByName = NULL;
OCIBindObject = NULL;
OCIBindDynamic = NULL;
OCIBindArrayOfStruct = NULL;
OCIStmtGetPieceInfo = NULL;
OCIStmtSetPieceInfo = NULL;
OCIStmtExecute = NULL;
OCIDefineByPos = NULL;
OCIDefineObject = NULL;
OCIDefineDynamic = NULL;
OCIDefineArrayOfStruct = NULL;
OCIStmtFetch = NULL;
OCIStmtGetBindInfo = NULL;
OCIDescribeAny = NULL;
OCIParamGet = NULL;
OCIParamSet = NULL;
OCITransStart = NULL;
OCITransDetach = NULL;
OCITransCommit = NULL;
OCITransRollback = NULL;
OCITransPrepare = NULL;
OCITransForget = NULL;
OCIErrorGet = NULL;
OCILobAppend = NULL;
OCILobAssign = NULL;
OCILobCharSetForm = NULL;
OCILobCharSetId = NULL;
OCILobCopy = NULL;
OCILobDisableBuffering = NULL;
OCILobEnableBuffering = NULL;
OCILobErase = NULL;
OCILobFileClose = NULL;
OCILobFileCloseAll = NULL;
OCILobFileExists = NULL;
OCILobFileGetName = NULL;
OCILobFileIsOpen = NULL;
OCILobFileOpen = NULL;
OCILobFileSetName = NULL;
OCILobFlushBuffer = NULL;
OCILobGetLength = NULL;
OCILobIsEqual = NULL;
OCILobLoadFromFile = NULL;
OCILobLocatorIsInit = NULL;
OCILobRead = NULL;
OCILobTrim = NULL;
OCILobWrite = NULL;
OCIBreak = NULL;
OCIReset = NULL;
OCIServerVersion = NULL;
OCIAttrGet = NULL;
OCIAttrSet = NULL;
OCISvcCtxToLda = NULL;
OCILdaToSvcCtx = NULL;
OCIResultSetToStmt = NULL;
// 8.1.x (8i) calls
OCIEnvCreate = NULL;
OCIDurationBegin = NULL;
OCIDurationEnd = NULL;
OCILobCreateTemporary = NULL;
OCILobFreeTemporary = NULL;
OCILobIsTemporary = NULL;
};
ora8ConnectionHandles::ora8ConnectionHandles()
{
m_pOCIEnv = NULL;
m_pOCIError = NULL;
m_pOCISvcCtx = NULL;
m_pOCIServer = NULL;
m_pOCISession = NULL;
}
ora8CommandHandles::ora8CommandHandles()
{
m_pOCIStmt = NULL;
m_pOCIError = NULL;
}
// detects if OCI8 is available
bool CanBeLoadedOCI8()
{
if(g_hORA8DLL)
return true; // already loaded
return true;/* try
{
long nVersion = ::SAGetFileVersionFromString(g_sORA8DLLName);
return HIWORD(nVersion) >= 8;
}
catch(SAException &)
{
}
return false;
*/}
static void LoadAPI()
{
// 8.0.x calls
g_ora8API.OCIInitialize = (OCIInitialize_t)dlsym(g_hORA8DLL, "OCIInitialize"); assert(g_ora8API.OCIInitialize != NULL);
g_ora8API.OCIHandleAlloc = (OCIHandleAlloc_t)dlsym(g_hORA8DLL, "OCIHandleAlloc"); assert(g_ora8API.OCIHandleAlloc != NULL);
g_ora8API.OCIHandleFree = (OCIHandleFree_t)dlsym(g_hORA8DLL, "OCIHandleFree"); assert(g_ora8API.OCIHandleFree != NULL);
g_ora8API.OCIDescriptorAlloc = (OCIDescriptorAlloc_t)dlsym(g_hORA8DLL, "OCIDescriptorAlloc"); assert(g_ora8API.OCIDescriptorAlloc != NULL);
g_ora8API.OCIDescriptorFree = (OCIDescriptorFree_t)dlsym(g_hORA8DLL, "OCIDescriptorFree"); assert(g_ora8API.OCIDescriptorFree != NULL);
g_ora8API.OCIEnvInit = (OCIEnvInit_t)dlsym(g_hORA8DLL, "OCIEnvInit"); assert(g_ora8API.OCIEnvInit != NULL);
g_ora8API.OCIServerAttach = (OCIServerAttach_t)dlsym(g_hORA8DLL, "OCIServerAttach"); assert(g_ora8API.OCIServerAttach != NULL);
g_ora8API.OCIServerDetach = (OCIServerDetach_t)dlsym(g_hORA8DLL, "OCIServerDetach"); assert(g_ora8API.OCIServerDetach != NULL);
g_ora8API.OCISessionBegin = (OCISessionBegin_t)dlsym(g_hORA8DLL, "OCISessionBegin"); assert(g_ora8API.OCISessionBegin != NULL);
g_ora8API.OCISessionEnd = (OCISessionEnd_t)dlsym(g_hORA8DLL, "OCISessionEnd"); assert(g_ora8API.OCISessionEnd != NULL);
g_ora8API.OCILogon = (OCILogon_t)dlsym(g_hORA8DLL, "OCILogon"); assert(g_ora8API.OCILogon != NULL);
g_ora8API.OCILogoff = (OCILogoff_t)dlsym(g_hORA8DLL, "OCILogoff"); assert(g_ora8API.OCILogoff != NULL);
g_ora8API.OCIPasswordChange = (OCIPasswordChange_t)dlsym(g_hORA8DLL, "OCIPasswordChange"); assert(g_ora8API.OCIPasswordChange != NULL);
g_ora8API.OCIStmtPrepare = (OCIStmtPrepare_t)dlsym(g_hORA8DLL, "OCIStmtPrepare"); assert(g_ora8API.OCIStmtPrepare != NULL);
g_ora8API.OCIBindByPos = (OCIBindByPos_t)dlsym(g_hORA8DLL, "OCIBindByPos"); assert(g_ora8API.OCIBindByPos != NULL);
g_ora8API.OCIBindByName = (OCIBindByName_t)dlsym(g_hORA8DLL, "OCIBindByName"); assert(g_ora8API.OCIBindByName != NULL);
g_ora8API.OCIBindObject = (OCIBindObject_t)dlsym(g_hORA8DLL, "OCIBindObject"); assert(g_ora8API.OCIBindObject != NULL);
g_ora8API.OCIBindDynamic = (OCIBindDynamic_t)dlsym(g_hORA8DLL, "OCIBindDynamic"); assert(g_ora8API.OCIBindDynamic != NULL);
g_ora8API.OCIBindArrayOfStruct = (OCIBindArrayOfStruct_t)dlsym(g_hORA8DLL, "OCIBindArrayOfStruct"); assert(g_ora8API.OCIBindArrayOfStruct != NULL);
g_ora8API.OCIStmtGetPieceInfo = (OCIStmtGetPieceInfo_t)dlsym(g_hORA8DLL, "OCIStmtGetPieceInfo"); assert(g_ora8API.OCIStmtGetPieceInfo != NULL);
g_ora8API.OCIStmtSetPieceInfo = (OCIStmtSetPieceInfo_t)dlsym(g_hORA8DLL, "OCIStmtSetPieceInfo"); assert(g_ora8API.OCIStmtSetPieceInfo != NULL);
g_ora8API.OCIStmtExecute = (OCIStmtExecute_t)dlsym(g_hORA8DLL, "OCIStmtExecute"); assert(g_ora8API.OCIStmtExecute != NULL);
g_ora8API.OCIDefineByPos = (OCIDefineByPos_t)dlsym(g_hORA8DLL, "OCIDefineByPos"); assert(g_ora8API.OCIDefineByPos != NULL);
g_ora8API.OCIDefineObject = (OCIDefineObject_t)dlsym(g_hORA8DLL, "OCIDefineObject"); assert(g_ora8API.OCIDefineObject != NULL);
g_ora8API.OCIDefineDynamic = (OCIDefineDynamic_t)dlsym(g_hORA8DLL, "OCIDefineDynamic"); assert(g_ora8API.OCIDefineDynamic != NULL);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -