Files
Wei, Jing 5c462e7adb [Issue #2 ] 南瑞郭海龙交接最终版2.0
1.由于郭海龙修改了提供的库,导致增加了大量南瑞的头文件,
  所以新建include目录用于存放所有的南瑞提供的同文件。

2. 修复sys_nicmonitor进程重启后,调用接口告警问题。

3. 增加USER_NUSP宏,用于nusp用户。

4. 由于新增了许多头文件且需交接给郭海龙,所以独立了一版2.0版本以用于区分。

	修改:     code/README
	新文件:   code/dep/42/dotconf#1.0.13-1.pkg.tar.gz
	新文件:   code/dep/42/run.sh
	新文件:   code/dep/90/libdotconf-dev_1.3-0.2_amd64.deb
	新文件:   code/dep/90/libdotconf-dev_1.3-0.2_arm64.deb
	新文件:   code/dep/90/libdotconf0_1.3-0.2_amd64.deb
	新文件:   code/dep/90/libdotconf0_1.3-0.2_arm64.deb
	新文件:   code/dep/90/run.sh
	新文件:   code/dep/libproc_common.so
	新文件:   code/dep/old/libman.so
	新文件:   code/dep/proc_common.cpp
	新文件:   code/sys_nicmonitor-code.tar.gz
	修改:     code/sys_nicmonitor/Makefile
	修改:     code/sys_nicmonitor/README
	新文件:   code/sys_nicmonitor/include/common_types.h
	新文件:   code/sys_nicmonitor/include/d5000_err.h
	新文件:   code/sys_nicmonitor/include/db_api/DeleteRecorder.h
	新文件:   code/sys_nicmonitor/include/db_api/codb_net.h
	新文件:   code/sys_nicmonitor/include/db_api/mc_rtdb_m.h
	新文件:   code/sys_nicmonitor/include/db_api/mc_rtdb_mng.h
	新文件:   code/sys_nicmonitor/include/db_api/odb_apinet.h
	新文件:   code/sys_nicmonitor/include/db_api/odb_apinet_rtdb_key.h
	新文件:   code/sys_nicmonitor/include/db_api/odb_apiop.h
	新文件:   code/sys_nicmonitor/include/db_api/odb_apiop.h.old
	新文件:   code/sys_nicmonitor/include/db_api/odb_app2id.h
	新文件:   code/sys_nicmonitor/include/db_api/odb_autolock.h
	新文件:   code/sys_nicmonitor/include/db_api/odb_baseindex.h
	新文件:   code/sys_nicmonitor/include/db_api/odb_ckeymanager.h
	新文件:   code/sys_nicmonitor/include/db_api/odb_common.h
	新文件:   code/sys_nicmonitor/include/db_api/odb_define.h
	新文件:   code/sys_nicmonitor/include/db_api/odb_double_overflow_hashindex.h
	新文件:   code/sys_nicmonitor/include/db_api/odb_field.h
	新文件:   code/sys_nicmonitor/include/db_api/odb_hashindex.h
	新文件:   code/sys_nicmonitor/include/db_api/odb_hashpk.h
	新文件:   code/sys_nicmonitor/include/db_api/odb_intel_ptr.h
	新文件:   code/sys_nicmonitor/include/db_api/odb_lock.h
	新文件:   code/sys_nicmonitor/include/db_api/odb_net.h
	新文件:   code/sys_nicmonitor/include/db_api/odb_net_m.h
	新文件:   code/sys_nicmonitor/include/db_api/odb_netfactory.h
	新文件:   code/sys_nicmonitor/include/db_api/odb_nooverflow_pk.h
	新文件:   code/sys_nicmonitor/include/db_api/odb_orbmgr.h
	新文件:   code/sys_nicmonitor/include/db_api/odb_profile.h
	新文件:   code/sys_nicmonitor/include/db_api/odb_prv_struct.h
	新文件:   code/sys_nicmonitor/include/db_api/odb_public.h
	新文件:   code/sys_nicmonitor/include/db_api/odb_rtdbbase.h
	新文件:   code/sys_nicmonitor/include/db_api/odb_rtdbfactory.h
	新文件:   code/sys_nicmonitor/include/db_api/odb_rtdbop.h
	新文件:   code/sys_nicmonitor/include/db_api/odb_rtdbtable.h
	新文件:   code/sys_nicmonitor/include/db_api/odb_struct.h
	新文件:   code/sys_nicmonitor/include/db_api/odb_system.h
	新文件:   code/sys_nicmonitor/include/db_api/odb_table.h
	新文件:   code/sys_nicmonitor/include/db_api/odb_tablebase.h
	新文件:   code/sys_nicmonitor/include/db_api/odb_tablemgr.h
	新文件:   code/sys_nicmonitor/include/db_api/odb_tablenet.h
	新文件:   code/sys_nicmonitor/include/db_api/odb_tableop.h
	新文件:   code/sys_nicmonitor/include/db_api/odb_where.h
	新文件:   code/sys_nicmonitor/include/db_api/pub_buf.h
	新文件:   code/sys_nicmonitor/include/db_api/rtdb_graph_name_list.h
	新文件:   code/sys_nicmonitor/include/db_api/server2proto.h
	新文件:   code/sys_nicmonitor/include/db_api/tab2idx.h
	新文件:   code/sys_nicmonitor/include/db_api/vl_get_data.h
	新文件:   code/sys_nicmonitor/include/db_api/vl_struct.h
	新文件:   code/sys_nicmonitor/include/db_api/vl_struct_m.cpp
	新文件:   code/sys_nicmonitor/include/db_api/vl_struct_m.h
	新文件:   code/sys_nicmonitor/include/db_com/CAppNo.h
	新文件:   code/sys_nicmonitor/include/db_com/CCharArray.h
	新文件:   code/sys_nicmonitor/include/db_com/CDataStream.h
	新文件:   code/sys_nicmonitor/include/db_com/CDbCommitClient.h
	新文件:   code/sys_nicmonitor/include/db_com/CDbMonitorClient.h
	新文件:   code/sys_nicmonitor/include/db_com/CDbMonitorLocal.h
	新文件:   code/sys_nicmonitor/include/db_com/CDbMonitorShm.h
	新文件:   code/sys_nicmonitor/include/db_com/CDbRepSet.h
	新文件:   code/sys_nicmonitor/include/db_com/CDbSem.h
	新文件:   code/sys_nicmonitor/include/db_com/CDbSemUse.h
	新文件:   code/sys_nicmonitor/include/db_com/CDbShm.h
	新文件:   code/sys_nicmonitor/include/db_com/CDyCfgLocal.h
	新文件:   code/sys_nicmonitor/include/db_com/CDyCommitClient.h
	新文件:   code/sys_nicmonitor/include/db_com/CDyMonitorClient.h
	新文件:   code/sys_nicmonitor/include/db_com/CDyMonitorLocal.h
	新文件:   code/sys_nicmonitor/include/db_com/CDyMonitorShm.h
	新文件:   code/sys_nicmonitor/include/db_com/CDySem.h
	新文件:   code/sys_nicmonitor/include/db_com/CDySemUse.h
	新文件:   code/sys_nicmonitor/include/db_com/CDyShm.h
	新文件:   code/sys_nicmonitor/include/db_com/CDyTagShmInfo.h
	新文件:   code/sys_nicmonitor/include/db_com/CErrorLog.h
	新文件:   code/sys_nicmonitor/include/db_com/CFindFile.h
	新文件:   code/sys_nicmonitor/include/db_com/CPrecTime.h
	新文件:   code/sys_nicmonitor/include/db_com/CRecordSet.h
	新文件:   code/sys_nicmonitor/include/db_com/CRedisAccess.h
	新文件:   code/sys_nicmonitor/include/db_com/CRepSet.h
	新文件:   code/sys_nicmonitor/include/db_com/CSaveReCommitSql.h
	新文件:   code/sys_nicmonitor/include/db_com/CSqlResultAlign.h
	新文件:   code/sys_nicmonitor/include/db_com/CSqlResultAlignClient.h
	新文件:   code/sys_nicmonitor/include/db_com/CSqlResultAlignClient2.h
	新文件:   code/sys_nicmonitor/include/db_com/DBAccess.h
	新文件:   code/sys_nicmonitor/include/db_com/DBCipher.h
	新文件:   code/sys_nicmonitor/include/db_com/DBConnectPool.h
	新文件:   code/sys_nicmonitor/include/db_com/DbFileNetIf.h
	新文件:   code/sys_nicmonitor/include/db_com/Hbase.h
	新文件:   code/sys_nicmonitor/include/db_com/Hbase_constants.h
	新文件:   code/sys_nicmonitor/include/db_com/Hbase_types.h
	新文件:   code/sys_nicmonitor/include/db_com/MyMutex.h
	新文件:   code/sys_nicmonitor/include/db_com/cross_region_sync_client.h
	新文件:   code/sys_nicmonitor/include/db_com/database_rep_m.h
	新文件:   code/sys_nicmonitor/include/db_com/db_commit_define.h
	新文件:   code/sys_nicmonitor/include/db_com/db_commit_m.h
	新文件:   code/sys_nicmonitor/include/db_com/db_error_define.h
	新文件:   code/sys_nicmonitor/include/db_com/db_extern.h
	新文件:   code/sys_nicmonitor/include/db_com/db_global.h
	新文件:   code/sys_nicmonitor/include/db_com/db_micro_define.h
	新文件:   code/sys_nicmonitor/include/db_com/db_monitor_define.h
	新文件:   code/sys_nicmonitor/include/db_com/db_monitor_define.h.old
	新文件:   code/sys_nicmonitor/include/db_com/db_monitor_extern.h
	新文件:   code/sys_nicmonitor/include/db_com/db_monitor_global.h
	新文件:   code/sys_nicmonitor/include/db_com/db_monitor_m.h
	新文件:   code/sys_nicmonitor/include/db_com/db_monitor_m.h.old
	新文件:   code/sys_nicmonitor/include/db_com/db_rep_lib_define.h
	新文件:   code/sys_nicmonitor/include/db_com/db_stat_m.h
	新文件:   code/sys_nicmonitor/include/db_com/db_stat_service_interface.h
	新文件:   code/sys_nicmonitor/include/db_com/ds_log.h
	新文件:   code/sys_nicmonitor/include/db_com/dy_commit_m.h
	新文件:   code/sys_nicmonitor/include/db_com/dy_monitor_define.h
	新文件:   code/sys_nicmonitor/include/db_com/dy_monitor_m.h
	新文件:   code/sys_nicmonitor/include/db_com/dy_public_m.h
	新文件:   code/sys_nicmonitor/include/db_com/dy_sample_define_m.h
	新文件:   code/sys_nicmonitor/include/db_com/dy_sample_define_service_interface.h
	新文件:   code/sys_nicmonitor/include/db_com/dy_stat_m.h
	新文件:   code/sys_nicmonitor/include/db_com/dy_stat_service_interface.h
	新文件:   code/sys_nicmonitor/include/db_com/hiredis.h
	新文件:   code/sys_nicmonitor/include/db_com/interpreter_define.h
	新文件:   code/sys_nicmonitor/include/db_com/interpreter_struct.h
	新文件:   code/sys_nicmonitor/include/db_com/lexical_anls.h
	新文件:   code/sys_nicmonitor/include/db_com/public_m.h
	新文件:   code/sys_nicmonitor/include/db_com/query_sample_m.h
	新文件:   code/sys_nicmonitor/include/db_com/query_sample_pi.h
	新文件:   code/sys_nicmonitor/include/db_com/query_sample_pi_m.h
	新文件:   code/sys_nicmonitor/include/db_com/query_sample_service_interface.h
	新文件:   code/sys_nicmonitor/include/db_com/query_sample_service_pi_interface.h
	新文件:   code/sys_nicmonitor/include/db_com/query_stat_m.h
	新文件:   code/sys_nicmonitor/include/db_com/query_stat_service_interface.h
	新文件:   code/sys_nicmonitor/include/db_com/rdb_commit_client.h
	新文件:   code/sys_nicmonitor/include/db_com/rdb_commit_m.h
	新文件:   code/sys_nicmonitor/include/db_com/rdb_define.pb.h
	新文件:   code/sys_nicmonitor/include/db_com/read.h
	新文件:   code/sys_nicmonitor/include/db_com/rtdbkey_defs.h
	新文件:   code/sys_nicmonitor/include/db_com/sample_data_client_base.h
	新文件:   code/sys_nicmonitor/include/db_com/sample_data_m.h
	新文件:   code/sys_nicmonitor/include/db_com/sample_define_m.h
	新文件:   code/sys_nicmonitor/include/db_com/sample_define_service_interface.h
	新文件:   code/sys_nicmonitor/include/db_com/sample_modify_m.h
	新文件:   code/sys_nicmonitor/include/db_com/sample_modify_service_interface.h
	新文件:   code/sys_nicmonitor/include/db_com/sds.h
	新文件:   code/sys_nicmonitor/include/db_com/server_define.h
	新文件:   code/sys_nicmonitor/include/db_com/sheetdataclient.h
	新文件:   code/sys_nicmonitor/include/db_com/sheetdataclient.h0604
	新文件:   code/sys_nicmonitor/include/db_com/sql_sp_client_base.h
	新文件:   code/sys_nicmonitor/include/db_com/sql_sp_define.h
	新文件:   code/sys_nicmonitor/include/db_com/sql_sp_m.h
	新文件:   code/sys_nicmonitor/include/db_com/sql_sp_send_client_base.h
	新文件:   code/sys_nicmonitor/include/db_com/sql_syntax_anls.h
	新文件:   code/sys_nicmonitor/include/db_com/sql_to_cime.h
	新文件:   code/sys_nicmonitor/include/db_com/sqlite_access.h
	新文件:   code/sys_nicmonitor/include/db_com/sqlite_server_client.h
	新文件:   code/sys_nicmonitor/include/db_com/sqlite_srv_m.h
	新文件:   code/sys_nicmonitor/include/db_com/store_access_client.h
	新文件:   code/sys_nicmonitor/include/db_com/trigger_sample_m.h
	新文件:   code/sys_nicmonitor/include/db_com/trigger_sample_service_interface.h
	新文件:   code/sys_nicmonitor/include/db_com/wholepubtools.h
	新文件:   code/sys_nicmonitor/include/db_com/wholesampledata.h
	新文件:   code/sys_nicmonitor/include/db_com/wholesqlsp.h
	新文件:   code/sys_nicmonitor/include/log_api.h
	新文件:   code/sys_nicmonitor/include/log_define.h
	新文件:   code/sys_nicmonitor/include/logclient.h
	新文件:   code/sys_nicmonitor/include/port_def.h
	新文件:   code/sys_nicmonitor/include/proc_common.h
	新文件:   code/sys_nicmonitor/include/scn_common.h
	新文件:   code/sys_nicmonitor/include/sysadm/proc_define.h
	新文件:   code/sys_nicmonitor/include/sysadm/scn_define.h
	新文件:   code/sys_nicmonitor/include/system.h
	修改:     code/sys_nicmonitor/mnic.c
	修改:     code/sys_nicmonitor/nicinfo_shm.c
	修改:     code/sys_nicmonitor/test.c
	修改:     code/sys_nicmonitor/version.h
	新文件:   code/test/test_nic
	新文件:   code/test/test_nic.cpp
	新文件:   packages/sys_nicmonitor-2.0-linx90-aarch64-bin-d5000.tar.gz
	新文件:   packages/sys_nicmonitor-2.0-linx90-aarch64-bin-nusp.tar.gz
	新文件:   packages/sys_nicmonitor-2.0-linx90-x86_64-bin-d5000.tar.gz
	新文件:   packages/sys_nicmonitor-2.0-linx90-x86_64-bin-nusp.tar.gz
	重命名:   sys_nicmonitor-arm-bin.tar.gz -> packages/sys_nicmonitor-arm-bin.tar.gz
	重命名:   sys_nicmonitor-arm.tar.gz -> packages/sys_nicmonitor-arm.tar.gz
	新文件:   packages/sys_nicmonitor-mips64-bin.tar.gz
	新文件:   packages/sys_nicmonitor-mips64.tar.gz

Signed-off-by: Wei, Jing <jwei@linx-info.com>
2020-10-22 19:15:38 +08:00

1095 lines
51 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
//********************************************************************************
//
// AUTHOR : ZhangKeHeng
//
// FUNCTION : 商用库访问类定义
//
// TIME : 2003.05.17
//
// HISTORY :
// Datetime Action Author Reason
// ------------------------------------------------------------------------------
// 2003.05.17 Creation ZhangKeHeng
// 2003.09.01 Modify ZhangKeHeng AppKeyId AppId支持
// 2003.11.26 Modify ZhangKeHeng ORACLE LOB(Large OBject)支持
// 2003.12.06 Modify ZhangKeHeng SYBASE LOB(TEXT/IMAGE) 支持
// 2003.12.07 Modify ZhangKeHeng UNSIGNED CHAR -1支持
// time : 2011.01.13 ChenPeng 增加绑定变量接口相关结构
//********************************************************************************
#ifndef _DB_ACCESS_H
#define _DB_ACCESS_H
#ifdef __WINDOWS64
#ifdef DBACCESS_EXPORTS
#define DBACCESS_API __declspec(dllexport)
#else
#define DBACCESS_API __declspec(dllimport)
#endif
#else
#define DBACCESS_API
#endif
#include <iostream>
#include <vector>
#include <map>
#include <string>
#include <numeric>
#include <functional>
#include <algorithm>
#include <time.h>
#include <oci.h>
#ifdef _APP_SYS_SUBSTATION
#include "db_com/sqlite_server_client.h"
#endif
#ifdef _WIN64 // Windows compatible version
#define strcasecmp _stricmp
#endif
#define DB_SUCCESS 0
#define DB_FAIL -1
#define DB_NO_DATA 100
#define DB_AUTO_LOGOFF 0
#define DB_MANUAL_LOGOFF 1
#define DB_STATUS_CONNECT 0
#define DB_STATUS_DISCONNECT 1
#define GET_ALL_RESULT -1
#define LOGIN_DEFAULT_MODE 0
#define LOGIN_THREADED_MODE 1
//统一C数据类型
#define DB_DATATYPE_STRING 1
#define DB_DATATYPE_UCHAR 2
#define DB_DATATYPE_SHORT 3
#define DB_DATATYPE_INT 4
#define DB_DATATYPE_DATETIME 5
#define DB_DATATYPE_FLOAT 6
#define DB_DATATYPE_DOUBLE 7
#define DB_DATATYPE_KEYID 8
#define DB_DATATYPE_BINARY 9
#define DB_DATATYPE_TEXT 10
#define DB_DATATYPE_IMAGE 11
#define DB_DATATYPE_APPKEYID 12
#define DB_DATATYPE_APPID 13
#define DB_DATATYPE_LONG 15
#define MAX_COL_NUMBER 1024
#define MAX_LOB_NUMBER 1024
#define MAX_COLNAME_LENGTH 255
#define MAX_PROCNAME_LENGTH 255
#define MAX_SQL_LENGTH 10240
#define QUERY_RECORD_BUF 102400 // 记录集预分配内存100K
#ifdef _ALPHA
#define READ_BUFSIZE 204800 //
#endif
#ifdef _IBM
#define READ_BUFSIZE 204800 //
#endif
#ifdef _SUN
#define READ_BUFSIZE 102400 //
#endif
#ifdef _HPUX
#define READ_BUFSIZE 204800 //
#endif
#ifdef _LINUX
#define READ_BUFSIZE 204800 //
#endif
struct DBACCESS_API TResultHead
{
int field_num;
int field_size;
int data_num;
int data_size;
int record_length;
int reach_max;
};
#ifndef _APP_SYS_SUBSTATION
struct DBACCESS_API TFieldInfo
{
short field_type;
short field_length;
char col_name[256];
};
#else
struct DBACCESS_API TFieldInfo
{
short field_type;
short field_length;
};
#endif
// Define the KeyID_Type's Description
struct DBACCESS_API TKeyidType
{
int record_id;
short column_id;
};
// Define the AppKeyID_Type's Description
//struct DBACCESS_API TAppKeyidType
//{
// int app_id;
// int record_id;
// short column_id;
//};
struct DBACCESS_API TAppKeyidType
{
long key_id;
int app_id;
};
// Define the AppID_Type's Description
struct DBACCESS_API TAppidType
{
int app_id;
int record_id;
};
#ifndef _APP_SYS_SUBSTATION
union DBACCESS_API UColumnVal
{
unsigned char unsigned_value;
short short_value;
int int_value;
float float_value;
double double_value;
OCIDate date_value;
unsigned char bin_value[10240];
char string_value[10240];
UColumnVal()
{
memset(this,0,sizeof(UColumnVal));
}
};
#endif
struct DBACCESS_API TFieldAttr {
//char *colName;
char colName[256];
unsigned int colNameLen;
unsigned short field_type;
unsigned int field_len;
unsigned char field_precision;
signed char field_scale;
TFieldAttr()
{
memset(this,0,sizeof(TFieldAttr));
}
};
using namespace std;
//错误信息结构
struct DBACCESS_API TErrorMsg
{
int err_no; //DBAccess错误号
int ora_errno; //数据库错误号
string dbaccess_err; //DBAccess错误信息
string db_err; //数据库错误信息
};
struct TDCIBindParaStru
{
unsigned short dci_type; // 绑定变量数据类型 具体数值参见dci.h中SQLT开头的一系列宏定义
unsigned int data_size; // 绑定变量数据长度
};
typedef vector<TDCIBindParaStru> SEQDCIBindParaStru;
//LOB使用的ResultHead
struct DBACCESS_API TLOBResultHead
{
int field_num;
int field_size;
int data_num;
int data_size;
vector<int> record_length_vec; //如果data_num==0则record_length_vec不可用
int reach_max;
};
//LOB使用的FieldInfo
struct DBACCESS_API TLOBFieldInfo
{
short field_type;
vector<int> field_length_vec; //field_length_vec.size等于TLOBResultHead中的data_num
//如果data_num == 0, 则field_length_vec.size = 1
};
//LOB内容结构
struct DBACCESS_API TLOBContent
{
unsigned char *lob_content;
int lob_content_size;
};
//UserSpecTypeMap first元素为指定域号
// second元素为用户指定数据类型,其取值为统一C数据类型
typedef map<int,int> UserSpecTypeMap;
#ifndef _APP_SYS_SUBSTATION
class DBACCESS_API CDbAccess
{
public:
//构造函数auto_logoff == true 或无参数时不需要显示调用Logoff会在析构函数中调用
//反之程序需要显示调用Logoff注销数据库登录否则连接没有释放
CDbAccess(bool auto_logoff = true);
//析构函数
~CDbAccess();
private:
OCIEnv *m_pEnvhp;
OCIError *m_pErrhp;
OCISvcCtx *m_pSvchp;
OCILobLocator *m_pLob;
//OCIStmt *m_pStmhp1;
//OCIStmt *m_pStmhp2;
private:
int PrintError(OCIError *errhp, sword status, string &err_string, int &ora_errno);
int InitHandles(ub4 mode,vector<TErrorMsg> &err_vec);
int InitOneStatement(OCIStmt **stmhp,vector<TErrorMsg> &err_vec);
int FreeOneStatement(OCIStmt *stmhp,vector<TErrorMsg> &err_vec);
int PrepareOneSentence(OCIStmt *stmhp,text *sql_sen,vector<TErrorMsg> &err_vec);
int ExecuteOneSelectSentence(OCIStmt *stmhp,vector<TErrorMsg> &err_vec);
int ExecuteOneModifySentence(OCIStmt *stmhp,ub4 commit_flag,int step,vector<TErrorMsg> &err_vec);
int ExecuteOneModifySentence(OCIStmt *stmhp,ub4 commit_flag,int step,vector<TErrorMsg> &err_vec,int &affect_record_num);
int ExecuteSentenceOnlyDiscribe(OCIStmt *stmhp,vector<TErrorMsg> &err_vec);
int FetchNextRow(OCIStmt *stmhp,int step,vector<TErrorMsg> &err_vec);
int CancelFetch(OCIStmt *stmhp,vector<TErrorMsg> &err_vec);
int GetFetchRowNum(OCIStmt *stmhp,int *stmrow,vector<TErrorMsg> &err_vec);
int DefineArrayOfStruct(OCIDefine *defhp,int recorderlen,int num_cols,vector<TErrorMsg> &err_vec);
int BindArrayOfStruct(OCIBind *defhp ,int recorderlen,int num_cols,vector<TErrorMsg> &err_vec);
int GetSelectColNum(OCIStmt *stmhp,int *col_num,vector<TErrorMsg> &err_vec);
int GetSingleColInfo(OCIStmt *stmhp,ub4 pos,TFieldAttr &field_attr,vector<TErrorMsg> &err_vec);
int BindByPosition(OCIStmt *stmhp,OCIBind **bind_pp,ub4 position,dvoid *value_p,sb4 value_size,ub2 data_type,dvoid *indicator_p,vector<TErrorMsg> &err_vec);
int BindByName(OCIStmt *stmhp,OCIBind **bind_pp,OraText *placeholder,dvoid *value_p,sb4 value_size,ub2 data_type,dvoid *indicator_p,vector<TErrorMsg> &err_vec);
int DefineByPosition(OCIStmt *stmhp,OCIDefine **define_pp,ub4 position,dvoid *value_p,sb4 value_size,ub2 data_type,dvoid *indicator_p,vector<TErrorMsg> &err_vec);
int CheckAndRestorePackageStatus(char *pck_name,vector<TErrorMsg> &err_vec);
// int ConvertSQLDateToTimet(char* date_ptr,time_t *osdate);
// int ConvertOCIDateToTimet(OCIDate odate,time_t *osdate);
// int ConvertTimetToOCIDate(time_t OsDate,OCIDate *OciDate);
string ConvertSQLDateToString(char* date_ptr);
private:
int m_Status;
int m_LoginMode;
int m_LogoffFlag;
private:
TKeyidType* ConvertKeyidToStruct(char *keyid);
TAppKeyidType* ConvertAppKeyidToStruct(char *keyid);
TAppidType* ConvertAppidToStruct(char *keyid);
// char* ConvertStructToKeyid(TKeyidType* keyid_type);
public:
/*---------------------------------------------------------------------------------
- 功能描述: 数据库注册
- 输 入: user_name: 用户名称
passwd: 口令
server: 服务名
mode: 模式 LOGIN_DEFAULT_MODE 普通模式
LOGIN_THREADED_MODE 多线程模式
- 输 出: err_vec: 错误返回结构Vector
- 返 回: DB_SUCCESS: 成功
DB_FAIL: 失败
----------------------------------------------------------------------------------*/
int Login( char *user_name,
char *passwd,
char *server,
unsigned int mode,
vector<TErrorMsg> &err_vec
);
/*---------------------------------------------------------------------------------
- 功能描述: 数据库注销
- 输 入: 无
- 输 出: err_vec: 错误返回结构Vector
- 返 回: DB_SUCCESS: 成功
DB_FAIL: 失败
----------------------------------------------------------------------------------*/
int Logoff(vector<TErrorMsg> &err_vec);
/*---------------------------------------------------------------------------------
- 功能描述: 取连接状态
- 输 入: 无
- 输 出: 无
- 返 回: DB_STATUS_CONNECT 保持连接
DB_STATUS_DISCONNECT 失去连接
----------------------------------------------------------------------------------*/
int GetConnectStatus();
/*---------------------------------------------------------------------------------
- 功能描述: 设置连接状态
- 输 入: status 设置连接状态
- 输 出: 无
- 返 回: DB_SUCCESS 成功
----------------------------------------------------------------------------------*/
int SetConnectStatus(int status);
/*---------------------------------------------------------------------------------
- 功能描述: 开始事务
- 输 入: 无
- 输 出: err_vec: 错误返回结构Vector
- 返 回: DB_SUCCESS: 成功
DB_FAIL: 失败
----------------------------------------------------------------------------------*/
int BeginTransaction(vector<TErrorMsg> &err_vec);
/*---------------------------------------------------------------------------------
- 功能描述: 提交事务
- 输 入: 无
- 输 出: err_vec: 错误返回结构Vector
- 返 回: DB_SUCCESS: 成功
DB_FAIL: 失败
----------------------------------------------------------------------------------*/
int CommitTransaction(vector<TErrorMsg> &err_vec);
/*---------------------------------------------------------------------------------
- 功能描述: 回滚事务
- 输 入: 无
- 输 出: err_vec: 错误返回结构Vector
- 返 回: DB_SUCCESS: 成功
DB_FAIL: 失败
----------------------------------------------------------------------------------*/
int RollbackTransaction(vector<TErrorMsg> &err_vec);
/*---------------------------------------------------------------------------------
- 功能描述: 执行SQL命令并提交
- 输 入: cmd_string: SQL命令
- 输 出: err_vec: 错误返回结构Vector
- 返 回: DB_SUCCESS: 成功
DB_FAIL: 失败
----------------------------------------------------------------------------------*/
int ExecuteCommandWithCommit(char *cmd_string,
vector<TErrorMsg> &err_vec
);
int ExecuteCommandWithCommit(char *cmd_string,
int &affected_record_num,
vector<TErrorMsg> &err_vec);
/*---------------------------------------------------------------------------------
- 功能描述: 利用绑定变量方式执行SQL命令并提交
- 输入参数 sql_str 需要提交SQL语句
- 输出参数 out_db_error 错误信息
- 输入参数 rep_flag 是否复制
- 返回值 TRUE 执行成功
- FALSE 执行失败
----------------------------------------------------------------------------------*/
int BindExecuteCommandWithCommit(char *cmd_string, SEQDCIBindParaStru &seq_bind_para, void * data_buffer,
unsigned short * null_flag_buffer, unsigned int row_num,
vector<TErrorMsg> &err_vec);
// int ExecuteCommandWithCommitEx(char *cmd_string,
// vector<TErrorMsg> &err_vec
// );
/*---------------------------------------------------------------------------------
- 功能描述: 执行SQL命令不提交
- 输 入: cmd_string: SQL命令
- 输 出: err_vec: 错误返回结构Vector
- 返 回: DB_SUCCESS: 成功
DB_FAIL: 失败
----------------------------------------------------------------------------------*/
int ExecuteCommandWithoutCommit(char *cmd_string,
vector<TErrorMsg> &err_vec
);
/*---------------------------------------------------------------------------------
- 功能描述: 取SQL查询返回结果集(不包含LOB类型数据)
- 输 入: query_string: SQL查询命令
max_result: 结果集最大行数GET_ALL_RESULT表示取所有行
user_type_map: 用户指定返回数据类型MAP类型
- 输 出: result_link: 结果集指针
result_indicator 是否为空指针
err_vec: 错误返回结构Vector
- 返 回: DB_SUCCESS: 成功
DB_FAIL: 失败
----------------------------------------------------------------------------------*/
int GetQueryResult( char *query_string,
int max_result,
UserSpecTypeMap user_type_map,
char *&result_link,
signed short *&result_indicator,
vector<TErrorMsg> &err_vec
);
/*---------------------------------------------------------------------------------
- 功能描述: 取结果集的HEADFIELDDATA指针
- 输 入: result_link: 结果集指针
- 输 出: result_head_ptr: HEAD指针
field_info_ptr: FIELD指针
data_ptr: DATA指针
err_vec: 错误返回结构Vector
- 返 回: DB_SUCCESS: 成功
DB_FAIL: 失败
----------------------------------------------------------------------------------*/
int GetQueryHead( char *result_link,
TResultHead *&result_head_ptr,
TFieldInfo *&field_info_ptr,
char *&data_ptr,
vector<TErrorMsg> &err_vec);
/*---------------------------------------------------------------------------------
- 功能描述: 取存储过程查询返回结果集
- 输 入: pck_name: 包名称(SYBASE该参数为NULL)
proc_name 存储过程名称
parm_vec: 存储过程参数Vector(1~n个)对于ORACLE返回游标参数无需指定
参数以vector<string>形式传入即不论类型全部为string
日期型参数以YYYY-MM-DD HH:MM:SS形式传入
max_result: 结果集最大行数GET_ALL_RESULT表示取所有行
user_type_map: 用户指定返回数据类型MAP类型
- 输 出: result_link: 结果集指针
result_indicator 是否为空指针
err_vec: 错误返回结构Vector
- 返 回: DB_SUCCESS: 成功
DB_FAIL: 失败
----------------------------------------------------------------------------------*/
int GetProcedureResult( char *pck_name,
char *proc_name,
vector<string> parm_vec,
int max_result,
UserSpecTypeMap user_type_map,
char *&result_link,
signed short *&result_indicator,
vector<TErrorMsg> &err_vec
);
/*---------------------------------------------------------------------------------
- 功能描述: 执行存储过程(无返回结果集)
- 输 入: pck_name: 包名称(SYBASE该参数为NULL)
proc_name 存储过程名称
parm_vec: 存储过程参数Vector(1~n个)对于ORACLE返回游标参数无需指定
参数以vector<string>形式传入即不论类型全部为string
日期型参数以YYYY-MM-DD HH:MM:SS形式传入
- 输 出: err_vec: 错误返回结构Vector
- 返 回: DB_SUCCESS: 成功
DB_FAIL: 失败
----------------------------------------------------------------------------------*/
int ExecuteProcedure ( char *pck_name,
char *proc_name,
vector<string> parm_vec,
vector<TErrorMsg> &err_vec
);
/*---------------------------------------------------------------------------------
- 功能描述: 返回执行存储过程无返回结果集的实际PLSQL语句
需配合ExecuteProcedure执行只有ExecuteProcedure执行成功后调用该函数才有意义
- 输 入: pck_name: 包名称(SYBASE该参数为NULL)
proc_name 存储过程名称
parm_vec: 存储过程参数Vector(1~n个)对于ORACLE返回游标参数无需指定
参数以vector<string>形式传入即不论类型全部为string
日期型参数以YYYY-MM-DD HH:MM:SS形式传入
- 输 出: err_vec: 错误返回结构Vector
- 返 回: SQL语句: 由pck_name、proc_name、parm_vec构造SQL语句
"" : 返回为""表示错误
----------------------------------------------------------------------------------*/
string GetProcedureSQL ( char *pck_name,
char *proc_name,
vector<string> parm_vec,
vector<TErrorMsg> &err_vec
);
/*---------------------------------------------------------------------------------
- 功能描述: 判断指定的表(table)是否存在
- 输 入: table_name: 表名称
- 返 回: ture: 表存在
false: 表不存在
----------------------------------------------------------------------------------*/
bool TableExist ( char *table_name );
/*---------------------------------------------------------------------------------
- 功能描述: 将传入字符串转换为大写
- 输 入: str: 传入字符串
- 输 出: str: 传出字符串(大写)
- 返 回: 无
----------------------------------------------------------------------------------*/
void UpperString (char * & str);
/*================================================================================*/
/* */
/* LOB(Large OBject)支持 */
/* */
/* 例子中所使用表为MY_TEST_LOB */
/* 【ORACLE】DDL语句为 */
/* CREATE TABLE MY_TEST_LOB( */
/* ID NUMBER(10) NOT NULL, */
/* CLOB_CONTENT CLOB, */
/* BLOB_CONTENT BLOB, */
/* NAME VARCHAR2(32), */
/* KEYID_V CHAR(14), */
/* APPKEYID_V CHAR(24), */
/* APPID_V CHAR(20), */
/* DATE_V DATE, */
/* FLOAT_V NUMBER(22, 6), */
/* CONSTRAINT PK_TEST_LOB PRIMARY KEY(ID)) */
/* */
/* 【SYBASE】DDL语句为 */
/* CREATE TABLE MY_LOB_TEST( */
/* ID INT, */
/* CLOB_CONTENT TEXT NULL, */
/* BLOB_CONTENT IMAGE NULL, */
/* NAME VARCHAR(32) NULL, */
/* KEYID_V CHAR(14) NULL, */
/* APPKEYID_V CHAR(24) NULL, */
/* APPID_V CHAR(20) NULL, */
/* DATE_V DATETIME NULL, */
/* FLOAT_V REAL NULL, */
/* CONSTRAINT PK_TEST_LOB PRIMARY KEY(ID)) */
/* */
/* */
/*================================================================================*/
/*---------------------------------------------------------------------------------
- 功能描述: 执行包含LOB数据的INSERT命令并提交
- 输 入: insert_string: INSERT(LOB)命令
select_string: 附加的SELECT FOR UPDATE(只需要写LOB域)命令
lob_vec: LOB域的Vector
- 输 出: err_vec: 错误返回结构Vector
- 返 回: DB_SUCCESS: 成功
DB_FAIL: 失败
- 说 明:
1、insert_string参数举例
【ORACLE】"insert into my_test_lob(id,clob_content,blob_content)
values(1,empty_clob(),empty_blob())"
【SYBASE】"insert into my_test_lob(id,clob_content,blob_content)
values(1,'','')"
如果需要在select语句中更新LOB域注意不要在Insert语句中将LOB域置为空NULL
对于ORACLE使用empty_clob()、empty_blob()插入EMPTY
对于SYBASE使用''插入EMPTY
2、select_string参数举例
【ORACLE】"select clob_content,blob_content from my_test_lob where id = 1 for update"
【SYBASE】"select clob_content,blob_content from my_test_lob where id = 1"
注意若where子句不对应insert语句中的主键则更新结果不可预见
对于ORACLE “for update”关键词是必须的
3、lob_vec包含LOB实际数据lob_vec.size()必须与select_string中LOB域的个数一致
----------------------------------------------------------------------------------*/
int ExecuteInsertCommandWithLOB( const char *insert_string,
const char *select_string,
const vector<TLOBContent> &lob_vec,
vector<TErrorMsg> &err_vec
);
/*---------------------------------------------------------------------------------
- 功能描述: 执行包含LOB数据的UPDATE命令并提交
- 输 入: update_string: UPDATE(LOB)命令
select_string: 附加的SELECT FOR UPDATE(只需要写LOB域)命令
lob_vec: LOB域的Vector
- 输 出: err_vec: 错误返回结构Vector
- 返 回: DB_SUCCESS: 成功
DB_FAIL: 失败
- 说 明:
1、update_string参数举例
【ORACLE】"update my_test_lob set blob_content = empty_blob() where id = 1"
【SYBASE】"update my_test_lob set blob_content = '' where id = 1"
如果需要在select语句中更新LOB域注意不要在Update语句中将LOB域置为空NULL
对于ORACLE使用empty_clob()、empty_blob()插入EMPTY
对于SYBASE使用''插入EMPTY
2、select_string参数举例
【ORACLE】"select clob_content,blob_content from my_test_lob where id = 1 for update"
【SYBASE】"select clob_content,blob_content from my_test_lob where id = 1"
注意若where子句不对应update语句中的主键则更新结果不可预见
2、lob_vec包含LOB实际数据lob_vec.size()必须与select_string中LOB域的个数一致
----------------------------------------------------------------------------------*/
int ExecuteUpdateCommandWithLOB( const char *update_string,
const char *select_string,
const vector<TLOBContent> &lob_vec,
vector<TErrorMsg> &err_vec
);
/*---------------------------------------------------------------------------------
- 功能描述: 取SQL查询返回结果集(包含LOB类型数据)
- 输 入: query_string: SQL查询命令
max_result: 结果集最大行数GET_ALL_RESULT表示取所有行
user_type_map: 用户指定返回数据类型MAP类型
注意LOB域无法指定数据类型
- 输 出: result_link: 结果集指针
result_indicator 是否为空指针
err_vec: 错误返回结构Vector
- 返 回: DB_SUCCESS: 成功
DB_FAIL: 失败
- 说 明:
1、由于SYBASE数据库要求检索的LOB域都必须放在BIND域普通域的后面
因此统一要求query_string中的所有LOB域都在普通域之后
----------------------------------------------------------------------------------*/
int GetQueryResultWithLOB( const char *query_string,
int max_result,
UserSpecTypeMap user_type_map,
char *&result_link,
signed short *&result_indicator,
TLOBResultHead *&result_head_ptr,
TLOBFieldInfo *&field_info_ptr,
vector<TErrorMsg> &err_vec
);
/*---------------------------------------------------------------------------------
- 功能描述: 取结果集的HEADFIELDDATA指针(包含LOB类型数据)
- 输 入: result_link: 结果集指针
- 输 出: result_head_ptr: HEAD指针对应TLOBResultHead结构
field_info_ptr: FIELD指针对应TLOBFieldInfo结构
data_ptr: DATA指针
err_vec: 错误返回结构Vector
- 返 回: DB_SUCCESS: 成功
DB_FAIL: 失败
----------------------------------------------------------------------------------*/
int GetQueryHeadWithLOB( char *result_link,
TLOBResultHead *&result_head_ptr,
TLOBFieldInfo *&field_info_ptr,
char *&data_ptr,
vector<TErrorMsg> &err_vec);
/*---------------------------------------------------------------------------------
- 功能描述: 取SQL查询返回结果集(不包含LOB类型数据)形成指定ASCII文件
- 输 入: query_string: SQL查询命令
file_name: 输出文件名称(含绝对路径)
- 输 出: err_vec: 错误返回结构Vector
- 返 回: DB_SUCCESS: 成功
DB_FAIL: 失败
----------------------------------------------------------------------------------*/
int GetQueryResultToFile(const char *query_string,
const char *file_name,
vector<TErrorMsg> &err_vec
);
};
#else
class DBACCESS_API CDbAccess
{
public:
//构造函数auto_logoff == true 或无参数时不需要显示调用Logoff会在析构函数中调用
//反之程序需要显示调用Logoff注销数据库登录否则连接没有释放
//需指定文件库的路径 如:/home/d5000/kf/sqlite-autoconf-3070900/test.db
CDbAccess(bool auto_logoff = true);
//析构函数
~CDbAccess();
//为复制功能提供设置主机名的接口
int SetHostName(char* host_name);
private:
int m_Status;
int m_LoginMode;
int m_LogoffFlag;
private:
SqliteServerClient *m_sqlite_server_client;
private:
TKeyidType* ConvertKeyidToStruct(char *keyid);
TAppKeyidType* ConvertAppKeyidToStruct(char *keyid);
TAppidType* ConvertAppidToStruct(char *keyid);
// int ConvertSQLDateToTimet(char* date_ptr,time_t *osdate);
public:
/*---------------------------------------------------------------------------------
- 功能描述: 数据库注册
- 输 入: user_name: 用户名称
passwd: 口令
server: 服务名
mode: 模式 LOGIN_DEFAULT_MODE 普通模式
LOGIN_THREADED_MODE 多线程模式
- 输 出: err_vec: 错误返回结构Vector
- 返 回: DB_SUCCESS: 成功
DB_FAIL: 失败
----------------------------------------------------------------------------------*/
int Login( char *user_name,
char *passwd,
char *server,
unsigned int mode,
vector<TErrorMsg> &err_vec
);
/*---------------------------------------------------------------------------------
- 功能描述: 数据库注册
- 输 入: user_name: 用户名称
passwd: 口令
server: 服务名
mode: 模式 LOGIN_DEFAULT_MODE 普通模式
LOGIN_THREADED_MODE 多线程模式
host_name: 主机名
- 输 出: err_vec: 错误返回结构Vector
- 返 回: DB_SUCCESS: 成功
DB_FAIL: 失败
----------------------------------------------------------------------------------*/
int Login( char *user_name,
char *passwd,
char *server,
unsigned int mode,
char * host_name,
vector<TErrorMsg> &err_vec
);
/*---------------------------------------------------------------------------------
- 功能描述: 数据库注销
- 输 入: 无
- 输 出: err_vec: 错误返回结构Vector
- 返 回: DB_SUCCESS: 成功
DB_FAIL: 失败
----------------------------------------------------------------------------------*/
int Logoff(vector<TErrorMsg> &err_vec);
/*---------------------------------------------------------------------------------
- 功能描述: 取连接状态
- 输 入: 无
- 输 出: 无
- 返 回: DB_STATUS_CONNECT 保持连接
DB_STATUS_DISCONNECT 失去连接
----------------------------------------------------------------------------------*/
int GetConnectStatus();
/*---------------------------------------------------------------------------------
- 功能描述: 设置连接状态
- 输 入: status 设置连接状态
- 输 出: 无
- 返 回: DB_SUCCESS 成功
----------------------------------------------------------------------------------*/
int SetConnectStatus(int status);
/*---------------------------------------------------------------------------------
- 功能描述: 开始事务
- 输 入: 无
- 输 出: err_vec: 错误返回结构Vector
- 返 回: DB_SUCCESS: 成功
DB_FAIL: 失败
----------------------------------------------------------------------------------*/
int BeginTransaction(vector<TErrorMsg> &err_vec);
/*---------------------------------------------------------------------------------
- 功能描述: 提交事务
- 输 入: 无
- 输 出: err_vec: 错误返回结构Vector
- 返 回: DB_SUCCESS: 成功
DB_FAIL: 失败
----------------------------------------------------------------------------------*/
int CommitTransaction(vector<TErrorMsg> &err_vec);
/*---------------------------------------------------------------------------------
- 功能描述: 回滚事务
- 输 入: 无
- 输 出: err_vec: 错误返回结构Vector
- 返 回: DB_SUCCESS: 成功
DB_FAIL: 失败
----------------------------------------------------------------------------------*/
int RollbackTransaction(vector<TErrorMsg> &err_vec);
/*---------------------------------------------------------------------------------
- 功能描述: 取SQL查询返回结果集(不包含LOB类型数据)
- 输 入: query_string: SQL查询命令
max_result: 结果集最大行数GET_ALL_RESULT表示取所有行
user_type_map: 用户指定返回数据类型MAP类型
- 输 出: result_link: 结果集指针
result_indicator 是否为空指针
err_vec: 错误返回结构Vector
- 返 回: DB_SUCCESS: 成功
DB_FAIL: 失败
----------------------------------------------------------------------------------*/
int GetQueryResult(char *query_string,
int max_result,
UserSpecTypeMap user_type_map,
char *&result_link,
signed short *&result_indicator,
vector<TErrorMsg> &err_vec
);
/*---------------------------------------------------------------------------------
- 功能描述: 取结果集的HEADFIELDDATA指针
- 输 入: result_link: 结果集指针
- 输 出: result_head_ptr: HEAD指针
field_info_ptr: FIELD指针
data_ptr: DATA指针
err_vec: 错误返回结构Vector
- 返 回: DB_SUCCESS: 成功
DB_FAIL: 失败
----------------------------------------------------------------------------------*/
int GetQueryHead(char *result_link,
TResultHead *&result_head_ptr,
TFieldInfo *&field_info_ptr,
char *&data_ptr,
vector<TErrorMsg> &err_vec);
/*---------------------------------------------------------------------------------
- 功能描述: 执行SQL命令并提交
- 输 入: cmd_string: SQL命令
- 输 出: err_vec: 错误返回结构Vector
- 返 回: DB_SUCCESS: 成功
DB_FAIL: 失败
----------------------------------------------------------------------------------*/
int ExecuteCommandWithCommit(char *cmd_string, vector<TErrorMsg> &err_vec);
/*---------------------------------------------------------------------------------
- 功能描述: 利用绑定变量方式执行SQL命令并提交
- 输入参数 sql_str 需要提交SQL语句
- 输出参数 out_db_error 错误信息
- 输入参数 rep_flag 是否复制
- 返回值 TRUE 执行成功
- FALSE 执行失败
----------------------------------------------------------------------------------*/
int BindExecuteCommandWithCommit(char *cmd_string, SEQDCIBindParaStru &seq_bind_para, void *data_buffer,
unsigned short * null_flag_buffer, unsigned int row_num,
vector<TErrorMsg> &err_vec);
/*---------------------------------------------------------------------------------
- 功能描述: 执行SQL命令不提交
- 输 入: cmd_string: SQL命令
- 输 出: err_vec: 错误返回结构Vector
- 返 回: DB_SUCCESS: 成功
DB_FAIL: 失败
----------------------------------------------------------------------------------*/
int ExecuteCommandWithoutCommit(char *cmd_string,
vector<TErrorMsg> &err_vec
);
/*---------------------------------------------------------------------------------
- 功能描述: 取存储过程查询返回结果集
- 输 入: pck_name: 包名称(SYBASE该参数为NULL)
proc_name 存储过程名称
parm_vec: 存储过程参数Vector(1~n个)对于ORACLE返回游标参数无需指定
参数以vector<string>形式传入即不论类型全部为string
日期型参数以YYYY-MM-DD HH:MM:SS形式传入
max_result: 结果集最大行数GET_ALL_RESULT表示取所有行
user_type_map: 用户指定返回数据类型MAP类型
- 输 出: result_link: 结果集指针
result_indicator 是否为空指针
err_vec: 错误返回结构Vector
- 返 回: DB_SUCCESS: 成功
DB_FAIL: 失败
----------------------------------------------------------------------------------*/
int GetProcedureResult( char *pck_name,
char *proc_name,
vector<string> parm_vec,
int max_result,
UserSpecTypeMap user_type_map,
char *&result_link,
signed short *&result_indicator,
vector<TErrorMsg> &err_vec
);
/*---------------------------------------------------------------------------------
- 功能描述: 执行存储过程(无返回结果集)
- 输 入: pck_name: 包名称(SYBASE该参数为NULL)
proc_name 存储过程名称
parm_vec: 存储过程参数Vector(1~n个)对于ORACLE返回游标参数无需指定
参数以vector<string>形式传入即不论类型全部为string
日期型参数以YYYY-MM-DD HH:MM:SS形式传入
- 输 出: err_vec: 错误返回结构Vector
- 返 回: DB_SUCCESS: 成功
DB_FAIL: 失败
----------------------------------------------------------------------------------*/
int ExecuteProcedure ( char *pck_name,
char *proc_name,
vector<string> parm_vec,
vector<TErrorMsg> &err_vec
);
/*---------------------------------------------------------------------------------
- 功能描述: 返回执行存储过程无返回结果集的实际PLSQL语句
需配合ExecuteProcedure执行只有ExecuteProcedure执行成功后调用该函数才有意义
- 输 入: pck_name: 包名称(SYBASE该参数为NULL)
proc_name 存储过程名称
parm_vec: 存储过程参数Vector(1~n个)对于ORACLE返回游标参数无需指定
参数以vector<string>形式传入即不论类型全部为string
日期型参数以YYYY-MM-DD HH:MM:SS形式传入
- 输 出: err_vec: 错误返回结构Vector
- 返 回: SQL语句: 由pck_name、proc_name、parm_vec构造SQL语句
"" : 返回为""表示错误
----------------------------------------------------------------------------------*/
string GetProcedureSQL ( char *pck_name,
char *proc_name,
vector<string> parm_vec,
vector<TErrorMsg> &err_vec
);
/*---------------------------------------------------------------------------------
- 功能描述: 判断指定的表(table)是否存在
- 输 入: table_name: 表名称
- 返 回: ture: 表存在
false: 表不存在
----------------------------------------------------------------------------------*/
bool TableExist( char *table_name );
/*---------------------------------------------------------------------------------
- 功能描述: 将传入字符串转换为大写
- 输 入: str: 传入字符串
- 输 出: str: 传出字符串(大写)
- 返 回: 无
----------------------------------------------------------------------------------*/
void UpperString(char * & str);
/*================================================================================*/
/* */
/* LOB(Large OBject)支持 */
/* */
/* 例子中所使用表为MY_TEST_LOB */
/* 【ORACLE】DDL语句为 */
/* CREATE TABLE MY_TEST_LOB( */
/* ID NUMBER(10) NOT NULL, */
/* CLOB_CONTENT CLOB, */
/* BLOB_CONTENT BLOB, */
/* NAME VARCHAR2(32), */
/* KEYID_V CHAR(14), */
/* APPKEYID_V CHAR(24), */
/* APPID_V CHAR(20), */
/* DATE_V DATE, */
/* FLOAT_V NUMBER(22, 6), */
/* CONSTRAINT PK_TEST_LOB PRIMARY KEY(ID)) */
/* */
/* 【SYBASE】DDL语句为 */
/* CREATE TABLE MY_LOB_TEST( */
/* ID INT, */
/* CLOB_CONTENT TEXT NULL, */
/* BLOB_CONTENT IMAGE NULL, */
/* NAME VARCHAR(32) NULL, */
/* KEYID_V CHAR(14) NULL, */
/* APPKEYID_V CHAR(24) NULL, */
/* APPID_V CHAR(20) NULL, */
/* DATE_V DATETIME NULL, */
/* FLOAT_V REAL NULL, */
/* CONSTRAINT PK_TEST_LOB PRIMARY KEY(ID)) */
/* */
/* */
/*================================================================================*/
/*---------------------------------------------------------------------------------
- 功能描述: 执行包含LOB数据的INSERT命令并提交
- 输 入: insert_string: INSERT(LOB)命令
select_string: 附加的SELECT FOR UPDATE(只需要写LOB域)命令
lob_vec: LOB域的Vector
- 输 出: err_vec: 错误返回结构Vector
- 返 回: DB_SUCCESS: 成功
DB_FAIL: 失败
- 说 明:
1、insert_string参数举例
【ORACLE】"insert into my_test_lob(id,clob_content,blob_content)
values(1,empty_clob(),empty_blob())"
【SYBASE】"insert into my_test_lob(id,clob_content,blob_content)
values(1,'','')"
如果需要在select语句中更新LOB域注意不要在Insert语句中将LOB域置为空NULL
对于ORACLE使用empty_clob()、empty_blob()插入EMPTY
对于SYBASE使用''插入EMPTY
2、select_string参数举例
【ORACLE】"select clob_content,blob_content from my_test_lob where id = 1 for update"
【SYBASE】"select clob_content,blob_content from my_test_lob where id = 1"
注意若where子句不对应insert语句中的主键则更新结果不可预见
对于ORACLE “for update”关键词是必须的
3、lob_vec包含LOB实际数据lob_vec.size()必须与select_string中LOB域的个数一致
----------------------------------------------------------------------------------*/
int ExecuteInsertCommandWithLOB( const char *insert_string,
const char *select_string,
const vector<TLOBContent> &lob_vec,
vector<TErrorMsg> &err_vec
);
/*---------------------------------------------------------------------------------
- 功能描述: 执行包含LOB数据的UPDATE命令并提交
- 输 入: update_string: UPDATE(LOB)命令
select_string: 附加的SELECT FOR UPDATE(只需要写LOB域)命令
lob_vec: LOB域的Vector
- 输 出: err_vec: 错误返回结构Vector
- 返 回: DB_SUCCESS: 成功
DB_FAIL: 失败
- 说 明:
1、update_string参数举例
【ORACLE】"update my_test_lob set blob_content = empty_blob() where id = 1"
【SYBASE】"update my_test_lob set blob_content = '' where id = 1"
如果需要在select语句中更新LOB域注意不要在Update语句中将LOB域置为空NULL
对于ORACLE使用empty_clob()、empty_blob()插入EMPTY
对于SYBASE使用''插入EMPTY
2、select_string参数举例
【ORACLE】"select clob_content,blob_content from my_test_lob where id = 1 for update"
【SYBASE】"select clob_content,blob_content from my_test_lob where id = 1"
注意若where子句不对应update语句中的主键则更新结果不可预见
2、lob_vec包含LOB实际数据lob_vec.size()必须与select_string中LOB域的个数一致
----------------------------------------------------------------------------------*/
int ExecuteUpdateCommandWithLOB( const char *update_string,
const char *select_string,
const vector<TLOBContent> &lob_vec,
vector<TErrorMsg> &err_vec
);
/*---------------------------------------------------------------------------------
- 功能描述: 取SQL查询返回结果集(包含LOB类型数据)
- 输 入: query_string: SQL查询命令
max_result: 结果集最大行数GET_ALL_RESULT表示取所有行
user_type_map: 用户指定返回数据类型MAP类型
注意LOB域无法指定数据类型
- 输 出: result_link: 结果集指针
result_indicator 是否为空指针
err_vec: 错误返回结构Vector
- 返 回: DB_SUCCESS: 成功
DB_FAIL: 失败
- 说 明:
1、由于SYBASE数据库要求检索的LOB域都必须放在BIND域普通域的后面
因此统一要求query_string中的所有LOB域都在普通域之后
----------------------------------------------------------------------------------*/
int GetQueryResultWithLOB( const char *query_string,
int max_result,
UserSpecTypeMap user_type_map,
char *&result_link,
signed short *&result_indicator,
TLOBResultHead *&result_head_ptr,
TLOBFieldInfo *&field_info_ptr,
vector<TErrorMsg> &err_vec
);
/*---------------------------------------------------------------------------------
- 功能描述: 取结果集的HEADFIELDDATA指针(包含LOB类型数据)
- 输 入: result_link: 结果集指针
- 输 出: result_head_ptr: HEAD指针对应TLOBResultHead结构
field_info_ptr: FIELD指针对应TLOBFieldInfo结构
data_ptr: DATA指针
err_vec: 错误返回结构Vector
- 返 回: DB_SUCCESS: 成功
DB_FAIL: 失败
----------------------------------------------------------------------------------*/
int GetQueryHeadWithLOB( char *result_link,
TLOBResultHead *&result_head_ptr,
TLOBFieldInfo *&field_info_ptr,
char *&data_ptr,
vector<TErrorMsg> &err_vec);
/*---------------------------------------------------------------------------------
- 功能描述: 取SQL查询返回结果集(不包含LOB类型数据)形成指定ASCII文件
- 输 入: query_string: SQL查询命令
file_name: 输出文件名称(含绝对路径)
- 输 出: err_vec: 错误返回结构Vector
- 返 回: DB_SUCCESS: 成功
DB_FAIL: 失败
----------------------------------------------------------------------------------*/
int GetQueryResultToFile(const char *query_string,
const char *file_name,
vector<TErrorMsg> &err_vec
);
};
#endif
#endif