第5章 アプリケーションのコンパイル・リンク
5.2 Windows(R) を使用した場合のアプリケーションのコンパイル・リンク
5.2.5 コンパイル時のコネクション先の指定
アプリケーションのコンパイル時に、データベース名を指定することによって、アプリケーション中にCONNECT文を記述 しなくてもデータ操作を行うことができます。以下に例を示します。
コンパイルコマンドの詳細については、“5.1.5 コンパイル時のコネクション先の指定”を参照してください。
コンパイルコマンドの詳細については、“5.2.5 コンパイル時のコネクション先の指定”を参照してください。
コンパイル時に接続するデータベース名を指定した例
(1) コンパイル時にデータベース名“DB01”を指定します。
(2) アプリケーション中に、CONNECT文は一切記述されていません。
(3) アプリケーション実行時に、コンパイル時に指定した“DB01”に接続されます。
DEFAULT_CONNECTIONに指定する
動作環境ファイルのDEFAULT_CONNECTIONにデータベース名を指定することによって、アプリケーション中に CONNECT文を記述しなくてもデータ操作を行うことができます。以下に例を示します。
DEFAULT_CONNECTIONにデータベース名を指定した例
(1) コンパイル時にはデータベース名を指定しません。
(2) クライアント用の動作環境ファイルのDEFAULT_CONNECTIONに“DB01”を指定します。
(3) アプリケーション中に、CONNECT文は一切記述されていません。
(4) アプリケーション実行時に、クライアント用の動作環境ファイルで指定した“DB01”に接続されます。
2.4.4 マルチRDB運用のコネクション
Symfoware/RDBでは、ローカルアクセスを行うとき、複数のSymfoware/RDBの動作環境を作成して運用することができ ます。
このような運用形態を、マルチRDB運用といいます。
アプリケーションを利用して、ローカルアクセス時に異なるSymfoware/RDBに接続する場合は、データベース名にシステ ム名を付けて指定します。
EXEC SQL CONNECT TO 'rdbsys2.DB01';
CONNECT文を複数記述することによって、複数のSymfoware/RDB環境に接続することができます。以下に例を示しま す。
アプリケーションをマルチRDB環境で利用する
システム名を省略した場合は、環境変数RDBNAMEで指定したものが有効となります。以下に例を示します。
環境変数での指定例
-
Cシェルで指定する場合 setenv RDBNAME rdbsys1-
bash、Bシェル、Kシェルで指定する場合RDBNAME=rdbsys1; export RDBNAME
set RDBNAME = rdbsys1
2.5 文字コード系の考慮
アプリケーション開発を行う場合に、文字コード系に関して考慮しなければならない点を説明します。
2.5.1 文字コード系の決定
C言語およびCOBOL言語のアプリケーションで使用する文字コード系について説明します。
アプリケーションで使用可能な文字コード系
C言語およびCOBOL言語のアプリケーションでは、以下の文字コード系が使用できます。
・
EUCコード・
シフトJISコード・
UNICODE使用する文字コード系はアプリケーションのロケールで指定します。アプリケーションのロケールは、以下のように指定し ます。
表 2.14 アプリケーションのロケールの指定
対象OS ロケールの指定
Solaris Linux
環境変数LANGでロケールを指定します。
Windows OSのロケールに従います。
UNIX系システムでは環境変数LANGに、Cロケールを指定することも可能です。Symfoware/RDBは、ロケールの言語が jaで始まる場合は日本語のメッセージを出力し、それ以外のロケール(Cロケールなど)の場合は英語でメッセージを出力 します。Cロケールの場合、アプリケーションが動作する環境によって、アプリケーションの文字コード系は以下のようにな ります。
アプリケーションが動作する環境 アプリケーションの文字コード系
Symfoware/RDBと同一サーバのアプリ
ケーション
Symfoware/RDBインストール時に指定
するデータベースの文字コード系 Connection Managerを利用するアプリ
ケーション
Connection Managerインストール時に 指定するアプリケーションの文字コード 系
クライアント端末のアプリケーション Symfoware Server クライアント機能イン ストール時に指定するアプリケーション の文字コード系
ホスト変数の文字コード系
アプリケーションで使用するホスト変数、動的パラメタ、およびSQLMSGの文字コード系について説明します。
C言語のアプリケーションで使用するホスト変数の文字コード系
アプリケーションで使用するホスト変数、動的パラメタ、およびSQLMSGの文字コード系は、環境変数LANGの値に よって決定します。これを変更するには、クライアント用の動作環境ファイルのパラメタCHAR_SETおよびNCHAR_CODE で指定します。
文字列型ホスト変数の文字コード系は、パラメタCHAR_SETに指定します。指定する値を以下に示します。
表2.15 文字列型ホスト変数の文字コード系
文字コード系 CHAR_SETの指定値 EUCコード S90コード EUC_S90
文字コード系 CHAR_SETの指定値 U90コー
ド
EUC_U90またはEUC
シフトJISコード SJIS UNICOD
E
UTF-8形 式
UTF8
各国語文字列型ホスト変数の文字コード系は、パラメタNCHAR_CODEに指定します。指定する値を以下に示しま す。
表2.16 各国語文字列型ホスト変数の文字コード系
文字コード系 NCHAR_CODEの指定値
EUCコード
S90コード EUC_S90
U90コード EUC_U90またはEUC
S90コード
(COBOL_EUC形式)
COBOL_EUC_S90 U90コード
(COBOL_EUC形式)
COBOL_EUC_U90または COBOL_EUC
シフトJISコード SJIS
UNICODE
UTF-8形式 UTF8
UCS-2形式(注) UCS2 バイトスワップした
UCS-2形式(注)
UCS2B
注) UCS-2形式およびバイトスワップしたUCS-2形式では、補助文字(1~16面の4バイト文字)は2文字となります。
クライアント用の動作環境ファイルに文字コード系が指定されていない場合は、環境変数LANGの値によってデフォ ルトの文字コード系が決まります。環境変数LANGと使用される文字コード系の関係を以下に示します。
表2.17 デフォルトの文字コード系
環境変数LANGの値 文字列型ホスト変数 の格納形式
各国語文字列型ホ スト変数の格納形
式
ja EUCコード
ja_JP.PCK シフトJISコード
ja_JP.UTF-8 UTF-8形式
COBOL言語のアプリケーションで使用するホスト変数の文字コード系
アプリケーションで使用するホスト変数、動的パラメタ、およびSQLMSGでは以下の文字コード系が使用できます。
文字列型ホスト変数および各国語文字列型のホスト変数の文字コード系は、環境変数LANGの値によって決まりま す。環境変数LANGとコード系の関係を以下に示します。
表2.18 COBOL言語のアプリケーションの文字コード系
環境変数LANGの値 文字列型ホスト変数の格納形 式
各国語文字列型ホスト変数の格納 形式
ja EUCコード COBOL_EUC形式
ja_JP.PCK シフトJISコード
アプリケーションが使用する文字コード系と、データベースに格納されるデータの文字コード系が異なる場合、Symfoware/
RDBは自動的にコード変換を行います。
コード変換について以下の順に説明します。
・
コード変換の発生条件・
コード変換と文字列長・
コード変換指定に従わないものコード変換の発生条件
アプリケーションが扱うデータとデータベースに格納されるデータの文字コード系が異なる場合、Symfoware/RDBは双方 向でコード変換を行って文字コード系を調整します。
データベースに格納されるデータを抽出する際、アプリケーションの文字コード系に存在しない文字コードは、アンダー スコア“_”に変換されます。逆に、アプリケーションからデータベースに格納する際、データベースの文字コード系に存在 しない文字コードが含まれると、コード変換エラーとなります。
C言語の場合のコード変換
クライアント用の動作環境ファイルのパラメタCHAR_SETおよびNCHAR_CODEに指定された文字コード系と、デー タベースの文字コード系の間のコード変換の有無を以下に示します。
表2.20 アプリケーションのコード変換(文字列型)
CHAR_SETの 指定
データベースの文字コード系 EUC
コード のS90
コード EUC コード のU90
コード
シフト JISコー
ド
UNICOD E
EUC_S90 ◎ × ○ ○
EUC_U90
× ◎ ○ ○
EUC
SJIS ○ ○ ◎ ○
UTF-8 ○ ○ ○ ◎
◎:コード変換を行わず処理
○:コード変換を行って処理
×:エラー(文字コード系を指定することはできません)
表2.21 アプリケーションのコード変換(各国語文字列型)
NCHAR_COD Eの指定
データベースの文字コード系 EUC
コード のS90
コード EUC コード のU90
コード
シフト JISコー
ド
UNICOD E
EUC_S90
◎ × ○ ○
COBOL_EUC _S90
EUC_U90
× ◎ ○ ○
EUC
COBOL_EUC _U90 COBOL_EUC
SJIS ○ ○ ◎ ○
UTF-8
○ ○ ○ ◎
UCS2 UCS2B
◎:コード変換を行わず処理
○:コード変換を行って処理
×:エラー(文字コード系を指定することはできません)
コード変換と文字列長
データベースの文字コード系と、SQL埋込みホストプログラム内のホスト変数で使用する文字列の文字コード系が異なる 場合、データ操作でコード変換が発生します。それぞれの文字コード系によってはデータ長が増減することがあるため、
SQL埋込みホストプログラムを作成する場合に考慮が必要です。
ここでは、文字コード系と使用できる文字列長について説明します。
文字コード系における1文字のバイト数
SQL埋込みホストプログラム中のホスト変数内で使用できる文字列の文字コード系は、EUCコード、UTF-8形式または シフトJISコードです。また、各国語文字列の文字コード系は、EUCコード、COBOL_EUC形式、UCS-2形式、バイトス ワップしたUCS-2形式、UTF-8形式またはシフトJISコードです。
それぞれの文字コード系における、1文字のバイト数を以下に示します。
表2.22 1文字のバイト数
文字コード系 文字の種別 バイト数
EUCコード
英数字および制御文字 1バイト
拡張漢字および利用者定義文字 3バイト
その他の日本語文字 2バイト
UTF-8形式 英数字および制御文字 1バイト
各国語文字 2~6バイト
シフトJIS コード
英数字および制御文字 1バイト
半角カタカナ 1バイト
各国語文字 2バイト
また、それぞれのコード系における、各国語文字1文字のバイト数を以下に示します。
表2.23 1文字のバイト数(各国語文字の場合)
文字コード系 文字の種別 バイト数
EUCコード 拡張漢字および利用者定義文字 3バイト
その他の日本語文字 2バイト
COBOL_EUC形
式 日本語文字 2バイト
UCS-2形式 すべての文字 2バイトまたは4バイト
(注) バイトスワップした
UCS-2形式 すべての文字 2バイトまたは4バイト
(注)
UTF-8形式 日本語文字 2~6バイト
シフトJISコード 日本語文字 2バイト
注) UCS-2形式およびバイトスワップしたUCS-2形式では、補助文字(1~16面の4バイト文字)は2文字となります。
コード変換と文字列の拡大・縮小
データベースの文字コード系とSQL埋込みホストプログラム内で使用する文字列の文字コード系が異なる場合、デー タに対してコード変換が発生します。このとき、同じ文字でも文字コード系によってバイト数が異なる場合があるため、
文字列が拡大・縮小することがあります。
文字コード系による文字列の拡大・縮小の割合を以下に示します。