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ペイロードを受信する際、それらをストアドプロシージャ呼び出しに変換することで、ビジネスルールがデータベースレベルで一貫して適用されます。