8.10.5 UOCの使用例

ここでは,UOCを使用した表の再編成の例について説明します。

なお,使用例中のUOCコーディング例は,サンプルデータべースとして提供されています。格納ディレクトリは,%PDDIR%¥sample¥sampleUOCです。

<この項の構成>
(1) UOCを使用した表の再編成の例

(1) UOCを使用した表の再編成の例

表の再編成をするときに,データベースに登録された日時が2001年以前のデータを削除します。

(a) データべースの表定義

 CREATE TABLE 会員名簿 (会員番号 INTEGER,
                    会員名 NCHAR(20),
                    会員住所 NVARCHAR(100),
                    入会日時 DATE NOT NULL WITH DEFAULT);

(b) コマンド形式

pdrorg -k rorg -t 会員名簿 制御情報ファイル

(c) 制御情報ファイルの内容

unload アンロードデータファイル名 uoc_lib=ライブラリ名
unlduoc entry=old_data_delete

(d) UOCコーディング例

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <pdutluoc.h>   ..........................................................1
void old_data_delete (
   UTL_UOC_INF         *uocinf             /* A(UOC interface area)      */   ...2
) {
   UTL_UOC_DATA_BUF    *addr_list;         /* A(data address list)       */
   unsigned char       *date_adr;          /* A(DATE)                    */
   static unsigned char cyear[2];          /* compare year               */

   switch(uocinf->req_cd){   ....................................................3
   case UTL_UOC_START:
/*------------------------------------------------------------------------*/
/*  START                                                                 */
/*------------------------------------------------------------------------*/
       cyear[0] = 0x20;                    /* The 21th century           */
       cyear[1] = 0x01;                    /* (2001)                     */
       uocinf->rtn_code = UTL_UOC_NML;
       break;
   case UTL_UOC_EDIT:
/*------------------------------------------------------------------------*/
/*  EDIT                                                                  */
/*------------------------------------------------------------------------*/
       addr_list = uocinf->data_adr;
       date_adr = addr_list->data[3];
       if (memcmp(date_adr,cyear,sizeof(cyear)) < 0){
           uocinf->unload_flg = UTL_UOC_ROWNOPUT;
       }else{
           uocinf->unload_flg = UTL_UOC_ROWPUT;
       }   ......................................................................4
       uocinf->rtn_code = UTL_UOC_NML;
       break;
   case UTL_UOC_END:
   case UTL_UOC_TERM:
/*----------------------------------------------------------------------*/
/*  END                                                                 */
/*----------------------------------------------------------------------*/
       uocinf->rtn_code = UTL_UOC_NML;
       break;
   default:
       strcpy(uocinf->err_msg,"Invalid request code");
       uocinf->rtn_code = UTL_UOC_ERR;
   }
   return;
}

[説明]
  1. HiRDBが提供する,UOC作成用のヘッダを引き込みます。
  2. UOCインタフェース領域のアドレスを引数として受け取ります。
  3. 呼び出し種別を判定して,それぞれの処理をします。
  4. データ(日付)を判定して,格納フラグを設定します。