メッセージ格納ファイルとしてデータベースを使用する場合、一つのアプリケーションで業務用データベースとMQDを使用する場合には、MQDプログラムインタフェースを呼ぶ前に、業務用データベースに対してCOMMIT文を発行して、トランザクションを完結させておく必要があります。ただし、Interstageのトランザクション連携機能を使用している場合は、トランザクションを完結する必要はありません。
以下に、誤ったCOBOLコーディング例を示します。
EXEC SQL CONNECT TO 'DB01' AS 'C1' END-EXEC. MOVE "MQD001" TO MQD-SYSNAME. CALL "MQDCONNECT" USING MQD-SYSNAME MQD-ENVIRONMENT MQD-RESULT. MOVE "QUE001" TO MQD-QUENAME. CALL "MQDCONNECTQ" USING MQD-SYSADDR MQD-QUENAME MQD-ENVIRONMENT MQD-RESULT. ・ ・ EXEC SQL SET CONNECTION 'C1' END-EXEC. EXEC SQL SELECT 在庫数量 ・・ END-EXEC. CALL "MQDPUTMSG" USING MQD-QUEADDR MQD-UNITFLG MQD-MESSAGEHEADER MQD-MSGBODY MQD-ENVIRONMENT MQD-RESULT. ※ 誤り 業務用データベース‘DB01‘に対するトランザクションが完結してない状態で MQDPUTMSGを呼び出している。 EXEC SQL COMMIT END-EXEC. |
以下に、Interstageのトランザクション連携機能を使用した場合のCOBOLコーディング例を示します。
MOVE "MQD001" TO MQD-SYSNAME. CALL "MQDCONNECT" USING MQD-SYSNAME MQD-ENVIRONMENT MQD-RESULT. MOVE "QUE001" TO MQD-QUENAME. CALL "MQDCONNECTQ" USING MQD-SYSADDR MQD-QUENAME MQD-ENVIRONMENT MQD-RESULT. ・ ・ EXEC SQL SET CONNECTION 'C1' END-EXEC. EXEC SQL SELECT 在庫数量 ・・ END-EXEC. ・ ・ CALL "MQDPUTMSG" USING MQD-QUEADDR MQD-UNITFLG MQD-MESSAGEHEADER MQD-MSGBODY MQD-ENVIRONMENT MQD-RESULT. ・ ・ EXEC SQL SET CONNECTION 'C1' END-EXEC. EXEC SQL SELECT 在庫数量 ・・ END-EXEC. |