Perl Cd Bookshelf [Electronic resources]

Mark V. Scardina, Ben ChangandJinyu Wang

نسخه متنی -صفحه : 218/ 150
نمايش فراداده

Handling OCI Errors

It is necessary to include error checking within this application. This can be done with the following checker() function. This generic code can be copied and pasted into your applications without customization.

 void checkerr( OCIError* errhp, sword status) { 
text msgbuf[512]; 
sb4 errcode = 0; 
memset((void *) msgbuf, (int)'\0', (size_t)512); 
switch (status) 
{ 
case OCI_SUCCESS: break; 
case OCI_SUCCESS_WITH_INFO: 
printf("status = OCI_SUCCESS_WITH_INFO\n"); 
OCIErrorGet((dvoid *) errhp, (ub4) 1, (text *) NULL, &errcode, 
msgbuf, (ub4) sizeof(msgbuf), (ub4) OCI_HTYPE_ERROR); 
printf("ERROR CODE = %d\n", errcode); 
printf("%.*s\n", 512, msgbuf); 
if (errcode == 436 || errcode == 437 || errcode == 438 
|| errcode == 439) 
exit(1); 
break; 
case OCI_NEED_DATA: 
printf("status = OCI_NEED_DATA\n"); 
break; 
case OCI_NO_DATA: 
printf("status = OCI_NO_DATA\n"); 
break; 
case OCI_ERROR: 
printf("status = OCI_ERROR\n");  
OCIErrorGet((dvoid *) errhp, (ub4) 1, (text *) NULL, &errcode, 
msgbuf, (ub4) sizeof(msgbuf), (ub4) OCI_HTYPE_ERROR); 
printf("ERROR CODE = %d\n", errcode); 
printf("%.*s\n", 512, msgbuf); 
if (errcode == 436 || errcode == 437 || errcode == 438 
|| errcode == 439) 
exit(1); 
break;  

case OCI_INVALID_HANDLE: 
printf("status = OCI_INVALID_HANDLE\n"); 
break; 
case OCI_STILL_EXECUTING: 
printf("status = OCI_STILL_EXECUTE\n"); 
break; 
case OCI_CONTINUE: 
printf("status = OCI_CONTINUE\n"); 
break; 
default: 
break;  
}  
return; 
}  

This is a standard case-statement-error-routine checking for the OCI error condition constants defined in oci.h. Now that the generic code is complete, we can begin discussing the application specific code.