外部ストアド プロシージャからのSQLリクエストに対し、データベースが8バイト アクティビティ カウントを返すようにしたい場合には、親セッションとデフォルト セッションに両方から要求させる必要があります。8バイト アクティビティ カウントは、拡張文ステータス(ESS)応答パーセルで返されます。したがって、ESSパーセルを要求することにより、8バイト アクティビティ カウントを要求することができます。
BTEQ (または多くの他のSQLプロセッサ)から実行する親セッションは、デフォルトでESSパーセルに要求します。さらに外部ストアド プロシージャ コードはESSパーセルを要求し、データベースからのSQL応答でこのパーセルを処理する必要があります。
以下のサンプルコードは、ESSパーセルを要求し、データベースからの応答でESSパーセルを処理するには、外部ストアド プロシージャをどのようにコード化すればよいかを示すものです。関連するコードを太字フォントで示します。
/* Set DBCAREA options. */ static void set_options(DBCAREA *dbcarea_pt) { dbcarea_pt->change_opts = 'Y'; ... dbcarea_pt->data_encryption= 'N'; dbcarea_pt->statement_status = 'E'; dbcarea_pt->create_default_connection = 'Y'; } /* Fetch parcels and check activity type. */ static Int16 fetch_request(DBCAREA *dbcarea_pt, int stmnt_no, char *resultx, SQL_TEXT *error_message) { ... struct CliSuccessType *SuccPcl; struct CliOkType *OKPcl; struct CliFailureType *FailPcl; struct CliStatementStatusType *EssPcl; ... while (status == OK) { DBCHCL(&result, cnta, dbcarea_pt); count=1; if (result == REQEXHAUST) status = STOP; else if (result != EM_OK) status = FAILED; else { switch(dbcarea_pt->fet_parcel_flavor) { case PclSUCCESS : SuccPcl = (struct CliSuccessType *)dbcarea_pt->fet_data_ptr; memcpy(acc.acc_c, SuccPcl->ActivityCount, 4); sprintf(strptr, "[%d]Succ:Act(%d)|\0", stmnt_no, SuccPcl->ActivityType); strcat(resultx, strptr); break; case PclOK : OKPcl = (struct CliOkType *)dbcarea_pt->fet_data_ptr; sprintf(strptr, "[%d]OK:Act(%d)|\0", stmnt_no, OKPcl->ActivityType); strcat(resultx, strptr); break; case PclSTATEMENTSTATUS: EssPcl = (struct CliStatementStatusType *) dbcarea_pt->fet_data_ptr; sprintf(strptr, "[%d]ESS:Act(%d)|\0", stmnt_no, EssPcl->ActivityType); strcat(resultx, strptr); break; case PclRECORD : memcpy(&item, dbcarea_pt->fet_data_ptr, 4); //cntx = item; break; ... }