---
schema_version: "1"
id: d777b3f9d0a9f887bc785755c4c55e5dea996aa64548e6a3c6fcbd76472e50e7
title: OData 要求から SQL クエリへの変換
collection: mulesoft
version: current
locale: ja-jp
portal_url: https://docs.salesforce.com/mulesoft/current/ja-jp/apikit/latest/apikit-odatav4-transform-to-sql-operation.md
canonical_url: https://docs.mulesoft.com/jp/apikit/latest/apikit-odatav4-transform-to-sql-operation
source_site: docs.mulesoft.com
content_type: documentation
content_hash: d58dd6a438ee32761226a19d7667621d8d00452776128a2b0225a3f18978af03
description: MuleSoft Documentation Site
release: 4.x
latest: true
---
# OData 要求から SQL クエリへの変換

`Transform to SQL Select`​ 操作を使用して、入力 OData ​`GET`​ 要求を SQL SELECT クエリに変換できます。この操作は、データベース用 Anypoint Connector (Database Connector) の ​`select`​ 操作と組み合わせると役立ちます。

![\*\[Transform to SQL select\]\* 要素と \*\[Entity set name (エンティティセット名)\]\* タブが強調表示されています](_images/transform-to-sql-transformer.png)

出力ペイロードはプリペアードステートメントであり、属性はプリペアードステートメントパラメーターのマップです。

![\*\[Select database (データベースを選択)\]\* および \*\[Input Parameters (入力パラメーター)\]\* 項目が強調表示されています](_images/add-db-transform-to-sql.png)

この操作を Database Connector で使用して、OData V4 を使用するデータベースを公開できます。

![\*\[Serialized entity\]\* 要素と \*\[Inbound content (インバウンドコンテンツ)\]\* 項目が強調表示されています](_images/serialize-transform-to-sql.png)

APIkit は、次の要素をサポートしています。

- システムクエリオプション:
    
    - $filter
    - $select
    - $search
    - $orderby
    - $skip
    - $top
- 単一エンティティ
- エンティティリレーション
- サーバー側のページネーション

APIkit は、次の要素をサポートしていません。

- パラメーターの別名
- 組み込み検索条件操作:
    
    - has
    - divby
- 次を除いた組み込みクエリ関数:
    
    - contains
    - startswith
    - endwith
- $apply
- $compute
- $expand

## [](#odata-v4-での-transform-to-sql-select-操作)OData V4 での Transform to SQL Select 操作

OData プロトコルでは、URL を使用して識別されたリソースに対してクライアントがクエリを実行できるようにするための一連の変換を定義しています。 クエリ可能なエンティティ、それぞれの項目、それぞれのリレーションのリストは、HTTP メッセージを使用したデータモデルで定義されています。 OData には、Java Database Connectivity (JDBC) との類似点がいくつかあります。​`transform-to-sql-select`​ 操作では、このような類似点を利用して、リソースに対する SQL クエリの作成を支援します。 この操作で生成されるメッセージには、SQL ​`select`​ 文をペイロードとし、パラメーター名と値マップを属性として準備されたステートメントが含まれます。

## [](#apikit-for-odata-v4-を使用して-transform-to-sql-select-操作を実装する)APIkit for OData V4 を使用して Transform to SQL Select 操作を実装する

SQL への変換操作は、次のパラメーターを持つ ​`<apikit-odata:transform-to-sql-select>`​ XML 要素を使用して実装できます。

<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 50%;">
<col style="width: 50%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">パラメーター名</th>
<th class="tableblock halign-left valign-top">説明</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Display name (表示名)</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">操作の名前。</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Module configuration (モジュール設定)</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">関連モジュール設定の名前。</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Entity set name (エンティティセット)</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">#[attributes.entitySetName] を取得するエンティティセットの名前。</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Page size (ページサイズ)</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">サーバー側ページネーション中に 1 ページに表示する結果の分量を定義する数値。</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Entity type name (エンティティ種別名)</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">エンティティデータモデルによって指定された [attributes.odataRequestAttributes] を使用して OData 要求から取得される文字列。</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Entity type fields (エンティティ種別項目)</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">#[attributes.odataRequestAttributes] を使用して OData 要求から取得される、エンティティ種からプロパティ項目のリストを定義する文字列の配列。</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Entity type keys (エンティティ種別キー)</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">#[attributes.odataRequestAttributes] を使用して OData 要求から取得される、エンティティのキー名と値のマップを定義するオブジェクト。</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">System query options (システムクエリオプション)</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">#[attributes.odataRequestAttributes] を使用して OData 要求から取得されるパラメーター。</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Search transformation enabled (検索変換を有効化)</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">​<code>true</code>​ の場合、このオプションは WHERE 句の $search 変換オプションを有効にします。</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Strict search term match (厳密な検索語の一致)</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">​<code>true</code>​ の場合、このオプションは $search で完全一致を有効にします。有効になっている場合、WHERE 句内の用語は「%」で囲まれません。</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">SQL identifiers delimiter (SQL 識別子の区切り文字)</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>生成された SQL ステートメント内の識別子を区切るオプション (オプション: DOUBLE_QUOTES​、BRACKETS、および ​BACK_TICKS​)。</p>
</div>
<div class="paragraph">
<p>例:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>DOUBLE_QUOTES​: <code>SELECT "TrackId", "Name" FROM "Tracks"</code></p>
</li>
<li>
<p>BRACKETS: <code>SELECT [TrackId], [Name] FROM [Tracks]</code></p>
</li>
<li>
<p>BACK_TICKS​: <code>SELECT `TrackId`, \​<code>Name</code>​ FROM \​<code>Tracks</code>​ </code></p>
</li>
</ul>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">SQL limit rows (SQL 制限行数)</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>行数を制限するオプション (オプション: LIMIT および ​FETCH_NEXT_ROWS_ONLY​)。</p>
</div>
<div class="paragraph">
<p>例:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>LIMIT: <code>SELECT OrderID, ShippedDate, ShipCountry FROM Orders LIMIT :parameter1</code></p>
</li>
<li>
<p>FETCH_NEXT_ROWS_ONLY​: <code>SELECT OrderID, ShippedDate, ShipCountry FROM Orders ORDER BY OrderID ASC OFFSET :parameter2 ROWS FETCH NEXT :parameter1 ROWS ONLY</code></p>
</li>
</ul>
</div>
<div class="paragraph">
<p><code>ORDER BY</code>​ は、要求に存在しない場合、CSDL で定義されたエンティティキーを使用して自動的に含まれます。</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Date Transform Type (日付変換型)</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>次のいずれかの値が指定されます。</p>
</div>
<div class="ulist">
<ul>
<li>
<p>String: <code>Date</code>​ または ​<code>DateTimeOffset</code>​ パラメーターは ​<code>string</code>​ (デフォルト値) として渡されます。</p>
</li>
<li>
<p>java.time - LocalDate および LocalDateTime: <code>Date</code>​ または ​<code>DateTimeOffset</code>​ パラメーターは、​<code>java.time</code>​ パッケージクラス ​<code>LocalDate</code>​ および ​<code>LocalDateTime</code>​ のオブジェクトとして渡されます。このオプションにより、MySQL などのほとんどの DB ドライバーが ​<code>Date/DateTime</code>​ パラメーターを識別して処理し、正しい結果を返すことができます。</p>
</li>
<li>
<p>java.time - LocalDate および OffsetDateTime: <code>Date</code>​ または ​<code>DateTimeOffset</code>​ パラメーターは、​<code>java.time</code>​ パッケージクラス ​<code>LocalDate</code>​ および ​<code>OffsetDateTime</code>​ のオブジェクトとして渡されます。このオプションにより、Oracle などのほとんどの DB ドライバーが ​<code>Date</code>​、​<code>Timestamp</code>​、​<code>Timestamp with Time Zone</code>​ パラメーターを識別して処理し、正しい結果を返すことができます。</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>この操作では、デフォルトで文字列として ​` Date/DateTime`​ の値が取得されます。​<code>java.time object</code>​ オプションの 1 つを選択して、​<code>java.time</code>​ パッケージ内の対応する ​<code>Date</code>​ または ​<code>DateTime</code>​ オブジェクトとして出力します。</p>
</div></div></td>
</tr>
</tbody>
</table>

## [](#odata-v4-の-filter-式)OData V4 の $filter 式

OData の ​`$filter`​ 式では、比較、論理、算術、グルーピングの演算子を使用します。演算子のリストとその意味については、 [OData4 仕様](http://docs.oasis-open.org/odata/odata/v4.01/cs01/part1-protocol/odata-v4.01-cs01-part1-protocol.html#sec_BuiltinFilterOperations)​を参照してください。

APIkit では、​`has`​ 演算子と ​`divby`​ 演算子はサポートされません。

## [](#transform-to-sql-select-でサポートされる式)Transform to SQL select でサポートされる式

OData でサポートされる絞り込み式については、 [仕様](http://docs.oasis-open.org/odata/odata/v4.01/cs01/part1-protocol/odata-v4.01-cs01-part1-protocol.html#sec_BuiltinFilterOperations)​を参照してください。

`transform-to-sql-select`​ 操作は、次の単項演算子とバイナリ演算子、そしてメソッド演算子をサポートします。

<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 50%;">
<col style="width: 50%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">OData の演算子</th>
<th class="tableblock halign-left valign-top">SQL の演算子</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">add</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">+</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">and</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">AND</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">div</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">/</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">eq</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">=</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">ge</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">&gt;=</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">gt</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">&gt;</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">le</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">=&lt;</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">lt</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">&lt;</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">mod</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">%</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">mul</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">*</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">ne</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">&lt;&gt;</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">または</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">または</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">sub</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">-</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">not</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">NOT</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">-</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">-</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">contains</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">LIKE %value%</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">startswith</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">LIKE value%</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">endswith</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">LIKE %value</p></td>
</tr>
</tbody>
</table>

## [](#search-のサポート)$search のサポート

この操作は、システムクエリオプションで指定された ​`$search`​ 式に基づいて ​`WHERE`​ 句を構築します。実装では、条件と一致するプロパティ値を持つすべての要素を選択します。

デフォルトでは、項目値に用語が含まれている場合に用語が一致します。設定で ​`[strict search term match (厳密な検索語の一致)]`​ が ​`true`​ に設定されている場合、​`search`​ 操作では項目値と検索用語が完全に一致する必要があります。

`[search transformation enabled (検索変換を有効化)]`​ および ​`[strict search term match (厳密な検索語の一致)]`​ パラメーターによって ​`$search`​ 機能が定義されます。

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

- [APIkit for OData v4 Module リファレンス](https://docs.mulesoft.com/jp/apikit/latest/apikit-odatav4-extension-reference)
- [エラー処理リファレンス](https://docs.mulesoft.com/jp/apikit/latest/apikit-odatav4-error-handling-reference)