⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 oratype.cpp

📁 在动态库中实现异步导出大数据量的oracle数据
💻 CPP
字号:
#include "stdafx.h"

#define __OCICPP_INTERNAL_USE_
#include "OraType.h"

/*! \class OCICPP::OraType
  \brief Abstract base class for the types supplied by the oracle server
 */

OCICPP::OraType::OraType(OCIEnv *envhp,OCIError *errhp,OCIParam *paramd,ub2 type,int Rows): 
	definehp(0),env(envhp),err(errhp),null(0),nRows(Rows)
{
	char *tmpColName;
	text *colName;
	ub4 colNameLen;
	internalType=type;
	CHECKERR(errhp,OCIAttrGet((dvoid *) paramd,OCI_DTYPE_PARAM,(dvoid **) &colName,(ub4 *) &colNameLen,(ub4) OCI_ATTR_NAME,errhp));
	tmpColName=(char *)calloc(colNameLen+1,sizeof(char));
	for(unsigned i=0;i<colNameLen;i++) tmpColName[i]=colName[i];
	attrName.assign(tmpColName);
	free(tmpColName);
	setTypeName();
	null=(sb2 *)calloc(nRows,sizeof(sb2));
	DEBUG(DLEV_DEBUG,"AttrName=%s TypeName=%s\n",attrName.c_str(),typeName.c_str());
}

OCICPP::OraType::~OraType()
{
	free(null);
}

void OCICPP::OraType::setTypeName() {
	switch(internalType) {
		case SQLT_CHR:
			typeName.assign("VARCHAR2");
			break;
		case SQLT_NUM:
			typeName.assign("NUMBER");
			break;
		case SQLT_LNG:
			typeName.assign("LONG");
			break;
		case SQLT_RDD:
		case SQLT_RID:
			typeName.assign("ROWID");
			break;
		case SQLT_DAT:
			typeName.assign("DATE");
			break;
		case SQLT_BIN:
			typeName.assign("RAW");
			break;
		case SQLT_LBI:
			typeName.assign("LONG RAW");
			break;
		case SQLT_AFC:
			typeName.assign("CHAR");
			break;
		case SQLT_LAB:
			typeName.assign("MLSLABEL");
			break;
		case SQLT_REF:
			typeName.assign("REF");
			break;
		case SQLT_CLOB:
			typeName.assign("CLOB");
			break;
		case SQLT_BLOB:
			typeName.assign("BLOB");
			break;
		case SQLT_FILE:
			typeName.assign("BFILE");
			break;
		case SQLT_RSET:
			typeName.assign("Nested Table");
			break;
		default:
			typeName.assign("Unknown");
			break;
	}
}

int OCICPP::OraType::getType() const {
	return (int)internalType;
}

unsigned OCICPP::OraType::getSize() const {
	return size;
}

int OCICPP::OraType::getReqType() const {
	return (int)ReqType;
}

void OCICPP::OraType::getTypeName(std::string &tname) const {
	tname.assign(typeName);
}

void OCICPP::OraType::getAttrName(std::string &aname) const {
	aname.assign(attrName);
}

bool OCICPP::OraType::isNull(int row) const {
	return (null[row]==-1)?1:0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -