ocistmt.h
来自「一个通用的oracle OCI开发程序包」· C头文件 代码 · 共 211 行
H
211 行
#ifndef _COCIStatement
#define _COCIStatement
#if defined(_WIN32)
#pragma warning(disable : 4786 4800 4666)
#endif
#ifndef OCI_ORACLE
#include "oci.h"
#endif
#ifndef _CIndStruct
#include "ociind.h"
#endif
#ifndef _STRING_
#include <string>
#endif
#ifndef _VECTOR_
#include <vector>
#endif
class COCISession;
class COCILob;
class COCIRef;
class COCIObject;
class COCIBinary;
class COCINumber;
class COCIDate;
class COCIString;
template<class T>
class COCIVArray;
template<class T>
class COCINestedTable;
class COCIStatement
{
public:
COCIStatement(const COCISession& Sess);
~COCIStatement();
COCIStatement& operator = (char * str);
bool execute(void);
bool fetch(void);
void fix_up_object(void);
void fix_up_ref(void);
void fix_up_coll(void);
void clean_up(void);
ub4 rows_fetched(){return m_RowsFetched;}
// define are read variables
// bind are write variables
// int
void define(int pos, int& valuep, signed short* is_null = false);
void define(int pos, std::vector<int>& valuep);
void bind(int pos, int& valuep);
void bind(char* name, int& valuep);
void bind(int pos, std::vector<int>& valuep);
void bind(char* name, std::vector<int>& valuep);
// long
void define(int pos, long& valuep);
void define(int pos, std::vector<long>& valuep);
void bind(int pos, long& valuep);
void bind(char* name, long& valuep);
void bind(int pos, std::vector<long>& valuep);
void bind(char* name, std::vector<long>& valuep);
// float
void define(int pos, float& valuep);
void define(int pos, std::vector<float>& valuep);
void bind(int pos, float& valuep);
void bind(int pos, std::vector<float>& valuep);
// double
void define(int pos, double& valuep);
void define(int pos, std::vector<double>& valuep);
void bind(int pos, double& valuep);
void bind(int pos, std::vector<double>& valuep);
// long double
void define(int pos, long double& valuep);
void define(int pos, std::vector<long double>& valuep);
void bind(int pos, long double& valuep);
void bind(int pos, std::vector<long double>& valuep);
void define(int pos, char* buf, ub4 len, signed short* is_null = false);
// valuep == (elem_len + 1) * no_of_elem; e.g. for varchar2[10] and array fetch of 5 rows
// create a buffer (10 + 1) * 5 = 55
// i.e. for above example pass
// char buffer[(10+1)*5]; define(1,buffer,10,5);
void define(int pos, char* valuep, ub4 elem_len, ub4 no_of_elem);
void bind(int pos, char* buf, ub4 len, signed short* is_null = false);
void bind(char* name, char* buf, ub4 len, signed short* is_null = false);
void bind(int pos, char* valuep, ub4 elem_len, ub4 no_of_elem);
void define(int pos, COCILob& lob);
void bind(int pos, COCILob& lob);
void bind(char* name, COCILob& lob);
void define(int pos, COCIRef& ref);
void define(int pos, std::vector<COCIRef>& ref);
void bind(int pos, COCIRef& ref);
void bind(char* name, COCIRef& ref);
void define(int pos, COCIObject& obj);
void define(int pos, std::vector<COCIObject>& obj);
void bind(int pos, COCIObject& obj);
void bind(char* name, COCIObject& obj);
void define(int pos, COCIBinary& raw);
void bind(int pos, COCIBinary& raw);
void define(int pos, COCINumber& num);
void bind(int pos, COCINumber& num);
void bind(char* name, COCINumber& num);
void define(int pos, COCIDate& date);
void bind(int pos, COCIDate& date);
void bind(char* name, COCIDate& date);
void define(int pos, COCIString& str);
void bind(int pos, COCIString& str);
void bind(char* name, COCIString& str);
void define(int pos, std::string& str, signed short* is_null = 0);
void bind(int pos, std::string& str);
// Can't get template members to work in MSVC V5.0 (bummer)
void define(int pos, COCIVArray<COCINumber>& coll);
void define(int pos, COCIVArray<COCIDate>& coll);
void bind(int pos, COCIVArray<COCIDate>& coll);
void bind(char* name, COCIVArray<COCIDate>& coll);
void define(int pos, std::vector<COCIVArray<COCINumber> >& coll);
void bind(int pos, COCIVArray<COCINumber>& coll);
void define(int pos, COCIVArray<COCIString>& coll);
void define(int pos, std::vector<COCIVArray<COCIString> >& coll);
void bind(int pos, COCIVArray<COCIString>& coll);
void define(int pos, COCIVArray<COCIObject>& coll);
void define(int pos, std::vector<COCIVArray<COCIObject> >& coll);
void bind(int pos, COCIVArray<COCIObject>& coll);
// Will need to support other types
void define(int pos, COCINestedTable<COCINumber>& coll);
void bind(int pos, COCINestedTable<COCINumber>& coll);
void define(int pos, COCINestedTable<COCIObject>& coll);
private:
OCIStmt* stmthp;
const COCISession& m_Session;
char* sqlstmt;
OCIDefine* m_pDefine;
OCIBind* m_pBind;
ub4 m_Rows;
ub4 m_RowsFetched;
ub4 m_TotalRowsFetched;
std::vector<CIndStruct<COCIObject>*> m_pObjIndStruct;
std::vector<CIndStruct<COCIRef>*> m_pRefIndStruct;
// VArray
std::vector<CIndStruct<COCIVArray<COCINumber> >*> m_pVArrayNumberIndStruct;
std::vector<CIndStruct<COCIVArray<COCIString> >*> m_pVArrayStringIndStruct;
std::vector<CIndStruct<COCIVArray<COCIObject> >*> m_pVArrayObjectIndStruct;
// Nested Table
std::vector<CIndStruct<COCINestedTable<COCINumber> >*> m_pNestedTableNumberIndStruct;
std::vector<CIndStruct<COCINestedTable<COCIString> >*> m_pNestedTableStringIndStruct;
std::vector<CIndStruct<COCINestedTable<COCIObject> >*> m_pNestedTableObjectIndStruct;
std::vector<std::vector<COCIObject>*> m_pObject;
std::vector<std::vector<COCIRef>*> m_pRef;
std::vector<dvoid**> m_indpp_list;
std::vector<dvoid**> m_pgvpp_list;
std::vector<ub4*> m_indszp_list;
std::vector<ub4*> m_pvszp_list;
ub4 m_Object_Count;
ub4 m_Ref_Count;
ub4 m_VArray_Number_Count;
ub4 m_VArray_String_Count;
ub4 m_VArray_Object_Count;
ub4 m_NestedTable_Number_Count;
ub4 m_NestedTable_String_Count;
ub4 m_NestedTable_Object_Count;
};
#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?