The following table shows the loop structure for processing the types of results that might be seen in a DB-Library program. Table 5-8 shows the equivalent Client-Library program logic.
Loop control |
while ((results_ret = dbresults(dbproc)) != NO_MORE_RESULTS) { if (results_ret == SUCCEED) { |
Retrieve regular and compute rows |
Bind regular rows. Bind compute rows. while (dbnextrow(dbproc) != NO_MORE_ROWS) { Retrieve regular and compute rows. } /* while */ |
Retrieve return parameter values |
if (dbnumrets(dbproc) > 0) { Retrieve output parameter values. } |
Retrieve return status values |
if (dbhasretstatus(dbproc)) { Retrieve stored procedure return status. } |
(optional) Get statistics |
if (DBROWS(dbproc) != -1) { Find out number of rows affected. } |
Command error checking (server-side or client-side) |
} /* if results_ret == SUCCEED */ else if (results_ret == FAIL) { printf( "Command failed"); } } /* while */ |
The following table shows the results-loop structure for a typical Client-Library program:
Loop control |
while ((results_ret = ct_results(cmd, &result_type)) == CS_SUCCEED) { switch(result_type) { |
Retrieve regular and compute rows |
case CS_ROW_RESULT: Bind regular rows. Fetch regular rows. break; case CS_COMPUTE_RESULT: Bind compute rows. Fetch compute rows. break; |
Retrieve return parameter values |
case CS_PARAM_RESULT: Bind output parameter values. Fetch output parameter values. break; |
Retrieve return status values |
case CS_STATUS_RESULT: Bind stored procedure return status. Fetch stored procedure return status. break; |
(optional) Get statistics |
case CS_CMD_DONE: Find out number of rows affected. break; |
Command error checking (server-side) |
case CS_CMD_FAIL: printf("Command failed on server.") break; case CS_CMD_SUCCEED: break; |
Command error checking (client-side) |
default: /* case */ printf("Unexpected result type"); break; } /* end switch */ } /* end while */ if (results_ret != CS_END_RESULTS && results_ret != CS_CANCELED) printf("ERROR: ct_results failed!"); |