Red Hat Training

A Red Hat training course is available for Red Hat Fuse

305.3. ストアドプロシージャーテンプレートの宣言

テンプレートは、Java メソッド署名と似た構文を使用して宣言されます。ストアドプロシージャーの名前、次に括弧で囲まれた引数。これを説明する例を以下に示します。

<to uri="sql-stored:STOREDSAMPLE(INTEGER ${headers.num1},INTEGER ${headers.num2},INOUT INTEGER ${headers.num3} result1,OUT INTEGER result2)"/>

引数は型によって宣言され、Simple 式を使用して Camel メッセージへのマッピングが宣言されます。この例では、最初の 2 つのパラメーターは INTEGER タイプの IN 値であり、メッセージヘッダーにマッピングされます。3 番目のパラメーターは INOUT で、INTEGER を受け入れ、別の INTEGER 結果を返します。最後のパラメーターは OUT 値であり、INTEGER タイプでもあります。

SQL 用語では、ストアドプロシージャーは以下のように宣言できます。

CREATE PROCEDURE STOREDSAMPLE(VALUE1 INTEGER, VALUE2 INTEGER, INOUT RESULT1 INTEGER, OUT RESULT2 INTEGER)

305.3.1. IN パラメーター

IN パラメーターは、パラメーター名、SQL タイプ(スケール)、型 name および value source の 4 つの部分をスペースで区切って使用します。

パラメーター名は任意で、指定されていない場合には自動生成されます。これは、引用符(')間で指定する必要があります。

SQL 型が必要であり、整数(正または負の)または一部のクラスの整数フィールドへの参照を使用できます。SQL タイプにドットが含まれる場合、コンポーネントはそのクラスを解決し、指定のフィールドを読み込もうとします。たとえば、SQL タイプの com.Foo.INTEGER は、クラス com.Foo の INTEGER フィールドから読み取られます。タイプにコンマが含まれていない場合、整数値を解決するクラスは java.sql.Types になります。タイプは、スケールスケールで必要になる場合があります。たとえば、DECIMAL(10)は、スケール 10 の java.sql.Types.DECIMAL を意味します。

タイプ名はオプションで、引用符(')の間で指定する必要があります。

値ソース が必要です。値ソース は、エクスチェンジからパラメーター値を生成します。Simple 式またはヘッダーの場所(:#<header name> など)のいずれかになります。たとえば、Simple expression ${header.val} は、パラメーター値がヘッダー「val」から読み取られることを意味します。ヘッダーの場所式 :#val は同じ効果を持ちます。

<to uri="sql-stored:MYFUNC('param1' org.example.Types.INTEGER(10) ${header.srcValue})"/>

URI は、ストアドプロシージャーがパラメーター名「param1」で呼び出されます。この SQL タイプは、クラス org.example.Types の INTEGER から読み取られ、scale は 10 に設定されます。パラメーターの入力値はヘッダー「srcValue」から渡されます。

<to uri="sql-stored:MYFUNC('param1' 100 'mytypename' ${header.srcValue})"/>

SQLtype は 100 で、タイプ name は "mytypename" 以外は、URI は以前のものと同じです。

実際の呼び出しは、org.springframework.jdbc.core.SqlParameter を使用して行われます。