OCILIB (C and C++ Driver for Oracle)  4.7.6
Open source and cross platform Oracle Driver delivering efficient access to Oracle databases.
Object.hpp
1 /*
2  * OCILIB - C Driver for Oracle (C Wrapper for Oracle OCI)
3  *
4  * Website: http://www.ocilib.net
5  *
6  * Copyright (c) 2007-2023 Vincent ROGIER <vince.rogier@ocilib.net>
7  *
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  */
20 
21 #pragma once
22 
23 #include "ocilibcpp/types.hpp"
24 
25 // ReSharper disable CppClangTidyHicppUseEqualsDefault
26 // ReSharper disable CppClangTidyModernizeUseEqualsDefault
27 // ReSharper disable CppClangTidyMiscMisplacedConst
28 
29 namespace ocilib
30 {
31 
33 {
34 }
35 
36 inline Object::Object(const TypeInfo &typeInfo)
37 {
38  Connection connection = typeInfo.GetConnection();
39  AcquireAllocated
40  (
41  core::Check(OCI_ObjectCreate(connection, typeInfo)),
42  connection.GetHandle()
43  );
44 }
45 
46 inline Object::Object(OCI_Object *pObject, core::Handle *parent)
47 {
48  AcquireTransient(pObject, parent);
49 }
50 
51 inline Object Object::Clone() const
52 {
53  Object result(GetTypeInfo());
54 
55  core::Check(OCI_ObjectAssign(result, *this));
56 
57  return result;
58 }
59 
60 inline bool Object::IsAttributeNull(const ostring& name) const
61 {
62  return (core::Check(OCI_ObjectIsNull(*this, name.c_str())) == TRUE);
63 }
64 
65 inline void Object::SetAttributeNull(const ostring& name)
66 {
67  core::Check(OCI_ObjectSetNull(*this, name.c_str()));
68 }
69 
71 {
73 
74  Connection connection
75  (
77  Environment::GetEnvironmentHandle()
78  );
79 
80  return TypeInfo(typeInfo, connection.GetHandle());
81 }
82 
84 {
85  TypeInfo typeInfo = GetTypeInfo();
86  Connection connection = typeInfo.GetConnection();
87 
88  OCI_Ref *pRef = OCI_RefCreate(connection, typeInfo);
89 
90  core::Check(OCI_ObjectGetSelfRef(*this, pRef));
91 
92  return Reference(pRef, GetHandle());
93 }
94 
96 {
97  return ObjectType(static_cast<ObjectType::Type>(core::Check(OCI_ObjectGetType(*this))));
98 }
99 
100 template<>
101 inline bool Object::Get<bool>(const ostring& name) const
102 {
103  return (core::Check(OCI_ObjectGetBoolean(*this, name.c_str())) == TRUE);
104 }
105 
106 template<>
107 inline short Object::Get<short>(const ostring& name) const
108 {
109  return core::Check(OCI_ObjectGetShort(*this, name.c_str()));
110 }
111 
112 template<>
113 inline unsigned short Object::Get<unsigned short>(const ostring& name) const
114 {
115  return core::Check(OCI_ObjectGetUnsignedShort(*this, name.c_str()));
116 }
117 
118 template<>
119 inline int Object::Get<int>(const ostring& name) const
120 {
121  return core::Check(OCI_ObjectGetInt(*this, name.c_str()));
122 }
123 
124 template<>
125 inline unsigned int Object::Get<unsigned int>(const ostring& name) const
126 {
127  return core::Check(OCI_ObjectGetUnsignedInt(*this, name.c_str()));
128 }
129 
130 template<>
131 inline big_int Object::Get<big_int>(const ostring& name) const
132 {
133  return core::Check(OCI_ObjectGetBigInt(*this, name.c_str()));
134 }
135 
136 template<>
137 inline big_uint Object::Get<big_uint>(const ostring& name) const
138 {
139  return core::Check(OCI_ObjectGetUnsignedBigInt(*this, name.c_str()));
140 }
141 
142 template<>
143 inline float Object::Get<float>(const ostring& name) const
144 {
145  return core::Check(OCI_ObjectGetFloat(*this, name.c_str()));
146 }
147 
148 template<>
149 inline double Object::Get<double>(const ostring& name) const
150 {
151  return core::Check(OCI_ObjectGetDouble(*this, name.c_str()));
152 }
153 
154 template<>
155 inline Number Object::Get<Number>(const ostring& name) const
156 {
157  return Number(core::Check(OCI_ObjectGetNumber(*this, name.c_str())), GetHandle());
158 }
159 
160 template<>
161 inline ostring Object::Get<ostring>(const ostring& name) const
162 {
163  return core::MakeString(core::Check(OCI_ObjectGetString(*this,name.c_str())));
164 }
165 
166 template<>
167 inline Date Object::Get<Date>(const ostring& name) const
168 {
169  return Date(core::Check(OCI_ObjectGetDate(*this,name.c_str())), GetHandle());
170 }
171 
172 template<>
173 inline Timestamp Object::Get<Timestamp>(const ostring& name) const
174 {
175  return Timestamp(core::Check(OCI_ObjectGetTimestamp(*this,name.c_str())), GetHandle());
176 }
177 
178 template<>
179 inline Interval Object::Get<Interval>(const ostring& name) const
180 {
181  return Interval(core::Check(OCI_ObjectGetInterval(*this,name.c_str())), GetHandle());
182 }
183 
184 template<>
185 inline Object Object::Get<Object>(const ostring& name) const
186 {
187  return Object(core::Check(OCI_ObjectGetObject(*this,name.c_str())), GetHandle());
188 }
189 
190 template<>
191 inline Reference Object::Get<Reference>(const ostring& name) const
192 {
193  return Reference(core::Check(OCI_ObjectGetRef(*this,name.c_str())), GetHandle());
194 }
195 
196 template<>
197 inline Clob Object::Get<Clob>(const ostring& name) const
198 {
199  return Clob(core::Check(OCI_ObjectGetLob(*this,name.c_str())), GetHandle());
200 }
201 
202 template<>
203 inline NClob Object::Get<NClob>(const ostring& name) const
204 {
205  return NClob(core::Check(OCI_ObjectGetLob(*this, name.c_str())), GetHandle());
206 }
207 
208 template<>
209 inline Blob Object::Get<Blob>(const ostring& name) const
210 {
211  return Blob(core::Check(OCI_ObjectGetLob(*this,name.c_str())), GetHandle());
212 }
213 
214 template<>
215 inline File Object::Get<File>(const ostring& name) const
216 {
217  return File(core::Check(OCI_ObjectGetFile(*this,name.c_str())), GetHandle());
218 }
219 
220 template<>
221 inline Raw Object::Get<Raw>(const ostring& name) const
222 {
223  unsigned int size = core::Check(OCI_ObjectGetRawSize(*this, name.c_str()));
224 
225  core::ManagedBuffer<unsigned char> buffer(static_cast<size_t>(size + 1));
226 
227  size = static_cast<unsigned int>(core::Check(OCI_ObjectGetRaw(*this, name.c_str(), static_cast<AnyPointer>(buffer), size)));
228 
229  return core::MakeRaw(buffer, size);
230 }
231 
232 template<class T>
233 T Object::Get(const ostring& name) const
234 {
235  return T(core::Check(OCI_ObjectGetColl(*this, name.c_str())), GetHandle());
236 }
237 
238 template<>
239 inline void Object::Set<bool>(const ostring& name, const bool &value)
240 {
241  core::Check(OCI_ObjectSetBoolean(*this, name.c_str(), static_cast<boolean>(value)));
242 }
243 
244 template<>
245 inline void Object::Set<short>(const ostring& name, const short &value)
246 {
247  core::Check(OCI_ObjectSetShort(*this, name.c_str(), value));
248 }
249 
250 template<>
251 inline void Object::Set<unsigned short>(const ostring& name, const unsigned short &value)
252 {
253  core::Check(OCI_ObjectSetUnsignedShort(*this, name.c_str(), value));
254 }
255 
256 template<>
257 inline void Object::Set<int>(const ostring& name, const int &value)
258 {
259  core::Check(OCI_ObjectSetInt(*this, name.c_str(), value));
260 }
261 
262 template<>
263 inline void Object::Set<unsigned int>(const ostring& name, const unsigned int &value)
264 {
265  core::Check(OCI_ObjectSetUnsignedInt(*this, name.c_str(), value));
266 }
267 
268 template<>
269 inline void Object::Set<big_int>(const ostring& name, const big_int &value)
270 {
271  core::Check(OCI_ObjectSetBigInt(*this, name.c_str(), value));
272 }
273 
274 template<>
275 inline void Object::Set<big_uint>(const ostring& name, const big_uint &value)
276 {
277  core::Check(OCI_ObjectSetUnsignedBigInt(*this, name.c_str(), value));
278 }
279 
280 template<>
281 inline void Object::Set<float>(const ostring& name, const float &value)
282 {
283  core::Check(OCI_ObjectSetFloat(*this, name.c_str(), value));
284 }
285 
286 template<>
287 inline void Object::Set<double>(const ostring& name, const double &value)
288 {
289  core::Check(OCI_ObjectSetDouble(*this, name.c_str(), value));
290 }
291 
292 template<>
293 inline void Object::Set<Number>(const ostring& name, const Number &value)
294 {
295  core::Check(OCI_ObjectSetNumber(*this, name.c_str(), value));
296 }
297 
298 template<>
299 inline void Object::Set<ostring>(const ostring& name, const ostring &value)
300 {
301  core::Check(OCI_ObjectSetString(*this, name.c_str(), value.c_str()));
302 }
303 
304 template<>
305 inline void Object::Set<Date>(const ostring& name, const Date &value)
306 {
307  core::Check(OCI_ObjectSetDate(*this, name.c_str(), value));
308 }
309 
310 template<>
311 inline void Object::Set<Timestamp>(const ostring& name, const Timestamp &value)
312 {
313  core::Check(OCI_ObjectSetTimestamp(*this, name.c_str(), value));
314 }
315 
316 template<>
317 inline void Object::Set<Interval>(const ostring& name, const Interval &value)
318 {
319  core::Check(OCI_ObjectSetInterval(*this, name.c_str(), value));
320 }
321 
322 template<>
323 inline void Object::Set<Object>(const ostring& name, const Object &value)
324 {
325  core::Check(OCI_ObjectSetObject(*this, name.c_str(), value));
326 }
327 
328 template<>
329 inline void Object::Set<Reference>(const ostring& name, const Reference &value)
330 {
331  core::Check(OCI_ObjectSetRef(*this, name.c_str(), value));
332 }
333 
334 template<>
335 inline void Object::Set<Clob>(const ostring& name, const Clob &value)
336 {
337  core::Check(OCI_ObjectSetLob(*this, name.c_str(), value));
338 }
339 
340 template<>
341 inline void Object::Set<NClob>(const ostring& name, const NClob &value)
342 {
343  core::Check(OCI_ObjectSetLob(*this, name.c_str(), value));
344 }
345 
346 template<>
347 inline void Object::Set<Blob>(const ostring& name, const Blob &value)
348 {
349  core::Check(OCI_ObjectSetLob(*this, name.c_str(), value));
350 }
351 
352 template<>
353 inline void Object::Set<File>(const ostring& name, const File &value)
354 {
355  core::Check(OCI_ObjectSetFile(*this, name.c_str(), value));
356 }
357 
358 template<>
359 inline void Object::Set<Raw>(const ostring& name, const Raw &value)
360 {
361  const AnyPointer data = value.empty() ? nullptr : static_cast<AnyPointer>(const_cast<Raw::value_type*>(&value[0])) ;
362 
363  core::Check(OCI_ObjectSetRaw(*this, name.c_str(), data, static_cast<unsigned int>(value.size())));
364 
365 }
366 
367 template<class T>
368 void Object::Set(const ostring& name, const T &value)
369 {
370  core::Check(OCI_ObjectSetColl(*this, name.c_str(), value));
371 }
372 
373 inline ostring Object::ToString() const
374 {
375  if (!IsNull())
376  {
377  unsigned int len = 0;
378 
379  core::Check(OCI_ObjectToText(*this, &len, nullptr));
380 
381  core::ManagedBuffer<otext> buffer(static_cast<size_t>(len + 1));
382 
383  core::Check(OCI_ObjectToText(*this, &len, buffer));
384 
385  return core::MakeString(static_cast<const otext *>(buffer), static_cast<int>(len));
386  }
387 
388  return OCI_STRING_NULL;
389 }
390 
391 }
A connection or session with a specific database.
Definition: types.hpp:1580
Object identifying the SQL data type OBJECT.
Definition: types.hpp:4668
void Set(const ostring &name, const T &value)
Set the given object attribute value.
Definition: Object.hpp:368
T Get(const ostring &name) const
Return the given object attribute value.
Definition: Object.hpp:233
ostring ToString() const override
return a string representation of the current object
Definition: Object.hpp:373
Reference GetReference() const
Creates a reference on the current object.
Definition: Object.hpp:83
Object Clone() const
Clone the current instance to a new one performing deep copy.
Definition: Object.hpp:51
core::Enum< ObjectTypeValues > ObjectType
Object Type.
Definition: types.hpp:4701
bool IsAttributeNull(const ostring &name) const
Check if an object attribute is null.
Definition: Object.hpp:60
Object()
Create an empty null Object instance.
Definition: Object.hpp:32
TypeInfo GetTypeInfo() const
Return the TypeInfo object describing the object.
Definition: Object.hpp:70
ObjectType GetType() const
Return the type of the given object.
Definition: Object.hpp:95
void SetAttributeNull(const ostring &name)
Set the given object attribute to null.
Definition: Object.hpp:65
Object identifying the SQL data type REF.
Definition: types.hpp:4848
Provides type information on Oracle Database objects.
Definition: types.hpp:4531
Connection GetConnection() const
Return the connection associated with a statement.
Definition: TypeInfo.hpp:52
Template Enumeration template class providing some type safety to some extends for manipulating enume...
Definition: core.hpp:118
Internal usage. Interface for handling ownership and relationship of a C API handle.
Definition: core.hpp:325
Internal usage. Provide a buffer class with RAII capabilities.
Definition: core.hpp:197
struct OCI_Ref OCI_Ref
Oracle REF type representation.
Definition: types.h:356
struct OCI_Object OCI_Object
Oracle Named types representation.
Definition: types.h:309
long long big_int
big_int is a C scalar integer (32 or 64 bits) depending on compiler support for 64bits integers....
Definition: platform.h:281
struct OCI_TypeInfo OCI_TypeInfo
Type info metadata handle.
Definition: types.h:366
OCI_SYM_PUBLIC OCI_Connection *OCI_API OCI_TypeInfoGetConnection(OCI_TypeInfo *typinf)
Retrieve connection handle from the type info handle.
OCI_SYM_PUBLIC boolean OCI_API OCI_ObjectToText(OCI_Object *obj, unsigned int *size, otext *str)
Convert an object handle value to a string.
OCI_SYM_PUBLIC boolean OCI_API OCI_ObjectSetInterval(OCI_Object *obj, const otext *attr, OCI_Interval *value)
Set an object attribute of type Interval.
OCI_SYM_PUBLIC boolean OCI_API OCI_ObjectSetRaw(OCI_Object *obj, const otext *attr, void *value, unsigned int len)
Set an object attribute of type RAW.
OCI_SYM_PUBLIC boolean OCI_API OCI_ObjectSetString(OCI_Object *obj, const otext *attr, const otext *value)
Set an object attribute of type string.
OCI_SYM_PUBLIC boolean OCI_API OCI_ObjectIsNull(OCI_Object *obj, const otext *attr)
Check if an object attribute is null.
OCI_SYM_PUBLIC boolean OCI_API OCI_ObjectSetDouble(OCI_Object *obj, const otext *attr, double value)
Set an object attribute of type double.
OCI_SYM_PUBLIC int OCI_API OCI_ObjectGetInt(OCI_Object *obj, const otext *attr)
Return the integer value of the given object attribute.
OCI_SYM_PUBLIC boolean OCI_API OCI_ObjectSetInt(OCI_Object *obj, const otext *attr, int value)
Set an object attribute of type int.
OCI_SYM_PUBLIC OCI_Coll *OCI_API OCI_ObjectGetColl(OCI_Object *obj, const otext *attr)
Return the collection value of the given object attribute.
OCI_SYM_PUBLIC OCI_TypeInfo *OCI_API OCI_ObjectGetTypeInfo(OCI_Object *obj)
Return the type info object associated to the object.
OCI_SYM_PUBLIC boolean OCI_API OCI_ObjectSetColl(OCI_Object *obj, const otext *attr, OCI_Coll *value)
Set an object attribute of type Collection.
OCI_SYM_PUBLIC OCI_Timestamp *OCI_API OCI_ObjectGetTimestamp(OCI_Object *obj, const otext *attr)
Return the timestamp value of the given object attribute.
OCI_SYM_PUBLIC boolean OCI_API OCI_ObjectSetObject(OCI_Object *obj, const otext *attr, OCI_Object *value)
Set an object attribute of type Object.
OCI_SYM_PUBLIC OCI_Ref *OCI_API OCI_RefCreate(OCI_Connection *con, OCI_TypeInfo *typinf)
Create a local Ref instance.
OCI_SYM_PUBLIC boolean OCI_API OCI_ObjectSetShort(OCI_Object *obj, const otext *attr, short value)
Set an object attribute of type short.
OCI_SYM_PUBLIC boolean OCI_API OCI_ObjectSetUnsignedShort(OCI_Object *obj, const otext *attr, unsigned short value)
Set an object attribute of type unsigned short.
OCI_SYM_PUBLIC unsigned int OCI_API OCI_ObjectGetType(OCI_Object *obj)
Return the type of an object instance.
OCI_SYM_PUBLIC OCI_File *OCI_API OCI_ObjectGetFile(OCI_Object *obj, const otext *attr)
Return the file value of the given object attribute.
OCI_SYM_PUBLIC big_uint OCI_API OCI_ObjectGetUnsignedBigInt(OCI_Object *obj, const otext *attr)
Return the unsigned big integer value of the given object attribute.
OCI_SYM_PUBLIC float OCI_API OCI_ObjectGetFloat(OCI_Object *obj, const otext *attr)
Return the float value of the given object attribute.
OCI_SYM_PUBLIC boolean OCI_API OCI_ObjectAssign(OCI_Object *obj, OCI_Object *obj_src)
Assign an object to another one.
OCI_SYM_PUBLIC boolean OCI_API OCI_ObjectSetDate(OCI_Object *obj, const otext *attr, OCI_Date *value)
Set an object attribute of type Date.
OCI_SYM_PUBLIC boolean OCI_API OCI_ObjectSetFile(OCI_Object *obj, const otext *attr, OCI_File *value)
Set an object attribute of type File.
OCI_SYM_PUBLIC boolean OCI_API OCI_ObjectSetBigInt(OCI_Object *obj, const otext *attr, big_int value)
Set an object attribute of type big int.
OCI_SYM_PUBLIC boolean OCI_API OCI_ObjectSetNull(OCI_Object *obj, const otext *attr)
Set an object attribute to null.
OCI_SYM_PUBLIC boolean OCI_API OCI_ObjectSetNumber(OCI_Object *obj, const otext *attr, OCI_Number *value)
Set an object attribute of type number.
OCI_SYM_PUBLIC big_int OCI_API OCI_ObjectGetBigInt(OCI_Object *obj, const otext *attr)
Return the big integer value of the given object attribute.
OCI_SYM_PUBLIC boolean OCI_API OCI_ObjectGetBoolean(OCI_Object *obj, const otext *attr)
Return the boolean value of the given object attribute (ONLY for PL/SQL records)
OCI_SYM_PUBLIC boolean OCI_API OCI_ObjectGetSelfRef(OCI_Object *obj, OCI_Ref *ref)
Retrieve an Oracle Ref handle from an object and assign it to the given OCILIB OCI_Ref handle.
OCI_SYM_PUBLIC unsigned int OCI_API OCI_ObjectGetUnsignedInt(OCI_Object *obj, const otext *attr)
Return the unsigned integer value of the given object attribute.
OCI_SYM_PUBLIC boolean OCI_API OCI_ObjectSetBoolean(OCI_Object *obj, const otext *attr, boolean value)
Set an object attribute of type boolean (ONLY for PL/SQL records)
OCI_SYM_PUBLIC OCI_Lob *OCI_API OCI_ObjectGetLob(OCI_Object *obj, const otext *attr)
Return the lob value of the given object attribute.
OCI_SYM_PUBLIC boolean OCI_API OCI_ObjectSetRef(OCI_Object *obj, const otext *attr, OCI_Ref *value)
Set an object attribute of type Ref.
OCI_SYM_PUBLIC unsigned short OCI_API OCI_ObjectGetUnsignedShort(OCI_Object *obj, const otext *attr)
Return the unsigned short value of the given object attribute.
OCI_SYM_PUBLIC int OCI_API OCI_ObjectGetRaw(OCI_Object *obj, const otext *attr, void *value, unsigned int len)
Return the raw attribute value of the given object attribute into the given buffer.
OCI_SYM_PUBLIC const otext *OCI_API OCI_ObjectGetString(OCI_Object *obj, const otext *attr)
Return the string value of the given object attribute.
OCI_SYM_PUBLIC OCI_Object *OCI_API OCI_ObjectGetObject(OCI_Object *obj, const otext *attr)
Return the object value of the given object attribute.
OCI_SYM_PUBLIC OCI_Ref *OCI_API OCI_ObjectGetRef(OCI_Object *obj, const otext *attr)
Return the Ref value of the given object attribute.
OCI_SYM_PUBLIC OCI_Number *OCI_API OCI_ObjectGetNumber(OCI_Object *obj, const otext *attr)
Return the number value of the given object attribute.
OCI_SYM_PUBLIC unsigned int OCI_API OCI_ObjectGetRawSize(OCI_Object *obj, const otext *attr)
Return the raw attribute value size of the given object attribute into the given buffer.
OCI_SYM_PUBLIC double OCI_API OCI_ObjectGetDouble(OCI_Object *obj, const otext *attr)
Return the double value of the given object attribute.
OCI_SYM_PUBLIC boolean OCI_API OCI_ObjectSetUnsignedInt(OCI_Object *obj, const otext *attr, unsigned int value)
Set an object attribute of type unsigned int.
OCI_SYM_PUBLIC OCI_Interval *OCI_API OCI_ObjectGetInterval(OCI_Object *obj, const otext *attr)
Return the interval value of the given object attribute.
OCI_SYM_PUBLIC boolean OCI_API OCI_ObjectSetUnsignedBigInt(OCI_Object *obj, const otext *attr, big_uint value)
Set an object attribute of type unsigned big int.
OCI_SYM_PUBLIC boolean OCI_API OCI_ObjectSetTimestamp(OCI_Object *obj, const otext *attr, OCI_Timestamp *value)
Set an object attribute of type Timestamp.
OCI_SYM_PUBLIC boolean OCI_API OCI_ObjectSetFloat(OCI_Object *obj, const otext *attr, float value)
Set an object attribute of type float.
OCI_SYM_PUBLIC OCI_Object *OCI_API OCI_ObjectCreate(OCI_Connection *con, OCI_TypeInfo *typinf)
Create a local object instance.
OCI_SYM_PUBLIC short OCI_API OCI_ObjectGetShort(OCI_Object *obj, const otext *attr)
Return the short value of the given object attribute.
OCI_SYM_PUBLIC OCI_Date *OCI_API OCI_ObjectGetDate(OCI_Object *obj, const otext *attr)
Return the date value of the given object attribute.
OCI_SYM_PUBLIC boolean OCI_API OCI_ObjectSetLob(OCI_Object *obj, const otext *attr, OCI_Lob *value)
Set an object attribute of type Lob.
static T Check(T result)
Internal usage. Checks if the last OCILIB function call has raised an error. If so,...
Definition: Utils.hpp:53
ostring MakeString(const otext *result, int size=-1)
Internal usage. Constructs a C++ string object from the given OCILIB string pointer.
Definition: Utils.hpp:65
Raw MakeRaw(AnyPointer result, unsigned int size)
Internal usage. Constructs a C++ Raw object from the given OCILIB raw buffer.
Definition: Utils.hpp:70
OCILIB ++ Namespace.
std::basic_string< otext, std::char_traits< otext >, std::allocator< otext > > ostring
string class wrapping the OCILIB otext * type and OTEXT() macros ( see Character sets )
Definition: config.hpp:120
Lob< ostring, LobNationalCharacter > NClob
Class handling NCLOB oracle type.
Definition: types.hpp:4320
Lob< ostring, LobCharacter > Clob
Class handling CLOB oracle type.
Definition: types.hpp:4309
std::vector< unsigned char > Raw
C++ counterpart of SQL RAW data type.
Definition: config.hpp:138
void * AnyPointer
Alias for the generic void pointer.
Definition: config.hpp:129
Lob< Raw, LobBinary > Blob
Class handling BLOB oracle type.
Definition: types.hpp:4331