DBアダプタ電文のXMLフォーマット定義ファイル(DBアダプタ用のXMLフォーマット定義ファイル)は,SQLオペレーション定義ファイルを作成してから,csamkxmlsコマンドで作成します。
SQLオペレーション定義ファイルは,実行環境でDBアダプタを介してアクセスするデータベースの情報や,SQLの実行形式を定義するファイルです。DBアダプタ用のXMLフォーマット定義ファイルを作成するときの基となるファイルです。
SQLオペレーション定義ファイルとDBアダプタ用のXMLフォーマット定義ファイルの作成方法を次に説明します。
- <この項の構成>
- (1) SQLオペレーション定義ファイルを作成する
- (2) DBアダプタ用のXMLフォーマット定義ファイルを作成する
SQLオペレーション定義ファイルは,テキストエディタなどを使用してXML文書形式で作成します。XML文書で使用できない「<」,「>」,「&」などの文字を使用する場合,エスケープするか,CDATAセクションを利用する必要があります。
要素,属性およびテキストデータは,W3CのXMLの仕様に従って指定します。
なお,XML名前空間は使用できません。
作成するXML文書の詳細を説明します。
(a) ファイル名
SQLオペレーション定義ファイルのファイル名は,次の形式で指定します。
(b) 構造
SQLオペレーション定義ファイルの構造を次に示します。
図4-4 SQLオペレーション定義ファイルの構造
![[図データ]](figure/zc040200.gif)
(c) SQLオペレーション定義ファイルの形式
SQLオペレーション定義ファイルの形式を次に示します。なお,斜体の文字は可変値を表します。
<?xml version="XMLのバージョン" encoding="文字コード"?>
<DBadapter_SQL_OPERATION>
<DATABASE_DATA>
<DB_NAME>データベース参照名</DB_NAME>
<DB_TYPE>データベース種別</DB_TYPE>
</DATABASE_DATA>
<SQL_DATA>
<SQL識別子 out_maxOccurs="検索結果出力最大件数">
SQL命令 <引数要素名 dba_inf="引数の種別" data_type="データ型"/>
</SQL識別子>
:
</SQL_DATA>
<MULTI_SQL_DATA>
<MAX_SQL_NO>1回のサービス部品実行要求で実行するSQL文の最大個数</MAX_SQL_NO>
</MULTI_SQL_DATA>
</DBadapter_SQL_OPERATION> |
SQLオペレーション定義ファイルで定義する内容について次に説明します。
- XML宣言
- XMLのバージョンには,XMLの言語仕様に従ってXMLのバージョンを指定します。文字コードにはUTF-8を指定してください。なお,文字コードの指定は省略できます。省略した場合の値は「UTF-8またはUTF-16」になります。
<?xml version="XMLのバージョン" encoding="文字コード"?> |
- ルート要素(要素名:DBadapter_SQL_OPERATION)
- SQLオペレーション定義ファイルのルート要素です。
<DBadapter_SQL_OPERATION>
:
</DBadapter_SQL_OPERATION> |
- データベース情報(要素名:DATABASE_DATA)
- 下位の要素(DB_NAMEおよびDB_TYPE)で,データベースの情報を指定します。
<DATABASE_DATA>
データベース参照名
データベース種別
</DATABASE_DATA> |
- データベース参照名(要素名:DB_NAME)
- DB Connectorのデータベース参照名を指定します。
<DB_NAME>データベース参照名</DB_NAME> |
- データベース種別(要素名:DB_TYPE)
- データベースの種別として次のどれかを指定します。
- HIRDB
DBMSとしてHiRDBを使用する場合(DB ConnectorとしてDBConnector_DABJ_CP/XA.rarを使用する場合)に指定します。
- HIRDB-TYPE4
DBMSとしてHiRDBを使用する場合(DB ConnectorとしてDBConnector_HiRDB_Type4_CP/XA.rarを使用する場合)に指定します。
- ORACLE
DBMSとしてOracleを使用する場合(DB ConnectorとしてDBConnector_DABJ_CP/XA.rarを使用する場合)に指定します。
- ORACLE-THIN
DBMSとしてOracleを使用する場合(DB ConnectorとしてDBConnector_Oracle_CP/XA.rarを使用する場合)に指定します。
<DB_TYPE>データベース種別</DB_TYPE> |
- SQL情報(要素名:SQL_DATA)
- 下位の要素(SQL識別子およびSQL実行文)で,実行するSQLの情報を指定します。
<SQL_DATA>
SQL識別子
SQL実行文
</SQL_DATA> |
- SQL識別子(要素名:任意((1~256文字)))
- 実行するSQLを識別するための要素です。下位の引数要素でSQL実行文を指定します。属性としてout_maxOccursを指定できます。また,実行するSQL命令の数にあわせて複数回指定できます。
- なお,SQL識別子の名称として「DBadapter」および「DBA_MULTI_SQL」は指定できません。
<SQL識別子 out_maxOccurs="検索結果出力最大件数">
SQL実行文
</SQL識別子>
: |
- out_maxOccurs
- 検索結果の最大出力件数を指定します。省略した場合は1000が設定されます。0を指定した場合は,2147483647が設定されます。
- SQL実行文
- SQL実行文を指定します。SQLの構文は,利用するデータベースの仕様に従います。SQL実行文の表や列の名称およびデータなどの可変部分(引数要素)を指定します。
- なお,SQL文の終わりを示すセミコロン(;)は必要ありません。
SQL命令 <引数要素名 dba_inf="引数の種別" data_type="データ型"/> |
- なお,SQL実行文の先頭は「SELECT△」または「INSERT△」のどちらかを指定します(△は半角スペース)。ただし,「SELECT△」または「INSERT△」の直後に引数要素がある場合,「△」(半角スペース)は省略できます。
- 指定内容を次に示します。
- SQL命令
- 指定できるSQL命令はSELECTまたはINSERTです。
- SELECTで検索できるデータ型について,次の表に示します。
表4-1 SELECTで検索できるデータ型(HiRDBの場合)
HiRDBのデータ型 | 検索の可否 |
---|
DBPSV※の場合 | HiRDB Type4 JDBC Driverの場合 |
---|
INT〔EGER〕 | ○ | ○ |
SMALLINT | ○ | ○ |
〔LARGE〕 DEC〔IMAL〕 NUMERIC | ○ | ○ |
FLOAT DOUBLE PRECISION | ○ | ○ |
SMALLFLT REAL | ○ | ○ |
CHAR〔ACTER〕 | ○ | ○ |
VARCHAR CHAR〔ACTER〕VARYING | ○ | ○ |
NCHAR NATIONAL CHAR | ○ | ○ |
NVARCHAR NATIONAL CHAR〔ACTER〕VARYING NCHAR VARYING | ○ | ○ |
MCHAR | ○ | ○ |
MVARCHAR | ○ | ○ |
DATE | ○ | ○ |
TIME | ○ | ○ |
TIMESTAMP | ○ | ○ |
INTERVAL YEAR TO DAY | - | - |
INTERVAL HOUR TO SECOND | - | - |
BLOB BINARY LARGE OBJECT | - | - |
BINARY | - | - |
BOOLEAN | - | - |
- (凡例)
- ○:SELECTで検索できます。
- -:SELECTで検索できません。
- 注
- 〔 〕で囲まれた部分は省略できることを意味します。
- 注※
- DBPSVとは,Cosminexus DABroker LibraryのJdbcDbpsvDriverです。
表4-2 SELECTで検索できるデータ型(Oracleの場合)
Oracleのデータ型 | 検索の可否 |
---|
DBPSV※1の場合 | Oracle JDBC Thin Driverの場合 |
---|
VARCHAR2 | ○ | ○ |
NVARCHAR2 | ○ | ○ |
NUMBER | ○ | ○ |
LONG | ○ | ○ |
DATE | ○ | ○ |
BINARY_FLOAT※2 | - | - |
BINARY_DOUBLE※2 | - | - |
TIMESTAMP | - | - |
TIMESTAMP WITH TIME ZONE | - | - |
TIMESTAMP WITH LOCAL TIME ZONE | - | - |
INTERVAL YEAR TO MONTH | - | - |
INTERVAL DAY TO SECOND | - | - |
RAW | - | - |
LONG RAW | - | - |
ROWID | ○ | ○ |
UROWID | -※3 | - |
CHAR | ○ | ○ |
NCHAR | ○ | ○ |
CLOB | ○ | ○ |
NCLOB | ○ | ○ |
BLOB | - | - |
BFILE | - | - |
ユーザ定義型(オブジェクト型) | - | - |
ユーザ定義型(REFデータ型) | - | - |
ユーザ定義型(VARRAY) | - | - |
ユーザ定義型(ネストした表) | - | - |
- (凡例)
- ○:SELECTで検索できます。
- -:SELECTで検索できません。
- 注※1
- DBPSVとは,Cosminexus DABroker LibraryのJdbcDbpsvDriverです。
- 注※2
- 接続するデータベースがOracle10gの場合だけ使用できます。
- 注※3
- SELECTで検索してもエラーにはなりませんが,検索した場合の動作は保証されません。
- ●ポイント
- DBアダプタで検索できないデータ型でも,データベースが提供する関数(ファンクション)を使用して検索できるデータ型に変換できれば,検索できるようになります。
- OracleのTIMESTAMP型(列名:c_ts)をTO_CHARファンクションでVARCHAR2型に変換して検索する場合の例を次に示します。
SELECT TO_CHAR(c_ts) FROM 表名
- 引数要素名
- 任意の引数要素の名称を指定します。複数の引数要素を同一名称で指定した場合,同じ引数として扱われます。同一名称の引数要素で,それぞれの属性dba_infおよびdata_typeに異なる値を設定した場合はエラーになります。
- dba_inf="引数の種別"
- 引数の種別を指定します。
- 引数の種別の種類として指定できる内容を次に示します。
- table
引数がデータベースに実在するテーブルの名称の場合に指定します。引数として利用するデータはstring型です。
- column
引数がデータベースに実在する列の名称の場合に指定します。引数として利用するデータはstring型です。
- data
引数がテーブルおよび列の名称以外のデータの場合に指定します。この値を指定した場合,引数として利用するデータのデータ型を属性data_typeに指定する必要があります。また,引数として利用するデータを表4-1および表4-2に示すjavaのデータ型またはクラスに変換して,SQL文に埋め込みます。引数として利用するデータを変換できない場合は,エラーとなります。
なお,この値を指定した場合,引数要素をINパラメタ(?パラメタまたはバインド変数)として扱います。SQL文中にINパラメタを指定できる個所は,利用するデータベースの仕様に従います。指定できない個所にINパラメタを定義した場合,エラーになります。なお,SQLの実行時に,引数要素は「?」に置き換えられて実行されます。
- preset
引数がテーブルおよび列の名称以外のデータの場合に指定します。この値を指定した場合,引数として利用するデータをそのままSQL文に埋め込みます。引数として利用するデータはstring型です。
- data_type="データ型"
- 属性dba_infにdataを指定した場合に,引数として利用するデータの型を指定します。データベースのデータ型とdata_typeに指定できるデータの型の対応を次の表に示します。
表4-3 data_typeに指定できるデータ型(HiRDBの場合)
HiRDBのデータ型 | data_typeに指定できるデータ型 | 引数として利用するデータの変換先のデータ型およびクラス |
---|
INT〔EGER〕 | INTEGER | int |
SMALLINT | SMALLINT | short |
〔LARGE〕 DEC〔IMAL〕 NUMERIC | DECIMAL | java.math.BigDecimal |
FLOAT DOUBLE PRECISION | FLOAT | double |
SMALLFLT REAL | REAL | float |
CHAR〔ACTER〕 | CHAR | java.lang.String |
NCHAR NATIONAL CHAR |
MCHAR |
VARCHAR CHAR〔ACTER〕VARYING | VARCHAR | java.lang.String |
NVARCHAR NATIONAL CHAR〔ACTER〕VARYING NCHAR VARYING |
MVARCHAR |
DATE | DATE | java.sql.Date |
TIME | TIME | java.sql.Time |
TIMESTAMP | TIMESTAMP | java.sql.Timestamp |
注 〔 〕で囲まれた部分は省略できることを意味します。
表4-4 data_typeに指定できるデータ型(Oracleの場合)
Oracleのデータ型 | data_typeに指定できるデータ型 | 引数として利用するデータの変換先のデータ型およびクラス |
---|
DBPSV※1の場合 | Oracle JDBC Thin Driverの場合 |
---|
LONG | LONGVARCHAR | LONGVARCHAR | java.io.Reader |
NUMBER | NUMERIC | NUMERIC | java.math.BigDecimal |
VARCHAR2 | VARCHAR | VARCHAR | java.lang.String |
NVARCHAR2 | VARCHAR | - |
ROWID | CHAR | CHAR |
CHAR | CHAR | CHAR |
NCHAR | CHAR | - |
CLOB | CLOB | CLOB※2 | - DBPSV※1の場合
java.sql.Clob
- Oracle JDBC Thin Driverの場合
java.io.Reader
|
NCLOB | CLOB | - |
DATE | DATE※3 | DATE※3 | java.sql.Date |
TIME※4 | TIME※4 | java.sql.Time |
TIMESTAMP※5 | TIMESTAMP※5 | java.sql.Timestamp |
- (凡例)
- -:指定できません。
- 注※1
- DBPSVとは,Cosminexus DABroker LibraryのJdbcDbpsvDriverです。
- 注※2
- JDBCドライバのバージョンが10.2の場合にだけ指定できます。10.2以外のバージョンのJDBCドライバを使用した場合,データが破損するおそれがあります。
- 注※3
- 設定する値の形式が「yyyy-mm-dd」の場合に指定します。
- 注※4
- 設定する値の形式が「hh:mm:ss」の場合に指定します。
- 注※5
- 設定する値の形式が「yyyy-mm-dd hh:mm:ss」の場合に指定します。
- 複数SQL文実行情報(要素名:MULTI_SQL_DATA)
- サービスリクエスタからの1回のサービス部品実行要求で複数のSQL文を実行する場合に,実行するSQL文の最大個数を,下位の要素(MAX_SQL_NO)で指定します。単一のSQL文を実行する場合には,この要素は省略できます。
<MULTI_SQL_DATA>
実行するSQL文の最大個数
</MULTI_SQL_DATA> |
- 実行するSQL文の最大個数(要素名:MAX_SQL_NO)
- 実行するSQL文の最大個数(サービスリクエスタからの要求電文のDBA_MULTI_SQL要素の最大出現回数)を,1~65535の範囲内で指定します。省略した場合の値は「1024」になります。
<MAX_SQL_NO>1回のサービス部品実行要求で実行するSQL文の最大個数</MAX_SQL_NO> |
(d) 作成例
SQLオペレーション定義ファイルの作成例を次に示します。
- 作成例の条件
- データベース参照名:DB_SERVER1
- スキーマ名:DBA
- テーブル名:受注表
- テーブル構成:
受注番号 (INTEGER) | 得意先コード(CHAR) | 商品コード (CHAR) | 受注個数 (INTEGER) |
---|
1 | AA001 | 0001 | 5 |
2 | AB002 | 0001 | 1 |
3 | AA001 | 0102 | 3 |
4 | XA005 | 0103 | 1 |
5 | AA001 | 0105 | 1 |
- 実行するSQLの形式:
OPERATION1:SELECT * FROM DBA.受注表 WHERE <val1> <val2> <val3>
OPERATION2:SELECT <val1> SUM(<val2>) FROM DBA.受注表 GROUP BY <val3>
OPERATION3:INSERT INTO DBA.受注表 VALUES(<val1>,<val2>,<val3>,<val4>) |
- SQLオペレーション定義ファイルの作成例(単一のSQL文を実行する場合)
<?xml version="1.0" encoding="UTF-8" ?>
<DBadapter_SQL_OPERATION>
<DATABASE_DATA>
<DB_NAME>DB_SERVER1</DB_NAME>
<DB_TYPE>HIRDB</DB_TYPE>
</DATABASE_DATA>
<SQL_DATA>
<OPERATION1>
SELECT * FROM DBA.受注表 WHERE <val1 dba_inf="column"/>
<val2 dba_inf="preset"/>
<val3 dba_inf="data" data_type="CHAR"/>
</OPERATION1>
<OPERATION2>
SELECT <val1 dba_inf="column"/> SUM(<val2 dba_inf="column"/>)
FROM DBA.受注表 GROUP BY <val3 dba_inf="column"/>
</OPERATION2>
<OPERATION3>
INSERT INTO DBA.受注表
VALUES(<val1 dba_inf="data" data_type="INTEGER" />,
<val2 dba_inf="data" data_type="CHAR"/>,
<val3 dba_inf="data" data_type="CHAR"/>,
<val4 dba_inf="data" data_type="INTEGER"/>)
</OPERATION3>
</SQL_DATA>
</DBadapter_SQL_OPERATION> |
- SQLオペレーション定義ファイルの作成例(複数のSQL文を実行する場合)
- 次の例では,1回のサービス部品実行要求で実行するSQL文の最大個数を「10」にしています。
<?xml version="1.0" encoding="UTF-8" ?>
<DBadapter_SQL_OPERATION>
<DATABASE_DATA>
<DB_NAME>DB_SERVER1</DB_NAME>
<DB_TYPE>HIRDB</DB_TYPE>
</DATABASE_DATA>
<SQL_DATA>
<OPERATION1>
SELECT * FROM DBA.受注表 WHERE <val1 dba_inf="column"/>
<val2 dba_inf="preset"/>
<val3 dba_inf="data" data_type="CHAR"/>
</OPERATION1>
<OPERATION2>
SELECT <val1 dba_inf="column"/> SUM(<val2 dba_inf="column"/>)
FROM DBA.受注表 GROUP BY <val3 dba_inf="column"/>
</OPERATION2>
<OPERATION3>
INSERT INTO DBA.受注表
VALUES(<val1 dba_inf="data" data_type="INTEGER" />,
<val2 dba_inf="data" data_type="CHAR"/>,
<val3 dba_inf="data" data_type="CHAR"/>,
<val4 dba_inf="data" data_type="INTEGER"/>)
</OPERATION3>
</SQL_DATA>
<MULTI_SQL_DATA>
<MAX_SQL_NO>10</MAX_SQL_NO>
</MULTI_SQL_DATA>
</DBadapter_SQL_OPERATION> |
DBアダプタ用のXMLフォーマット定義ファイルを作成するには,あらかじめ作成したSQLオペレーション定義ファイルの名称を-oオプションに指定してcsamkxmlsコマンドを実行します。
csamkxmlsコマンドの詳細については,「12. コマンド」の「csamkxmls(DBアダプタ用のXMLフォーマット定義ファイルの生成)」を参照してください。
- 注意
- csamkxmlsコマンドを実行したとき,SQLオペレーション定義ファイルのファイルサイズが大きいと,「java.lang.OutOfMemoryError」のメッセージが表示されることがあります。
- このエラーが表示された場合,環境変数HCSCDBA_XMXに,現在のJavaVMのメモリ割り当てサイズよりも大きい値を設定して,再度コマンドを実行してください。
- 環境変数HCSCDBA_XMXには,JavaVMのヒープサイズ(-Xmx)に設定される値(単位:Mbyte)を指定します。省略した場合,JavaVMのヒープサイズはJavaコマンドを実行する環境に依存します。
- 設定例
- set HCSCDBA_XMX=64
csamkxmlsコマンドの実行形式を次に示します。
csamkxmls -o <SQLオペレーション定義ファイルの名称> -x <DBアダプタ用のXMLフォーマット定義ファイルの名称> -f |
-fオプションは,同一名称のDBアダプタ用のXMLフォーマット定義ファイルがある場合に上書きするオプションです。上書きしない場合には省略できます。
- 注意
- DBアダプタ用のXMLフォーマット定義ファイルは,SQLオペレーション定義ファイルで指定したSQL識別子の数だけフォーマットを含みます。単一のSQL文を実行する場合,データ変換を定義するときには,SQL識別子ごとにオペレーションを変更(サービスアダプタ定義画面でオペレーションを追加)して定義する必要があります。複数のSQL文を実行する場合,データ変換を定義するときには,SQL識別子ごとにオペレーションを変更して定義する必要はありません。
- データ変換の定義については,「7. データ変換の定義」を,サービスアダプタ定義画面については,「11.2.2 サービスアダプタ定義画面」を参照してください。