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)