スケーラブルデータベースサーバ HiRDB Version 8 コマンドリファレンス(Windows(R)用)

[目次][索引][前へ][次へ]

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. データ(日付)を判定して,格納フラグを設定します。