void Ns_PdDbSpExec(void *handle)
This function executes a stored procedure that has been initialized with Ns_PdDbSpStart and Ns_PdDbSpSetParam.
void Ns_PdDbSpExec(void *handle) { DBMSState *state = (DBMSState *)handle; int retcode; int morep = 1; int restype; int status = NS_ERROR; char *name, *value; retcode = DBMSSend(state->cmd); if (retcode != DBMS_OK) { Ns_PdLog(Error, "DbSpExec: DBMSSend() failed."); Ns_PdSendException(state->exceptionCode, state->exceptionMsg); return; } while (morep && (retcode = DBMSResults(state->cmd, &res_type)) == DBMS_OK) { switch (res_type) { case DBMS_ROW_RESULT: /* * Rows were returned. */ morep = 0; status = DB_ROWS; state->fetchingRows = 1; break; case DBMS_CMD_FAIL: if (DBMSCancel(state->cmd) != DBMS_OK) { Ns_PdLog(Error, "DbSpExec: DBMSCancel after DBMS_CMD_FAIL failed."); morep = 0; } break; case DBMS_STATUS_RESULT: /* * Process a stored procedure return code and go on. */ state->returnCode = DBMSGetReturnCode(state->cmd) break; case DBMS_PARAM_RESULT: /* * Output parameters were returned. */ while (DBMSGetOutputParameter(&name, &value) == DBMS_OK) { SaveOutputParameter(state, name, value); } break; case DBMS_CMD_SUCCEED: /* * It succeeded and returned nothing. */ status = DB_DML; break; default: Ns_PdLog(Error, "DbSpExec: " "DBMSResults returned unexpected result type: %d", res_type); morep = 0; } } if (status == NS_ERROR) { Ns_PdSendException(state->exceptionCode, state->exceptionMsg); } else { Ns_PdSendString(OK_STATUS); status == DB_ROWS ? Ns_PdSendString(EXEC_RET_ROWS) : Ns_PdSendString(EXEC_RET_DML); } }