Red Hat Training
A Red Hat training course is available for Red Hat Fuse
第166章 SQL ストアドプロシージャ
SQL ストアドプロシージャコンポーネント
Camel 2.17 以降で利用可能
sql-stored: コンポーネントを使用すると、JDBC Stored Procedure クエリーを使用してデータベースを操作することができます。このコンポーネントは SQL コンポーネントの拡張ですが、ストアドプロシージャーを呼び出すために特化されています。
このコンポーネントは、実際の SQL 処理のために
spring-jdbc
を背後で使用します。
Maven ユーザーは、このコンポーネントの以下の依存関係を
pom.xml
に追加する必要があります。
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-sql</artifactId> <version>x.x.x</version> <!-- use the same version as your Camel core version --> </dependency>
URI 形式
SQL コンポーネントは、以下のエンドポイント URI 表記を使用します。
sql-stored:template[?options]
ここでの template は、ストアドプロシージャーの名前および IN および OUT 引数を宣言するテンプレートです。
また、ファイルシステム上の外部ファイルのテンプレートや、以下のようなクラスパスを参照することもできます。
sql-stored:classpath:sql/myprocedure.sql[?options]
sql/myprocedure.sql は、以下のようにテンプレートを含むクラスパスのプレーンテキストファイルです。
SUBNUMBERS( INTEGER ${headers.num1}, INTEGER ${headers.num2}, OUT INTEGER resultofsub )
以下の形式で URI にクエリーオプションを追加できます。
?option=value&option=value&...
オプション
オプション
|
型
|
デフォルト
|
説明
|
---|---|---|---|
batch
|
boolean
|
false
|
バッチモードを有効または無効にします。
|
dataSource
|
string
|
|
レジストリーで検索するための
DataSource への参照。
|
noop
|
boolean
|
false
|
が設定されている場合、テンプレートの結果を無視し、処理を継続するために OUT メッセージとして既存の IN メッセージを使用します。
|
outputHeader
|
string
|
テンプレート結果をメッセージのボディーではなくヘッダーに保存します。デフォルトでは outputHeader == null とテンプレートの結果はメッセージボディーに保存されます。メッセージボディーの既存のコンテンツは破棄されます。outputHeader が設定されている場合は、テンプレートの結果を格納するヘッダーの名前として値が使用され、元のメッセージボディーは保持されます。 | |
useMessageBodyForTemplate
|
boolean
|
false
|
メッセージボディーをテンプレートとして使用し、ヘッダーをパラメーターに使用するかどうか。このオプションが有効な場合には、uri のテンプレートは使用されません。 |
ストアドプロシージャーテンプレートの宣言
テンプレートは、Java メソッド署名と同様の構文を使用して宣言されます。ストアドプロシージャーの名前、そして括弧で囲まれた引数。この例では、以下も説明しています。
<to uri="sql-stored:SUBNUMBERS(INTEGER ${headers.num1},INTEGER ${headers.num2},OUT INTEGER resultofsub)"/>
引数は 型によって宣言され、Simple 式を使用した Camel メッセージへのマッピングです。この例では、最初の 2 つのパラメーターは INTEGER タイプの IN 値で、メッセージヘッダーにマッピングされます。最後のパラメーターは OUT 値で、INTEGER タイプでもあります。
SQL 用語では、ストアドプロシージャーは次のように宣言できます。
CREATE PROCEDURE SUBNUMBERS(VALUE1 INTEGER, VALUE2 INTEGER,OUT RESULT INTEGER)