75{
77
78 Field::__queryHandle = _queryHandle;
81
82 OciConnection* pConnection =
conn();
84 OCIStmt* pStmt = query()->stmtHandle();
85 sword status = OCI_SUCCESS;
86
87 OCIParam* _param =
NULL;
88 status = ::OCIParamGet(
89 pStmt,
90 OCI_HTYPE_STMT,
91 pError,
92 (dvoid**)&_param,
94 if (status != OCI_SUCCESS) {
96 return false;
97 }
98
100 ub4 size = 0;
101 status = ::OCIAttrGet(_param, OCI_DTYPE_PARAM,
102 &name,
103 &size,
104 OCI_ATTR_NAME,
105 pError);
106 if (status != OCI_SUCCESS) {
108 return false;
109 }
110
111 try {
112 Field::__name = UTF8Decoder::decode((const char*)name, size);
113 }
114 catch (CharsetConvertException* _e) {
118 return false;
119 }
120
121 status = ::OCIAttrGet(_param, OCI_DTYPE_PARAM,
122 &__dataType,
124 OCI_ATTR_DATA_TYPE,
125 pError);
126 if (status != OCI_SUCCESS) {
128 return false;
129 }
130
131 ub2 dataSize = 0;
132 status = ::OCIAttrGet(_param, OCI_DTYPE_PARAM,
133 &dataSize,
135 OCI_ATTR_DATA_SIZE,
136 pError);
137 if (status != OCI_SUCCESS) {
139 return false;
140 }
141
142 sb2 precision;
143 sb1 scale;
144 status = ::OCIAttrGet(_param, OCI_DTYPE_PARAM,
145 &precision,
147 OCI_ATTR_PRECISION,
148 pError);
149 if (status != OCI_SUCCESS) {
151 return false;
152 }
153 status = ::OCIAttrGet(_param, OCI_DTYPE_PARAM,
154 &scale,
156 OCI_ATTR_SCALE,
157 pError);
158 if (status != OCI_SUCCESS) {
160 return false;
161 }
162 Field::__precision = precision;
163 Field::__scale = scale;
165
167 __bufferSize = 0;
170 switch(__dataType) {
171 case SQLT_NUM: {
176
177
178 break;
179 }
180 case SQLT_DAT: {
185 break;
186 }
187 case SQLT_TIMESTAMP: {
193 break;
194 }
195 case SQLT_TIMESTAMP_TZ: {
201 break;
202 }
203 case SQLT_TIMESTAMP_LTZ: {
209 break;
210 }
211 case SQLT_INTERVAL_YM: {
217 break;
218 }
219 case SQLT_INTERVAL_DS: {
225 break;
226 }
227 case SQLT_CHR: {
231
233 break;
234 }
235 case SQLT_AFC: {
239
241 break;
242 }
243 case SQLT_BIN: {
244
248
250 break;
251 }
252 case SQLT_RDD: {
254
255
256
257
258 __bufferSize = 24;
263 break;
264 }
265 case SQLT_LNG: {
272 break;
273 }
274 case SQLT_LBI: {
281 break;
282 }
283 case SQLT_CLOB :
284 case SQLT_CFILE: {
286 if (__dataType == SQLT_CFILE)
288 else
293 break;
294 }
295 case SQLT_BLOB :
296 case SQLT_BFILE: {
298 if (__dataType == SQLT_BFILE)
300 else
305 break;
306 }
307 default: {
308#ifdef __DCL_DEBUG
310#else
312 return false;
313#endif
314 }
315 }
316
321 return false;
322 }
323
328 );
329 if (status != OCI_SUCCESS) {
331 return false;
332 }
333 }
334
336 status = ::OCIDefineByPos(
337 pStmt,
338 &__define,
339 pError,
347 OCI_DYNAMIC_FETCH
348 );
349 if (status == OCI_SUCCESS)
350 status = OCIDefineDynamic(
351 __define,
352 pError,
353 this,
355 );
356 }
357 else {
358 status = ::OCIDefineByPos(
359 pStmt,
360 &__define,
361 pError,
369 OCI_DEFAULT
370 );
371 }
372
373 if (status != OCI_SUCCESS) {
375 return false;
376 }
377
378 return true;
379}
#define __DCL_TRACE3_N(fmt, arg1, arg2, arg3)
#define __DCL_ASSERT(expr)
#define DYNAMIC_BUFFER_SIZE
#define __SET_ERROR(_errorCode)
String toStringAll() const
sword OCIDescriptorAlloc(void **ppDescriptorHandle, ub4 nDescriptorType, size_t xtramem_sz=0, void **ppvUserMem=NULL)
OCIError * errorHandle() const
void setErrorEx(const ByteString &_message)
static sb4 CallbackDefine(dvoid *octxp, OCIDefine *defnp, ub4 iter, dvoid **bufpp, ub4 **alenpp, ub1 *piecep, dvoid **indpp, ub2 **rcodep)