Docs Menu
Docs Home
/
Relational Migrator
/ /

保存された手順の変換

項目一覧

  • このタスクについて
  • 始める前に
  • 手順
  • 次のステップ
  • 詳細

クエリ 変換 を使用すると、SQL 保存済み手順を MongoDB コードにインポートして変換できます。 クエリ ドライバーは、SQL コードを変換する際にプロジェクトに定義されたマッピング ルールとスキーマ変換を考慮します。

  • クエリ ドライバーはAIテクノロジーを使用しますが、長いクエリや複雑なクエリ、トリガー、または保存された手順を変換できない場合があります。 正しく変換されないクエリもあれば、まったく変換されないクエリもあります。

  • クエリ ドライバーは、リレーショナル スキーマ、MongoDB スキーマ、現在のプロジェクト内のマッピング ルールを使用して、クエリを変換する方法を決定します。 クエリがリレーショナル スキーマにないテーブルを参照する場合、または MongoDB コレクションにマップされていない場合、変換が失敗したり不正確になることがあります。

  • 変換されたクエリ、trigger、ビュー、保存された手順はプロジェクトに保存され、プロジェクトのインポートおよびエクスポート後も保持されます。

  • SQLクエリは40 、 000テキスト文字に制限されています。

  • 左側の [ Query Converterペインで以前の変換履歴を表示できます。 各変換には、変換の結果を示す アイコンがあります。 オブジェクトの横に アイコンがない場合、変換はまだ試行されていません。

    Icon
    説明
    スピナー
    変換が実行中です。
    緑色のチェックマーク
    変換は成功しました。
    赤色の句読点
    前回の試行では変換は失敗しました。
  • MongoDB には、SQL 保存手順の公式シノニム オブジェクトタイプはありません。 代わりに、MongoDB はデータベース ロジックをホストするカスタム JavaScript とドライバー コードをサポートしています。 アプリケーション モダナイゼーションのプロセスの一部は、アプリケーションのニーズに最も適したプログラミング言語とホスティング オプションを選択することです。 変換された保存された手順コードは、アプリケーション内または MongoDB App Services Functions を使用してホストできます。

  • クエリ 変換によって生成されたコードは、本番環境に配置する前に、必ず確認とテストを行ってください。

1

[ Code Generationタブから、 Query Converterペインをクリックします。

2
  • プロジェクトでクエリ 変換を初めて使用する場合は、[ Import From Databaseをクリックします。

  • プロジェクトですでに SQL コードを変換している場合は、左側ペインの [ Manage Database Objects ] ボタンをクリックします。

3
  1. ソース データベースへの接続の詳細を指定します。

    詳細については、 リレーショナルデータベース接続文字列」を参照してください。

  2. [Connect] をクリックします。

4
  1. Import Database Objectsモーダルで、次をクリックします: Databaseの横にあるアイコン。

  2. をクリックしますスキーマの横にある アイコン。

  3. をクリックしますStored Proceduresの横にあるアイコン。

    Tip

    保存された手順を変換するために切り替えるには、保存された手順の名前の横にあるアイコン。

  4. [Save] をクリックします。

    データベース スキーマに保存されている各手順のコードはプロジェクトにインポートされ、 Stored Proceduresの下のQuery Converterペインに表示されます。

5
  1. 左側のペインからStored Proceduresの下の保存済み手順の名前をクリックします。

    コードはImported Stored Procedureペインに表示されます。

  2. ドロップダウンからTarget Languageを選択します。

    クエリ 変換子は、 JavaScript 、 C# 、およびJavaへの保存済み手順の変換をサポートしています。

    注意

    Javaを使用している場合は、 Return a domain object where possible を選択することもできます。選択すると、クエリが単一のMongoDBコレクションでのみ動作する場合、クエリ 変換には POJO クラスに基づいて厳密に型指定されたJavaエンティティが含まれます。

  3. [ Convert ] ボタンをクリックします。 クエリ ドライバーがコードを変換するまで待ちます。

    変換された MongoDB コードはConverted MongoDB Queryペインに表示されます。

    クエリ 変換にエラーが発生した場合は、 Converted MongoDB Queryペインで詳細を表示できます。

  4. をクリックしますConverted MongoDB Queryペインの [] アイコンを使用して、MongoDB コードをクリップボードにコピーします。

  5. 生成された MongoDB コードをテストして検証します。

    Tip

    Filterテキスト ボックスを使用して、オブジェクト名と SQL 構文に基づいて、クエリ、保存済み手順、trigger、ビューをフィルタリングできます。

クエリ 変換は、保存された手順をJavaScript 、 C# 、またはJavaコードに変換できます。 以下の例は、各言語への変換を示しています。

次の例は、JavaScript に変換された MySQL 保存済みプロシージャを示しています。

BEGIN
DECLARE v_rentals INT;
DECLARE v_out INT;
SELECT COUNT(*) INTO v_rentals
FROM rental
WHERE inventory_id = p_inventory_id;
IF v_rentals = 0 THEN
RETURN TRUE;
END IF;
SELECT COUNT(rental_id) INTO v_out
FROM inventory LEFT JOIN rental USING(inventory_id)
WHERE inventory.inventory_id = p_inventory_id
AND rental.return_date IS NULL;
IF v_out > 0 THEN
RETURN FALSE;
ELSE
RETURN TRUE;
END IF;
END
async function query(db, p_inventory_id) {
const v_rentals = await db.collection('rental').countDocuments(
{ inventoryId: p_inventory_id }
);
if (v_rentals === 0) {
return true;
}
const v_out = await db.collection('inventory').aggregate([
{
$lookup: {
from: 'rental',
localField: 'inventoryId',
foreignField: 'inventoryId',
as: 'rentalData'
}
},
{
$match: {
inventoryId: p_inventory_id,
'rentalData.returnDate': { $exists: false }
}
},
{
$count: 'rentalId'
}
]).toArray();
if (v_out.length > 0 && v_out[0].rentalId > 0) {
return false;
} else {
return true;
}
}

次の例は、C# に変換された MySQL 保存済み手順を示しています。

BEGIN
DECLARE v_customer_id INT;
DECLARE EXIT HANDLER FOR NOT FOUND RETURN NULL;
SELECT customer_id INTO v_customer_id
FROM rental
WHERE return_date IS NULL
AND inventory_id = p_inventory_id;
RETURN v_customer_id;
END
async Task<int?> Query(IMongoDatabase db)
{
var rentalCollection = db.GetCollection<BsonDocument>("rental");
var filter = Builders<BsonDocument>.Filter.Eq("inventoryId", p_inventory_id) & Builders<BsonDocument>.Filter.Eq("returnDate", null);
var result = await rentalCollection.Find(filter).FirstOrDefaultAsync();
return result != null ? result["customerId"].AsInt32 : (int?)null;
}

次の例は、Java に変換された MySQL 保存済み手順を示しています。

BEGIN
SELECT inventory_id
FROM inventory
WHERE film_id = p_film_id
AND store_id = p_store_id
AND NOT inventory_in_stock(inventory_id);
SELECT COUNT(*)
FROM inventory
WHERE film_id = p_film_id
AND store_id = p_store_id
AND NOT inventory_in_stock(inventory_id)
INTO p_film_count;
END
void query(MongoDatabase db) {
int p_film_id = 0;
int p_store_id = 0;
int p_film_count = 0;
MongoCollection<Document> inventoryCollection = db.getCollection("inventory");
Bson filter = Filters.and(Filters.eq("filmId", p_film_id), Filters.eq("storeId", p_store_id), Filters.not(inventory_in_stock("inventoryId")));
FindIterable<Document> result = inventoryCollection.find(filter);
for (Document doc : result) {
System.out.println(doc.getInteger("inventoryId"));
}
p_film_count = (int) inventoryCollection.countDocuments(filter);
}

戻る

クエリの変換