JSONパラメータからSQLストアドプロシージャ呼び出しを生成する

JSONオブジェクトをSQLストアドプロシージャまたは関数呼び出し文に変換する方法を学びます。名前付きパラメータ、位置引数、出力パラメータ、方言固有のCALL構文を解説します。

Real-World Scenarios

詳細な説明

JSONからストアドプロシージャ呼び出しへ

生のINSERT/UPDATE文の代わりに、JSONデータをパラメータとしてストアドプロシージャを呼び出す必要がある場合があります。このパターンはビジネスロジックがデータベースに存在するエンタープライズアプリケーションで一般的です。

JSONの例

{
  "procedure": "sp_create_user",
  "params": {
    "p_name": "Alice",
    "p_email": "alice@example.com",
    "p_age": 30,
    "p_department_id": 5,
    "p_active": true
  }
}

PostgreSQL出力

CALL sp_create_user(
  p_name := 'Alice',
  p_email := 'alice@example.com',
  p_age := 30,
  p_department_id := 5,
  p_active := TRUE
);

MySQL出力

CALL sp_create_user(
  'Alice',
  'alice@example.com',
  30,
  5,
  TRUE
);

SQL Server出力

EXEC sp_create_user
  @p_name = 'Alice',
  @p_email = 'alice@example.com',
  @p_age = 30,
  @p_department_id = 5,
  @p_active = 1;

パラメータスタイル

データベース 名前付きパラメータ 位置指定 プレフィックス
PostgreSQL param := value 対応 なし
MySQL 非対応 対応 なし
SQL Server @param = value 対応 @
Oracle param => value 対応 なし

バッチプロシージャ呼び出し

JSON配列の場合、複数のCALL文を生成します:

[
  { "p_name": "Alice", "p_email": "alice@example.com" },
  { "p_name": "Bob", "p_email": "bob@example.com" }
]
CALL sp_create_user(p_name := 'Alice', p_email := 'alice@example.com');
CALL sp_create_user(p_name := 'Bob', p_email := 'bob@example.com');

関数呼び出し(SELECT)

値を返すSQL関数の場合:

-- PostgreSQL
SELECT * FROM fn_get_user_details(p_user_id := 42);

-- MySQL
SELECT fn_get_user_details(42);

出力パラメータ(SQL Server)

DECLARE @result INT;
EXEC sp_create_user
  @p_name = 'Alice',
  @p_email = 'alice@example.com',
  @p_result = @result OUTPUT;
SELECT @result;

ストアドプロシージャを使うべき場面

ストアドプロシージャは、ビジネスロジック、バリデーション、またはマルチテーブル操作がデータベースにカプセル化されている場合に適切です。JSON-to-procedureコンバーターはAPIペイロードとデータベース側のロジックの間のギャップを埋めます。

ユースケース

エンタープライズアプリケーションでは、直接的なテーブルアクセスを許可する代わりにストアドプロシージャを通じてデータの整合性を強制することが多いです。マイクロサービスやメッセージキューからJSONペイロードを受信する際、それらをストアドプロシージャ呼び出しに変換することで、ビジネスルールがデータベースレベルで一貫して適用されます。

試してみる — JSON to SQL

フルツールを開く