---
schema_version: "1"
id: 905eb9c614582c698769d0fd07d1d047721ef00f637839405a0a9e1b1641c119
title: データベーストランザクションの設定の例
collection: mulesoft
version: current
locale: ja-jp
portal_url: https://docs.salesforce.com/mulesoft/current/ja-jp/db-connector/1.13/database-connector-transactions.md
canonical_url: https://docs.mulesoft.com/jp/db-connector/1.13/database-connector-transactions
source_site: docs.mulesoft.com
content_type: documentation
content_hash: 2c46c039a9766836d0b0142786319073ce879152e5db41d59d544a941336d5a4
description: MuleSoft Documentation Site
release: "1.13"
latest: false
---
# データベーストランザクションの設定の例

データベース用 Anypoint Connector (Database Connector) を使用すると、トランザクションのコンテキストでデータベース操作を実行できます。各操作に ​**\[Transactional action (トランザクションアクション)\]**​ 項目があります。この項目を使用して、アクティブなトランザクションに関して、操作で実行できる結合アクションの種別を指定します。

次の例は、Studio で ​**\[Transactional action (トランザクションアクション)\]**​ 項目を設定する方法 (​**Select**​ 操作の場合と、​**Try**​ スコープコンポーネントを使用して操作をグループ化する場合の両方) を示しています。

## [](#studio-で-transactional-action-トランザクションアクション-項目を設定する)Studio で \[Transactional Action (トランザクションアクション)\] 項目を設定する

項目を設定する手順は、次のとおりです。

1. Studio のフローで、​**\[Select\]**​ 操作を選択します。
2. コネクタ設定画面で、​**\[Advanced (詳細)\]**​ タブをクリックします。
3. **\[Transactional action (トランザクションアクション)\]**​ 項目を次のいずれかのオプションに設定します。
    
    - **ALWAYS\_JOIN**​  
        メッセージの受信時にトランザクションが進行中であると想定します。トランザクションがない場合、エラーが発生します。
    - **JOIN\_IF\_POSSIBLE**​  
        現在のトランザクションが使用可能な場合、そのトランザクションを結合します。それ以外の場合、トランザクションは実行されません。
    - **NOT\_SUPPORTED**​  
        存在するトランザクションの外部で実行します。

次のスクリーンショットは、Studio の設定を示しています。

![Studio での \[Transactional action (トランザクションアクション)\] 項目の設定](_images/database-transactions-1.png)

Figure 1. \[Transactional action (トランザクションアクション)\] の設定

XML エディターでは、​`transactionalAction`​ 設定は次のように記述されます。

```xml
<db:select doc:name="Select" transactionalAction="ALWAYS_JOIN">
			<db:sql ><![CDATA[SELECT * FROM PLANET WHERE name = :name]]></db:sql>
</db:select>
```

## [](#try-スコープの-transactional-action-トランザクションアクション-項目を設定して操作をグループ化する)Try スコープの \[Transactional Action (トランザクションアクション)\] 項目を設定して操作をグループ化する

場合によっては、複数のクエリを同じトランザクションのコンテキストでアトミックに実行する必要があります。これらのクエリを、すでに存在するトランザクションのコンテキストで実行した場合、クエリは同じトランザクションに属します。

次の例は、銀行口座振替中に 2 つの Database Connector の ​**Update**​ 操作を使用して、1 つの口座から金額を引き、別の口座に加えるが、この 2 つの操作のいずれかが失敗した場合、両方の操作をロールバックすることを示しています。アクティブなトランザクションがない場合は、​**Try**​ スコープコンポーネントを使用して操作をグループすることでトランザクションを開始できます。

1. **\[Mule Palette (Mule パレット)\]**​ ビューで「​`try`​」を検索し、​**\[Try\]**​ スコープコンポーネントを選択します。
2. **\[Try\]**​ スコープコンポーネントを Studio キャンバスにドラッグします。
3. **\[Update\]**​ 操作を ​**\[Try\]**​ スコープコンポーネントの内部にドラッグします。
4. 操作の設定画面の ​**\[General (一般)\]**​ タブで、​**\[Connector configuration (コネクタ設定)\]**​ 項目の横にあるプラス記号 (​**+**​) をクリックし、グローバル要素設定項目にアクセスします。
5. データベース接続情報を指定し、​**\[OK\]**​ をクリックします。
6. 実行する SQL クエリを ​**\[SQL Query Text (SQL クエリテキスト)\]**​ 項目に設定します (例: `UPDATE ACCOUNT set BALANCE = BALANCE - :money where ID = :source`​)。
7. **\[Input Parameters (入力パラメーター)\]**​ 項目を ​`{‘money’ : payload.money, ‘source’: payload.source}`​ に設定します。
8. 別の ​**\[Update\]**​ 操作を ​**\[Try\]**​ コンポーネント内の最初の ​**\[Update\]**​ 操作の右にドラッグします。
9. **\[Connector configuration (コネクタ設定)\]**​ 項目を、以前に作成したデータベース接続に設定します。
10. 実行する SQL クエリを ​**\[SQL Query Text (SQL クエリテキスト)\]**​ 項目に設定します (例: `UPDATE ACCOUNT set BALANCE = BALANCE + :money where ID = :target`​)。
11. **\[Input Parameters (入力パラメーター)\]**​ 項目を ​`{‘money’ : payload.money, ‘target’’: payload.target}`​ に設定します。
12. フローの ​**\[Try\]**​ スコープコンポーネントを選択します。
13. コンポーネント設定画面で、​**\[Transactional action (トランザクションアクション)\]**​ 項目を ​`ALWAYS_BEGIN`​ に設定します。

次のスクリーンショットは、Studio の設定を示しています。

![Studio での Try コンポーネントの \[Transactional action (トランザクションアクション)\] 項目の設定](_images/database-transactions-2.png)

Figure 2. \[Transactional action (トランザクションアクション)\] の設定

XML エディターでは、​`transactionalAction`​ 設定は次のように記述されます。

```xml
<try transactionalAction="ALWAYS_BEGIN">
 <db:update config-ref="db">
   <db:sql>UPDATE ACCOUNT set BALANCE = BALANCE - :money where ID = :source</db:sql>
   <db:input-parameters>#[{'money' : payload.money, 'source': payload.source}]</db:input-parameters>
 </db:update>

 <db:update config-ref="db">
   <db:sql>UPDATE ACCOUNT set BALANCE = BALANCE + :money where ID = :target</db:sql>
   <db:input-parameters>#[{'money' : payload.money, 'target'': payload.target}]</db:input-parameters>
 </db:update>
</try>
```

## [](#トランザクションとストリーミング)トランザクションとストリーミング

一部の Database Connector 操作 (​**Select**​ 操作など) の結果は、自動的にストリーミングされ、すべての結果が一度に読み込まれることでパフォーマンスとメモリの問題が発生することを防止します。この動作は、データベース行が必要に応じて遅延して読み込まれることを意味します。 Database Connector 操作がトランザクション (​**Try**​ スコープコンポーネントなど) の内部で実行されて、データがコンシュームされる前にトランザクションが終了した場合、読み込まれていない結果にアクセスしようとするとエラーとなります。

## [](#関連情報)関連情報

- [Database Connector の例](https://docs.mulesoft.com/jp/db-connector/1.13/database-connector-examples)
- [MuleSoft ヘルプセンター](https://help.mulesoft.com)