複合コードとは、複数の項目をまとめて1つのコードにしたものです。複合コードの各データ項目は、以下の変換規則に従って文字列に変換され、変換された文字列が連結されて1つのコードとなります。
Symfoware/RDB、Oracleまたは、SQL Serverの場合
Navigatorのデータ型 | データ長*5 | Symfoware/RDB | Oracle | SQL Server |
---|---|---|---|---|
CHAR(n) | n | 変換なし | 変換なし | 変換なし |
VARCHAR(n)*1 | n | n桁のCHAR型に変換 | n桁のCHAR型に変換 | n桁のCHAR型に変換 |
NCHAR(n) | n×2 | 変換なし | - | - |
NVARCHAR(n)*2 | n×2 | n桁のNCHAR型に変換 | - | - |
SMALLINT*3 | 6 | 6桁の右詰め前方空白 | - | 6桁の右詰め前方空白 |
INTEGER*3 | 11 | 11桁の右詰め前方空白 | - | 11桁の右詰め前方空白 |
DECIMAL(p,0)*3 | p+1 | p+1桁の右詰め前方空白 | p+1桁の右詰め前方空白 | p+1桁の右詰め前方空白*4 |
NUMERIC(p,0)*3 | p+1 | p+1桁の右詰め前方空白 | - | p+1桁の右詰め前方空白*4 |
DATE | 10 | 10桁のCHAR型に変換 | 10桁のCHAR型に変換 | 10桁のCHAR型に変換 |
TIMESTAMP | 19 | 19桁のCHAR型に変換 | 19桁のCHAR型に変換 | 19桁のCHAR型に変換 |
ODBCまたは、Postgresの場合
Navigatorのデータ型 | データ長*5 | ODBC | Postgres |
---|---|---|---|
CHAR(n) | n | - | 変換なし |
VARCHAR(n)*1 | n | n桁のCHAR型に変換 | n桁のCHAR型に変換 |
NCHAR(n) | n×2 | - | - |
NVARCHAR(n)*2 | n×2 | - | - |
SMALLINT*3 | 6 | 6桁の右詰め前方空白 | 6桁の右詰め前方空白 |
INTEGER*3 | 11 | 11桁の右詰め前方空白 | 11桁の右詰め前方空白 |
DECIMAL(p,0)*3 | p+1 | p+1桁の右詰め前方空白*4 | p+1桁の右詰め前方空白*4 |
NUMERIC(p,0)*3 | p+1 | p+1桁の右詰め前方空白*4 | - |
DATE | 10 | 10桁のCHAR型に変換 | 10桁のCHAR型に変換 |
TIMESTAMP | 19 | 19桁のCHAR型に変換 | 19桁のCHAR型に変換 |
*1:文字型の項目は、左詰めとなります。
*2:日本語文字型の項目は、左詰めとなります。
*3:数値型の項目は、右詰めで前方空白となります。
長さは、桁数+符号部1バイト(+非表示、-左表示、0値表示)となります。
*4:精度15桁の浮動少数点数に丸められるため、pが15を超える場合、変換後の値に誤差が生じることがあります。
*5:データ長とは、複合コードにより各構成項目のデータが、文字データに変換された場合のバイト単位での長さです。複合コードの全体のデータ長は、それぞれの項目のデータ長の合計となります。
注意
日本語文字型と、それ以外のデータ型の連結はできません。
FLOATは、複合コードに使用できません。
DECIMAL(p,0)以外のDECIMALは、複合コードに使用できません。
NUMERIC(p,0) 以外のNUMERICは、複合コードに使用できません。
連結する項目にNULL値がある場合、データベースによって扱いが異なります。
Symfoware/RDBの場合
どれかの項目にNULL値がある場合、連結結果はNULLとなります。
Oracleの場合
すべての項目が空白、またはNULL値の場合、連結結果はNULLとなります。
どれかの項目にNULL値がある場合、NULL値の項目は桁数分の空白に置き換わります。
SQL Serverの場合
NULLとの連結でNULLを使用する設定となっている場合には、どれかの項目にNULL値がある場合、連結結果はNULLとなります。それ以外の場合には、どれかの項目にNULL値がある場合、NULL値の項目は桁数分の空白に置き換わります。従って、全項目がNULL値の場合の連結結果は、全項目の桁数分の空白となります。
ODBCの場合
NULLおよび空白の扱いは、利用しているドライバおよび接続先のデータベースの仕様に依存します。
Postgresの場合
すべての項目が空白の場合、連結結果は桁数分の空白に置き換わります。いずれかの項目にNULL値がある場合、連結結果は NULLとなります。
複合コードの全体のデータ長が80バイトを超える場合、「プライマリー」,「ユニークコード」および「コード」の用途は設定できません。
ODBCドライバで定義したデータソースに対する複合コードの設定は、ODBCドライバのバージョンによっては利用できないことがあります。
Unicodeデータ明細表示機能の場合、NCHAR(n)、およびNVARCHAR(n)のデータ長は、「n×3」となります。
データベースの文字コードがUnicodeの場合、およびPostgresのデータベースの場合、複合コードに指定する文字型項目にはASCII文字のデータのみを持つ項目が指定可能です。日本語などのASCII文字以外の文字がデータに含まれる項目を指定した場合、期待した結果が得られない場合があります。
例
項目 | データ型 | データ長 | 値 |
---|---|---|---|
COL1 | CHAR(6) | 6 | `999999' |
COL2 | SMALLIN | 6 | 11111 |
|
|
|
|
結果 | CHAR(12) | 12 | `999999 11111' |
上記の例で、 COL2がNULL値のとき
| 連結結果はNULLとなります。 |
| 連結結果は`999999 'となります。 |
| 利用しているドライバおよび接続先のデータベースの仕様に依存します。 |