INSERT ステートメントは行をデータベース表に挿入します。
1 行が、TableReference によって識別される表に挿入されます。ColumnName リストは、ターゲット表の、特定の値を提供される列を識別します。これらの値は、VALUES 文節中の式によって判別されます (最初の式は最初に名前を挙げられた列の値を提供し、以下同様になります)。VALUES 文節中の式の数は、名前の挙げられた列の数と同じでなければなりません。表にある列のうち、リストに挙げられていないものについては、デフォルト値が使用されます。
スキーマ名を指定しないと、ブローカーのデータベース・ユーザーのデフォルト・スキーマが使用されます。
データ・ソース名を指定しないと、ノードの「データ・ソース」 属性によって指されているデータベースが使用されます。
データベース・エラーの処理について詳しくは、データベース状態のキャプチャーを参照してください。
次の例では、Database ノードの data source プロパティーが構成されていて、このプロパティーが識別するデータベースには列 A、B、および C を持つ TABLE1 という表があるとしています。
<A> <B>1</B> <C>2</C> <D>3</D> </A>
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);
DECLARE propRef REFERENCE TO InputRoot.Properties; DECLARE msgBitStream BLOB ASBITSTREAM(InputRoot.XMLNS, propRef.Encoding, propRef.CodedCharSetId); INSERT INTO Database.TABLE1(MSGDATA) VALUES (msgBitStream);
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 ヘッダーとともにメッセージを再構成しようとする場合などがあります。
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)
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);
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 つの例に基づいて、データベースからメッセージ・ビット・ストリームを抽出する方法については、データベースからのビット・ストリーム・データの選択を参照してください。