12.2.1 HiRDB/シングルサーバの場合
データロード(データベース作成ユティリティ)を実行するUAPを例にして説明します。
HiRDB/シングルサーバの場合のサーバ,クライアント構成例を次の図に示します。
図「HiRDB/シングルサーバの場合のサーバ,クライアント構成例」のようなサーバ,クライアント構成で,データロードをするUAPを実行する場合,事前に次の設定をしておきます。
-
次のクライアント環境定義を設定します。
- PDSYSTEMID:
-
HiRDBサーバのHiRDB識別子(HRD1)を設定します。
- PDASTHOST:
-
HiRDB Control Manager - Agentのホスト名(HOST1)を設定します。
- PDASTPORT:
-
HiRDB Control Manager - Agentのポート番号(22201)を設定します。
-
HiRDBサーバ側に,データロードで必要となる制御情報ファイル,及び入力データファイルを用意します。
-
HiRDB管理者がUSERA(パスワードUSERA)で,データロードをする表の所有者がUSERB(パスワードUSERB)であったとします。この場合,次のクライアント環境定義を設定します。
PDASTUSER=USERA/USERA PDUSER=USERB/USERB
これで,データロードをするUAPを実行できるようになります。なお,各クライアント環境定義については,「クライアント環境定義の設定内容」を参照してください。
データロードを実行するUAPの例を次に示します。
#include <stdio.h> #include <string.h> #include <stdlib.h> EXEC SQL BEGIN DECLARE SECTION; char CmdLine[30000]; /* CmdLine変数 */ long ReturnCode; /* リターンコード受取変数 */ long OutBufLen; /* 実行結果受取領域長 */ long CmdRetCode; /* 実行コマンドリターンコード 受取変数 */ long OutDataLen; /* 実行結果長受取変数 */ PDOUTBUF OutBuf; /* 実行結果受取領域 */ char EnvGroup[256]; /* 環境変数グループ名変数 */ EXEC SQL END DECLARE SECTION; void main() { strcpy(CmdLine,"pdhold -r RDDATA10"); /* 実行コマンドライン (RDエリア閉塞)設定 */ OutBuf = malloc(30000); /* 実行結果受取領域確保 */ if (OutBuf == NULL){ /* メモリ確保失敗 */ printf("メモリ確保失敗\n"); return ; } OutBufLen = 30000 ; /* 実行結果受取領域長設定 */ EnvGroup[0] = '\0' ; /* 環境変数グループ設定なし */ /* コマンド実行 */ EXEC SQL COMMAND EXECUTE :CmdLine, :ReturnCode, :OutBufLen, :OutDataLen, :OutBuf, :CmdRetCode, :EnvGroup ; if (ReturnCode == p_rdb_RC_NORM) { /* COMMAND EXECUTE正常終了 */ if (CmdRetCode==0) { /* 実行コマンド正常 */ /* 実行コマンドライン(データロード実行)設定 */ strcpy(CmdLine,"pdload -i c -be ZAIKO c:\HiRDB_S\conf\LOAD"); EXEC SQL COMMAND EXECUTE :CmdLine, :ReturnCode, :OutBufLen, :OutDataLen, :OutBuf, :CmdRetCode, :EnvGroup ; if (ReturnCode == p_rdb_RC_NORM) { /* COMMAND EXECUTE正常終了 */ if (CmdRetCode==0) { /* 実行コマンド正常 */ printf("pdload command successfully\n"); printf("%s\n", OutBuf); } else { /* 実行コマンドエラー */ printf("pdload command Error,Code = %d\n", CmdRetCode); printf("%s\n", OutBuf); } } else { /* COMMAND EXECUTEエラー */ printf("COMMAND EXECUTE Error,Code = %d\n", ReturnCode); printf("%s\n", OutBuf); } } else { /* 実行コマンドエラー */ printf("pdhold command Error,Code = %d\n", CmdRetCode); printf("%s\n", OutBuf); } strcpy(CmdLine,"pdrels -r RDDATA10"); /* 実行コマンドライン (RDエリア閉塞解除)設定 */ EXEC SQL COMMAND EXECUTE :CmdLine, :ReturnCode, :OutBufLen, :OutDataLen, :OutBuf, :CmdRetCode, :EnvGroup ; if (ReturnCode == p_rdb_RC_NORM) { /* COMMAND EXECUTE正常終了 */ if (CmdRetCode!=0) { /* 実行コマンドエラー */ printf("pdrels command Error,Code = %d\n", CmdRetCode); printf("%s\n", OutBuf); } } else { /* COMMAND EXECUTEエラー */ printf("COMMAND EXECUTE Error,Code = %d\n", ReturnCode); printf("%s\n", OutBuf); } } else { /* COMMAND EXECUTEエラー */ printf("COMMAND EXECUTE Error,Code = %d\n", ReturnCode); printf("%s\n", OutBuf); } return ; }