⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 oracle_txns8.c

📁 oracle数据库tpcc(在线事务处理能力)测试的源码
💻 C
📖 第 1 页 / 共 5 页
字号:
	SQLT_STR, &pctx->d_zip_ind, &pctx->d_zip_len, &pctx->d_zip_rc);
   OCIBNDR(pctx->curp0, pctx->c_first_bp, p,":c_first",pPay->c_first,
	SIZ(pPay->c_first), SQLT_STR,&pctx->c_first_ind, &pctx->c_first_len, &pctx->c_first_rc);
   OCIBNDR(pctx->curp0, pctx->c_middle_bp, p,":c_middle",pPay->c_middle,2,
	SQLT_AFC, &pctx->c_middle_ind, &pctx->c_middle_len,&pctx->c_middle_rc);
   OCIBNDR(pctx->curp0, pctx->c_street_1_bp, p,":c_street_1",pPay->c_street_1,
	SIZ(pPay->c_street_1),SQLT_STR, &pctx->c_street_1_ind,
	&pctx->c_street_1_len, &pctx->c_street_1_rc);
   OCIBNDR(pctx->curp0, pctx->c_street_2_bp, p,":c_street_2",pPay->c_street_2,
	SIZ(pPay->c_street_2),SQLT_STR, &pctx->c_street_2_ind,
	&pctx->c_street_2_len, &pctx->c_street_2_rc);
   OCIBNDR(pctx->curp0, pctx->c_city_bp, p,":c_city",pPay->c_city,SIZ(pPay->c_city),
	SQLT_STR, &pctx->c_city_ind, &pctx->c_city_len, &pctx->c_city_rc);
   OCIBNDR(pctx->curp0, pctx->c_state_bp, p,":c_state",pPay->c_state,SIZ(pPay->c_state),
	SQLT_STR,&pctx->c_state_ind, &pctx->c_state_len, &pctx->c_state_rc);
   OCIBNDR(pctx->curp0, pctx->c_zip_bp, p,":c_zip",pPay->c_zip,SIZ(pPay->c_zip),
	SQLT_STR, &pctx->c_zip_ind, &pctx->c_zip_len, &pctx->c_zip_rc);
   OCIBNDR(pctx->curp0, pctx->c_phone_bp, p,":c_phone",pPay->c_phone,
	SIZ(pPay->c_phone), SQLT_STR,&pctx->c_phone_ind, &pctx->c_phone_len, &pctx->c_phone_rc);
   OCIBNDR(pctx->curp0, pctx->c_since_bp, p,":c_since",
	ADR(ptemp->customer_sdate),SIZ(ptemp->customer_sdate),SQLT_ODT,
	&pctx->c_since_ind, &pctx->c_since_len, &pctx->c_since_rc);
   OCIBNDR(pctx->curp0, pctx->c_credit_bp, p,":c_credit",pPay->c_credit,
	SIZ(pPay->c_credit),SQLT_CHR,
	&pctx->c_credit_ind, &pctx->c_credit_len, &pctx->c_credit_rc);
   OCIBNDR(pctx->curp0, pctx->c_credit_lim_bp, p,":c_credit_lim",
	ADR(ptemp->c_credit_lim),SIZ(ptemp->c_credit_lim),SQLT_INT,
	&pctx->c_credit_lim_ind,&pctx->c_credit_lim_len, &pctx->c_credit_lim_rc);
   OCIBNDR(pctx->curp0, pctx->c_discount_bp, p,":c_discount",
	ADR(ptemp->c_discount),SIZ(ptemp->c_discount), SQLT_FLT,&pctx->c_discount_ind,
	&pctx->c_discount_len, &pctx->c_discount_rc);
   OCIBNDR(pctx->curp0, pctx->c_balance_bp, p,":c_balance",
	ADR(pPay->c_balance), SIZ(pPay->c_balance),SQLT_FLT,
	&pctx->c_balance_ind, &pctx->c_balance_len,&pctx->c_balance_rc);
   OCIBNDR(pctx->curp0, pctx->c_data_bp, p,":c_data",pPay->c_data,SIZ(pPay->c_data),
	SQLT_STR, &pctx->c_data_ind, &pctx->c_data_len, &pctx->c_data_rc);
/* OCIBNDR(pctx->curp0, pctx->h_date_bp, p,":h_date",ptemp->h_date,
	SIZ(ptemp->h_date),SQLT_STR, &pctx->h_date_ind, &pctx->h_date_len, &pctx->h_date_rc); */
   OCIBNDR(pctx->curp0, pctx->retries_bp, p,":retry",
	ADR(ptemp->p_retry),SIZ(ptemp->p_retry), SQLT_INT,
	&pctx->retries_ind, &pctx->retries_len, &pctx->retries_rc);
   OCIBNDR(pctx->curp0, pctx->cr_date_bp, p,":cr_date",
	ADR(ptemp->cr_date), SIZ(ptemp->cr_date),SQLT_ODT,
	&pctx->cr_date_ind, &pctx->cr_date_len,&pctx->cr_date_rc);
/* ---- Binds for the second cursor */
   OCIBNDR(pctx->curp1, pctx->w_id_bp1, p,":w_id",ADR(pPay->w_id),SIZ(pPay->w_id),
	SQLT_INT, &pctx->w_id_ind, &pctx->w_id_len, &pctx->w_id_rc);
   OCIBNDR(pctx->curp1, pctx->d_id_bp1, p,":d_id",ADR(pPay->d_id),
	SIZ(pPay->d_id),SQLT_INT, &pctx->d_id_ind, &pctx->d_id_len, &pctx->d_id_rc);
   OCIBND(pctx->curp1, pctx->c_w_id_bp1, p,":c_w_id",ADR(pPay->c_w_id),
	SIZ(pPay->c_w_id),SQLT_INT);
   OCIBND(pctx->curp1, pctx->c_d_id_bp1, p,":c_d_id",ADR(pPay->c_d_id),
	SIZ(pPay->c_d_id),SQLT_INT);
   OCIBNDR(pctx->curp1, pctx->c_id_bp1, p,":c_id",ADR(pPay->c_id),SIZ(int),
	SQLT_INT, &pctx->c_id_ind, &pctx->c_id_len, &pctx->c_id_rc);
   OCIBNDR(pctx->curp1, pctx->h_amount_bp1, p,":h_amount",ADR(ptemp->h_amount),
	SIZ(int),SQLT_INT, &pctx->h_amount_ind, &pctx->h_amount_len,
	&pctx->h_amount_rc);
   OCIBND(pctx->curp1, pctx->c_last_bp1, p,":c_last",pPay->c_last,SIZ(pPay->c_last),SQLT_STR);
   OCIBNDR(pctx->curp1, pctx->w_street_1_bp1, p,":w_street_1",pPay->w_street_1,
	SIZ(pPay->w_street_1),SQLT_STR, &pctx->w_street_1_ind,
	&pctx->w_street_1_len, &pctx->w_street_1_rc);
   OCIBNDR(pctx->curp1, pctx->w_street_2_bp1, p,":w_street_2",
	pPay->w_street_2,SIZ(pPay->w_street_2),SQLT_STR, &pctx->w_street_2_ind,
	&pctx->w_street_2_len, &pctx->w_street_2_rc);
   OCIBNDR(pctx->curp1, pctx->w_city_bp1, p,":w_city",pPay->w_city,SIZ(pPay->w_city),
	SQLT_STR, &pctx->w_city_ind, &pctx->w_city_len, &pctx->w_city_rc);
   OCIBNDR(pctx->curp1, pctx->w_state_bp1, p,":w_state",pPay->w_state,
	SIZ(pPay->w_state), SQLT_STR,&pctx->w_state_ind, &pctx->w_state_len, &pctx->w_state_rc);
   OCIBNDR(pctx->curp1, pctx->w_zip_bp1, p,":w_zip",pPay->w_zip,SIZ(pPay->w_zip),
	SQLT_STR, &pctx->w_zip_ind, &pctx->w_zip_len, &pctx->w_zip_rc);
   OCIBNDR(pctx->curp1, pctx->d_street_1_bp1, p,":d_street_1",pPay->d_street_1,
	SIZ(pPay->d_street_1),SQLT_STR, &pctx->d_street_1_ind,
	&pctx->d_street_1_len, &pctx->d_street_1_rc);
   OCIBNDR(pctx->curp1, pctx->d_street_2_bp1, p,":d_street_2",pPay->d_street_2,
	SIZ(pPay->d_street_2),SQLT_STR, &pctx->d_street_2_ind,
	&pctx->d_street_2_len, &pctx->d_street_2_rc);
   OCIBNDR(pctx->curp1, pctx->d_city_bp1, p,":d_city",pPay->d_city,SIZ(pPay->d_city),
	SQLT_STR, &pctx->d_city_ind, &pctx->d_city_len, &pctx->d_city_rc);
   OCIBNDR(pctx->curp1, pctx->d_state_bp1, p,":d_state",
	pPay->d_state, SIZ(pPay->d_state), SQLT_STR,
	&pctx->d_state_ind, &pctx->d_state_len,&pctx->d_state_rc);
   OCIBNDR(pctx->curp1, pctx->d_zip_bp1, p,":d_zip",pPay->d_zip,SIZ(pPay->d_zip),
	SQLT_STR, &pctx->d_zip_ind, &pctx->d_zip_len, &pctx->d_zip_rc);
   OCIBNDR(pctx->curp1, pctx->c_first_bp1, p,":c_first",pPay->c_first,
	SIZ(pPay->c_first), SQLT_STR,&pctx->c_first_ind, &pctx->c_first_len,
	&pctx->c_first_rc);
   OCIBNDR(pctx->curp1, pctx->c_middle_bp1, p,":c_middle",pPay->c_middle,2,
	SQLT_AFC, &pctx->c_middle_ind, &pctx->c_middle_len,&pctx->c_middle_rc);
   OCIBNDR(pctx->curp1, pctx->c_street_1_bp1, p,":c_street_1",
	pPay->c_street_1,SIZ(pPay->c_street_1),SQLT_STR, &pctx->c_street_1_ind,
	&pctx->c_street_1_len, &pctx->c_street_1_rc);
   OCIBNDR(pctx->curp1, pctx->c_street_2_bp1, p,":c_street_2",
	pPay->c_street_2,SIZ(pPay->c_street_2),SQLT_STR, &pctx->c_street_2_ind,
	&pctx->c_street_2_len, &pctx->c_street_2_rc);
   OCIBNDR(pctx->curp1, pctx->c_city_bp1, p,":c_city",pPay->c_city,
	SIZ(pPay->c_city),SQLT_STR,&pctx->c_city_ind, &pctx->c_city_len, &pctx->c_city_rc);
   OCIBNDR(pctx->curp1, pctx->c_state_bp1, p,":c_state",pPay->c_state,
	SIZ(pPay->c_state),SQLT_STR, &pctx->c_state_ind,&pctx->c_state_len,
	&pctx->c_state_rc);
   OCIBNDR(pctx->curp1, pctx->c_zip_bp1, p,":c_zip",pPay->c_zip,SIZ(pPay->c_zip),
	SQLT_STR, &pctx->c_zip_ind, &pctx->c_zip_len, &pctx->c_zip_rc);
   OCIBNDR(pctx->curp1, pctx->c_phone_bp1, p,":c_phone",pPay->c_phone,
	SIZ(pPay->c_phone), SQLT_STR,&pctx->c_phone_ind, &pctx->c_phone_len,
	&pctx->c_phone_rc);
   OCIBNDR(pctx->curp1, pctx->c_since_bp1, p,":c_since",
	ADR(ptemp->customer_sdate), SIZ(ptemp->customer_sdate), SQLT_ODT,
	&pctx->c_since_ind, &pctx->c_since_len, &pctx->c_since_rc);
   OCIBNDR(pctx->curp1, pctx->c_credit_bp1, p,":c_credit",pPay->c_credit,
	SIZ(pPay->c_credit),SQLT_CHR,&pctx->c_credit_ind, &pctx->c_credit_len,
	&pctx->c_credit_rc);
   OCIBNDR(pctx->curp1, pctx->c_credit_lim_bp1, p,":c_credit_lim",
	ADR(ptemp->c_credit_lim),SIZ(int), SQLT_INT,&pctx->c_credit_lim_ind,
	&pctx->c_credit_lim_len, &pctx->c_credit_lim_rc);
   OCIBNDR(pctx->curp1, pctx->c_discount_bp1, p,":c_discount",
	ADR(ptemp->c_discount),SIZ(ptemp->c_discount), SQLT_FLT,
	&pctx->c_discount_ind,&pctx->c_discount_len, &pctx->c_discount_rc);
   OCIBNDR(pctx->curp1, pctx->c_balance_bp1, p,":c_balance",
	ADR(pPay->c_balance),
	SIZ(double),SQLT_FLT, &pctx->c_balance_ind, &pctx->c_balance_len,
	&pctx->c_balance_rc);
   OCIBNDR(pctx->curp1, pctx->c_data_bp1, p,":c_data",pPay->c_data,SIZ(pPay->c_data),
	SQLT_STR, &pctx->c_data_ind, &pctx->c_data_len, &pctx->c_data_rc);
/* OCIBNDR(pctx->curp1, pctx->h_date_bp1, p,":h_date",
ptemp->h_date,SIZ(ptemp->h_date),
SQLT_STR, &pctx->h_date_ind, &pctx->h_date_len, &pctx-
>h_date_rc); */
   OCIBNDR(pctx->curp1, pctx->retries_bp1, p,":retry",
	ADR(ptemp->p_retry),SIZ(int), SQLT_INT,
	&pctx->retries_ind, &pctx->retries_len, &pctx->retries_rc);
   OCIBNDR(pctx->curp1, pctx->cr_date_bp1, p,":cr_date",
	ADR(ptemp->cr_date), SIZ(ptemp->cr_date), SQLT_ODT,
	&pctx->cr_date_ind, &pctx->cr_date_len,&pctx->cr_date_rc);
   return (ERR_DB_SUCCESS);
}
tkvcp (PaymentData *pPay, OraContext *p)
{
   int execstatus;
   int errcode;
   payctx *pctx = &(p->pctx);
   paytemp *ptemp = &(p->tempvars.pay);
   unsigned char localcr_date[7];
   OCIError *datecvterrhp = p->datecvterrhp;
/* vgetdate(ptemp->cr_date); */
   vgetdate(localcr_date);
   cvtdmyhms(localcr_date,ptemp->h_date);
   OCIDateFromText(datecvterrhp,ptemp->h_date,strlen(ptemp->h_date),
   	"DD-MM-YYYY HH24:MI:SS",21,(text *) 0, 0,&ptemp->cr_date);
   pctx->w_id_ind = TRUE;
   pctx->w_id_len = SIZ(pPay->w_id);
   pctx->d_id_ind = TRUE;
   pctx->d_id_len = SIZ(pPay->d_id);
   pctx->c_w_id_ind = TRUE;
   pctx->c_w_id_len = 0;
   pctx->c_d_id_ind = TRUE;
   pctx->c_d_id_len = 0;
   pctx->c_id_ind = TRUE;
   pctx->c_id_len = 0;
   pctx->h_amount_len = SIZ(ptemp->h_amount);
   pctx->h_amount_ind = TRUE;
   pctx->c_last_ind = TRUE;
   pctx->c_last_len = SIZ(pPay->c_last);
   pctx->w_street_1_ind = NA;
   pctx->w_street_1_len = 0;
   pctx->w_street_2_ind = NA;
   pctx->w_street_2_len = 0;
   pctx->w_city_ind = NA;
   pctx->w_city_len = 0;
   pctx->w_state_ind = NA;
   pctx->w_state_len = 0;
   pctx->w_zip_ind = NA;
   pctx->w_zip_len = 0;
   pctx->d_street_1_ind = NA;
   pctx->d_street_1_len = 0;
   pctx->d_street_2_ind = NA;
   pctx->d_street_2_len = 0;
   pctx->d_city_ind = NA;
   pctx->d_city_len = 0;
   pctx->d_state_ind = NA;
   pctx->d_state_len = 0;
   pctx->d_zip_ind = NA;
   pctx->d_zip_len = 0;
   pctx->c_first_ind = NA;
   pctx->c_first_len = 0;
   pctx->c_middle_ind = NA;
   pctx->c_middle_len = 0;
   pctx->c_street_1_ind = NA;
   pctx->c_street_1_len = 0;
   pctx->c_street_2_ind = NA;
   pctx->c_street_2_len = 0;
   pctx->c_city_ind = NA;
   pctx->c_city_len = 0;
   pctx->c_state_ind = NA;
   pctx->c_state_len = 0;
   pctx->c_zip_ind = NA;
   pctx->c_zip_len = 0;
   pctx->c_phone_ind = NA;
   pctx->c_phone_len = 0;
   pctx->c_since_ind = NA;
   pctx->c_since_len = 0;
   pctx->c_credit_ind = NA;
   pctx->c_credit_len = 0;
   pctx->c_credit_lim_ind = NA;
   pctx->c_credit_lim_len = 0;
   pctx->c_discount_ind = NA;
   pctx->c_discount_len = 0;
   pctx->c_balance_ind = NA;
   pctx->c_balance_len = sizeof(double);
   pctx->c_data_ind = NA;
   pctx->c_data_len = 0;
   pctx->h_date_ind = TRUE;
   pctx->h_date_len = 0;
   pctx->retries_ind = TRUE;
   pctx->retries_len = 0;
   pctx->cr_date_ind = TRUE;
/* pctx->cr_date_len = 7; */
   pctx->cr_date_len = sizeof(ptemp->cr_date);
   if(pPay->byname)
   {
      pctx->c_id_ind = NA;
      execstatus=OCIStmtExecute(p->tpcsvc,pctx->curp1,p->errhp,
		1,0,0,0,OCI_DEFAULT|OCI_COMMIT_ON_SUCCESS);
   }
   else
   {
	pctx->c_last_ind = NA;
	execstatus=OCIStmtExecute(p->tpcsvc,pctx->curp0,p->errhp,
		1,0,0,0,OCI_DEFAULT|OCI_COMMIT_ON_SUCCESS);
   }
   if(execstatus != OCI_SUCCESS) 
   {
   	OCITransRollback(p->tpcsvc,p->errhp,OCI_DEFAULT);
	errcode = OCIERROR(p,execstatus);
	if(errcode == NOT_SERIALIZABLE) 
	{
		return(RECOVERR);
	} else if (errcode == RECOVERR) 
	  {
		return(RECOVERR);
	  } else if (errcode == SNAPSHOT_TOO_OLD) 
	    {
		return(RECOVERR);
	    }
	else 
	{
	   return ERR_DB_ERROR;
	}
    }
    return (ERR_DB_SUCCESS);
}
void tkvcpdone (payctx *ppctx)
{
   payctx pctx = *ppctx;
   if(NULL != pctx.curpi)
   OCIHandleFree((dvoid *)pctx.curpi,OCI_HTYPE_STMT);
   if(NULL != pctx.curp0)
      OCIHandleFree((dvoid *)pctx.curp0,OCI_HTYPE_STMT);
   if(NULL != pctx.curp1)
      OCIHandleFree((dvoid *)pctx.curp1,OCI_HTYPE_STMT);
}
/*
-------------------------------------------------------------------
-----------
Orderstatus transaction
*/
#define SQL_ORD_CUR0 "SELECT /*+ no_index(ICUST1) index (cust icust2) */ rowid FROM cust \
	WHERE c_d_id = :d_id AND c_w_id = :w_id AND c_last= :c_last \
	ORDER BY c_w_id, c_d_id, c_last, c_first"
#define SQL_ORD_CUR1 "SELECT c_id, c_balance, c_first, c_middle,c_last, \
	o_id, o_entry_d, o_carrier_id, o_ol_cnt \
	FROM cust, ordr \
	WHERE cust.rowid = :cust_rowid \
	AND o_d_id = c_d_id AND o_w_id = c_w_id AND o_c_id = c_id \
	ORDER BY o_w_id, o_d_id, o_c_id, o_id DESC"
#define SQL_ORD_CUR2 "SELECT c_balance, c_first, c_middle, c_last,\
	o_id, o_entry_d, o_carrier_id, o_ol_cnt, c_id \
	FROM cust, ordr \
	WHERE c_id = :c_id AND c_d_id = :d_id AND c_w_id =:w_id \
	AND o_d_id = c_d_id AND o_w_id = c_w_id AND o_c_id = c_id \
	ORDER BY o_c_id, o_d_id, o_w_id, o_id DESC"
#define SQL_ORD_CUR3 "SELECT ol_i_id,ol_supply_w_id,ol_quantity,ol_amount, \
	ol_delivery_d\
	FROM ordl \
	WHERE ol_d_id = :d_id AND ol_w_id = :w_id AND ol_o_id = :o_id"
#define SQL_ORD_CUR4 "SELECT count (c_last) FROM cust \
	WHERE c_d_id = :d_id AND c_w_id = :w_id AND c_last = :c_last "
sb4 rid_data(dvoid *ctxp, OCIDefine *dp, ub4 iter, dvoid **bufpp,ub4 **alenp,
	ub1 *piecep, dvoid **indpp, ub2 **rcodepp)
{
   ub4 i;
   ordctx *octx = &(((OraContext *)ctxp)->octx);
   defctx *cbctx = &(((OraContext *)ctxp)->cbctx);
   if (cbctx->reexec) /* if this is the second execute - use entry 0*/
   {
	i=0;
	cbctx->count--; /* count down */
   }
   else
	i=iter;
   *bufpp = octx->c_rowid_ptr[i];
   *indpp = &octx->c_rowid_ind[i] ;
   *alenp = &octx->c_rowid_len[i] ;
   *rcodepp = &octx->c_rowid_rcode[i] ;
   *piecep = OCI_ONE_PIECE;
   return (OCI_CONTINUE);
}
tkvcoinit (OrderStatusData *pOrd,OraContext *p)
{
   int i;
   text stmbuf[8192];
   ordtemp *otemp = &(p->tempvars.ord);
   ordctx *octx = &(p->octx);
   memset(octx,(char)0,sizeof(ordctx));
   octx->cs = 1;
   octx->norow = 0;
   octx->somerows = 10;
   octx->curo0 = NULL;
   octx->curo1 = NULL;
   octx->curo2 = NULL;
   octx->curo3 = NULL;
   octx->curo4 = NULL;
/* get the rowid handles */
   for(i=0;i<100;i++) 
   {
      OCIERROR(p, OCIDescriptorAlloc(p->tpcenv,(dvoid**)&octx->c_rowid_ptr[i],
		OCI_DTYPE_ROWID,0,(dvoid**)0));
   }
   OCIERROR(p,OCIHandleAlloc(p->tpcenv,(dvoid**)&octx->curo0,OCI_HTYPE_STMT,
	0,(dvoid**)0));
   OCIERROR(p,OCIHandleAlloc(p->tpcenv,(dvoid**)&octx->curo1,OCI_HTYPE_STMT,
	0,(dvoid**)0));
   OCIERROR(p,OCIHandleAlloc(p->tpcenv,(dvoid**)&octx->curo2,OCI_HTYPE_STMT,
	0,(dvoid**)0));
   OCIERROR(p,OCIHandleAlloc(p->tpcenv,(dvoid**)&octx->curo3,OCI_HTYPE_STMT,
	0,(dvoid**)0));
   OCIERROR(p,OCIHandleAlloc(p->tpcenv,(dvoid**)&octx->curo4,OCI_HTYPE_STMT,
	0,(dvoid**)0));
/* c_id = 0, use find customer by lastname. Get an array or rowid's back*/
   sprintf((char *) stmbuf, SQL_ORD_CUR0);
   OCIERROR(p,OCIStmtPrepare(octx->curo0,p->errhp,stmbuf,strlen((char *)stmbuf),
	OCI_NTV_SYNTAX,OCI_DEFAULT));
   OCIERROR(p,OCIAttrSet(octx->curo0,OCI_HTYPE_STMT,(dvoid*)&octx->norow,0,
	OCI_ATTR_PREFETCH_ROWS,p->errhp));
/* get order/customer info back based on rowid */
   sprintf((char *) stmbuf, SQL_ORD_CUR1);
   OCIERROR(p,OCIStmtPrepare(octx->curo1,p->errhp,stmbuf,strlen((char *)stmbuf),
	OCI_NTV_SYNTAX,OCI_DEFAULT));
   OCIERROR(p,OCIAttrSet(octx->curo1,OCI_HTYPE_STMT,(dvoid*)&octx->norow,0,
	OCI_ATTR_PREFETCH_ROWS,p->errhp));

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -