WebSphere Message Broker バージョン 8.0.0.5 オペレーティング・システム: AIX、HP-Itanium、Linux、Solaris、Windows、z/OS

製品の最新バージョンについては、IBM Integration Bus バージョン 9.0 をご覧ください。

INSERT ステートメント

INSERT ステートメントは行をデータベース表に挿入します。

構文

構文図を読む構文図をスキップする
>>-INSERT--INTO--TableReference--+----------------------+------->
                                 |    .-,----------.    |   
                                 |    V            |    |   
                                 '-(----ColumnName-+--)-'   

              .-,----------.      
              V            |      
>--VALUES--(----Expression-+--)--------------------------------><

WHERE

|--TableReference = --Database---------------------------------->

>--+------------------------------------------+----------------->
   '-+---------------------+--.--SchemaClause-'   
     '-.--DataSourceClause-'                      

>--.--TableClause-----------------------------------------------|

|--DataSourceClause = --+-DataSourceName-------------+----------|
                        '-{--DataSourceExpression--}-'   

|--SchemaClause = --+-SchemaName-------------+------------------|
                    '-{--SchemaExpression--}-'   

|--TableClause = --+-TableName-------------+--------------------|
                   '-{--TableExpression--}-'   

1 行が、TableReference によって識別される表に挿入されます。 ColumnName リストは、ターゲット表の、特定の値を提供される列を識別します。 これらの値は、VALUES 文節中の式によって判別されます (最初の式は最初に名前を挙げられた列の値を提供し、以下同様になります)。 VALUES 文節中の式の数は、名前の挙げられた列の数と同じでなければなりません。 表にある列のうち、リストに挙げられていないものについては、デフォルト値が使用されます。

表参照

表参照は、メッセージ・ツリーの参照に使用される特殊なフィールド参照です。 先頭は常に『Database』という語になり、以下のエレメントのいずれかが含まれる可能性があります。
  • 表名のみ
  • スキーマ名と表名
  • データ・ソース名 (つまり、データベース・インスタンスの名前)、スキーマ名、および表名
いずれの場合も、名前は直接指定するか、または式を中括弧 ({...}) で囲んで指定できます。 直接指定したデータ・ソース、スキーマ、または表の名前は、名前置換の対象になります。 つまり、使用している名前が既知の名前になるよう宣言されている場合、名前自体ではなく宣言済みの名前の値が使用されます (DECLARE ステートメントを参照)。

スキーマ名を指定しないと、ブローカーのデータベース・ユーザーのデフォルト・スキーマが使用されます。

データ・ソース名を指定しないと、ノードの「データ・ソース」 属性によって指されているデータベースが使用されます。

エラーの処理

挿入操作中にエラーが起きる可能性があります。 例えば、データベースが操作可能でなくなったり、どのような場合に新しい行が違反になるかを示す表の制約が定義されていたりする場合があります。 このような場合、ノード・プロパティー「データベース・エラーで例外をスロー」がクリアされていなければ、例外がスローされます。 これらの例外では以下の項目が適切な値に設定され、エラー・ハンドラーでこれらの例外を処理できます (DECLARE HANDLER ステートメントを参照してください)。
  • SQL コード
  • State
  • ネイティブ・エラー
  • エラー・テキスト

データベース・エラーの処理について詳しくは、データベース状態のキャプチャーを参照してください。

次の例では、Database ノードの Data Source プロパティーが構成されていて、このプロパティーが識別するデータベースには列 A、B、および C を持つ TABLE1 という表があるとしています。

汎用 XML 本体が次に示すものであるメッセージがあるとします。
<A>
 <B>1</B>
 <C>2</C>
 <D>3</D>
</A>
次の INSERT ステートメントは、列 A、B、および C の値 1、2、および 3 を持つ新しい行を表に挿入します。
INSERT INTO Database.TABLE1(A, B, C) VALUES (Body.A.B, Body.A.C, Body.A.D);
次の例は、計算されたデータ・ソース、スキーマ、および表の名前の使用法を示します。
-- Declare variables to hold the data source, schema, and table names
-- and set their default values
DECLARE Source CHARACTER 'Production';
DECLARE Schema CHARACTER 'db2admin';
DECLARE Table  CHARACTER 'DynamicTable1';

-- Code which calculates their actual values comes here

-- Insert the data into the table
INSERT INTO Database.{Source}.{Schema}.{Table} (Name, Value) values ('Joe', 12.34);

データベースへのビット・ストリームの挿入

データを挿入しようとしているデータベース列が BLOB などのバイナリー・データ・タイプに設定されている場合は、入力メッセージをビット・ストリーム形式で表す必要があります。 入力メッセージが BLOB ドメインにある場合は、次の ESQL コードを使用してください。
DECLARE msgBitStream BLOB InputRoot.BLOB.BLOB;
INSERT INTO Database.TABLE1(MSGDATA) VALUES (msgBitStream);

あるいは、入力メッセージが XMLNS などの XML ドメインにある場合は、INSERT ステートメントの前にメッセージ・ツリーを直列化する必要があります。 メッセージ・ツリーを直列化してその内容をデータベースに挿入するには、次の ESQL コードを使用します。
DECLARE propRef REFERENCE TO InputRoot.Properties;
DECLARE msgBitStream BLOB ASBITSTREAM(InputRoot.XMLNS, propRef.Encoding, propRef.CodedCharSetId);
INSERT INTO Database.TABLE1(MSGDATA) VALUES (msgBitStream);
メッセージ・フローの受け取る入力メッセージが別のコード・ページからのものである場合、直前の例を使用すると CodedCharSetIDEncoding の情報が失われます。 CodedCharSetIDEncoding の情報をキャプチャーする場合は、表を拡張して CodedCharSetIDEncoding のデータを保管するための数値列を 2 つ追加できます。 表を拡張するには、直前の例の ESQL に変更を加えて、別々のデータベース列に CodedCharSetIDEncoding のデータを挿入します。
DECLARE propRef REFERENCE TO InputRoot.Properties;
DECLARE inCCSID INT propRef.CodedCharSetId;
DECLARE inEncoding INT propRef.Encoding;
DECLARE msgBitStream BLOB ASBITSTREAM(InputRoot.XMLNS, inEncoding, inCCSID);
INSERT INTO Database.TABLE1(MSGDATA, MSGENCODING, MSGCCSID) VALUES 
(msgBitStream, inEncoding, inCCSID);

上記の例の拡張として、メッセージ全体をその MQMD ヘッダーとともに保管することを必要としていて、後でそれを、異なるコード・ページとエンコードを使用する異なるプラットフォーム上の別のメッセージ・フローでメッセージ全体を再構成するために使用する場合には、データベース表は MQMD ヘッダーのすべての数値フィールドを保持するように拡張できます。

例えば、AIX® 上で実行するメッセージ・フローが、メッセージ・ビット・ストリームをデータベース表に挿入し、Windows 上で実行する別のメッセージ・フローがそれを取り出して、保管された MQMD ヘッダーとともにメッセージを再構成しようとする場合などがあります。

以下のような数値フィールドのセットが MQMD ヘッダーに含まれます。
    BackoutCount (MQLONG)  
    CodedCharSetId (MQLONG)
    Encoding (MQLONG)      
    Expiry (MQLONG)        
    Feedback (MQLONG)      
    MsgFlags (MQLONG)      
    MsgSeqNumber (MQLONG)  
    MsgType (MQLONG)       
    Offset (MQLONG)        
    OriginalLength (MQLONG)
    Persistence (MQLONG)   
    Priority (MQLONG)      
    PutApplType (MQLONG)   
    Report (MQLONG)        
    Version (MQLONG) 
以下の例では、CodedCharSetIDEncodingPriority、および MsgSeqNumber を使用しています。
   DECLARE propRef REFERENCE TO InputRoot.Properties;
   DECLARE mqmdRef REFERENCE TO InputRoot.MQMD;
   DECLARE inCCSID INT propRef.CodedCharSetId;
   DECLARE inEncoding INT propRef.Encoding;

   DECLARE inPriority INT mqmdRef.Priority;
   DECLARE inMsgSeqNumber INT mqmdRef.MsgSeqNumber;

   DECLARE msgBitStream BLOB ASBITSTREAM(InputRoot, inEncoding, inCCSID);

   INSERT INTO Database.TABLE1(MSGDATA, MSGENCODING, MSGCCSID, MSGPRIORITY,MSGSEQNUMBER) 
   VALUES (msgBitStream, inEncoding, inCCSID, inPriority, inMsgSeqNumber);
CHAR または VARCHAR データ・タイプを持つデータベース列に XML メッセージを挿入する場合は、INSERT ステートメントの前に入力メッセージを CHAR データ・タイプに変換するように、ESQL を変更する必要があります。 次の例では、CAST を使用して、直列化したメッセージを CHAR データ・タイプに変換しています。 CodedCharSetID のデータと Encoding のデータは、別のデータベース列に挿入されます。
DECLARE propRef REFERENCE TO InputRoot.Properties;
DECLARE inCCSID INT propRef.CodedCharSetId;
DECLARE inEncoding INT propRef.Encoding;
DECLARE msgBitStream BLOB ASBITSTREAM(InputRoot.XMLNS, inEncoding, inCCSID);
DECLARE msgChar CHAR CAST(msgBitStream AS CHAR CCSID inCCSID);
INSERT INTO Database.TABLE1(MSGDATA, MSGENCODING, MSGCCSID) VALUES (msgChar, inEncoding, inCCSID);

上記の 2 つの例に基づいて、データベースからメッセージ・ビット・ストリームを抽出する方法については、データベースからのビット・ストリーム・データの選択を参照してください。

特記事項 | 商標 | ダウンロード | ライブラリー | サポート | フィードバック

Copyright IBM Corporation 1999, 2014Copyright IBM Corporation 1999, 2014.

        
        最終更新:
        
        最終更新: 2015-02-28 17:47:22


参照トピック参照トピック | バージョン 8.0.0.5 | ak05050_