[[sql-stored-component]]
= SQL Stored Procedure Component
:page-source: components/camel-sql/src/main/docs/sql-stored-component.adoc

*Since Camel 2.17*

// HEADER START
*Only producer is supported*
// HEADER END

The SQL Stored component allows you to work with databases using JDBC
Stored Procedure queries. This component is an extension to
the xref:sql-component.adoc[SQL Component] but specialized for calling
stored procedures.

This component uses `spring-jdbc` behind the scenes for the actual SQL
handling.

Maven users will need to add the following dependency to their `pom.xml`
for this component:

[source,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 format

The SQL component uses the following endpoint URI notation:

[source,text]
----
sql-stored:template[?options]
----

Where template is the stored procedure template, where you declare the
name of the stored procedure and the IN, INOUT, and OUT arguments. 

You can also refer to the template in a external file on the file system
or classpath such as:

[source,text]
----
sql-stored:classpath:sql/myprocedure.sql[?options]
----

Where sql/myprocedure.sql is a plain text file in the classpath with the
template, as show:

[source,text]
----
SUBNUMBERS(
  INTEGER ${headers.num1},
  INTEGER ${headers.num2},
  INOUT INTEGER ${headers.num3} out1,
  OUT INTEGER out2
)
----

You can append query options to the URI in the following format,
`?option=value&option=value&...`

== Options



// component options: START
The SQL Stored Procedure component supports 4 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *dataSource* (producer) | Sets the DataSource to use to communicate with the database. |  | DataSource
| *basicPropertyBinding* (advanced) | Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
| *lazyStartProducer* (producer) | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing. | false | boolean
| *bridgeErrorHandler* (consumer) | Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored. | false | boolean
|===
// component options: END




// endpoint options: START
The SQL Stored Procedure endpoint is configured using URI syntax:

----
sql-stored:template
----

with the following path and query parameters:

=== Path Parameters (1 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *template* | *Required* Sets the StoredProcedure template to perform |  | String
|===


=== Query Parameters (9 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *batch* (producer) | Enables or disables batch mode | false | boolean
| *dataSource* (producer) | Sets the DataSource to use to communicate with the database. |  | DataSource
| *function* (producer) | Whether this call is for a function. | false | boolean
| *lazyStartProducer* (producer) | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing. | false | boolean
| *noop* (producer) | If set, will ignore the results of the template and use the existing IN message as the OUT message for the continuation of processing | false | boolean
| *outputHeader* (producer) | Store the template result in a header instead of the message body. By default, outputHeader == null and the template result is stored in the message body, any existing content in the message body is discarded. If outputHeader is set, the value is used as the name of the header to store the template result and the original message body is preserved. |  | String
| *useMessageBodyForTemplate* (producer) | Whether to use the message body as the template and then headers for parameters. If this option is enabled then the template in the uri is not used. | false | boolean
| *basicPropertyBinding* (advanced) | Whether the endpoint should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
| *synchronous* (advanced) | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | boolean
|===
// endpoint options: END
// spring-boot-auto-configure options: START
== Spring Boot Auto-Configuration

When using Spring Boot make sure to use the following Maven dependency to have support for auto configuration:

[source,xml]
----
<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-sql-starter</artifactId>
  <version>x.x.x</version>
  <!-- use the same version as your Camel core version -->
</dependency>
----


The component supports 5 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *camel.component.sql-stored.basic-property-binding* | Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | Boolean
| *camel.component.sql-stored.bridge-error-handler* | Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored. | false | Boolean
| *camel.component.sql-stored.data-source* | Sets the DataSource to use to communicate with the database. The option is a javax.sql.DataSource type. |  | String
| *camel.component.sql-stored.enabled* | Whether to enable auto configuration of the sql-stored component. This is enabled by default. |  | Boolean
| *camel.component.sql-stored.lazy-start-producer* | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing. | false | Boolean
|===
// spring-boot-auto-configure options: END



== Declaring the stored procedure template

The template is declared using a syntax that would be similar to a Java
method signature. The name of the stored procedure, and then the
arguments enclosed in parenthesis. An example explains this well:

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

The arguments are declared by a type and then a mapping to the Camel
message using simple expression. So, in this example the first two
parameters are IN values of INTEGER type, mapped to the message
headers. The third parameter is INOUT, meaning it accepts an INTEGER
and then returns a different INTEGER result. The last parameter is
the OUT value, also an INTEGER type.

In SQL term the stored procedure could be declared as:

[source,sql]
----
CREATE PROCEDURE STOREDSAMPLE(VALUE1 INTEGER, VALUE2 INTEGER, INOUT RESULT1 INTEGER, OUT RESULT2 INTEGER)
----

=== IN Parameters

IN parameters take four parts separated by a space: parameter name, SQL type (with scale), type name and value source.

Parameter name is optional and will be auto generated if not provided. It must be given between quotes(').

SQL type is required and can be an integer (positive or negative) or reference to integer field in some class.
If SQL type contains a dot then component tries resolve that class and read the given field. For example
SQL type `com.Foo.INTEGER` is read from the field INTEGER of class `com.Foo`. If the type doesn't
contain comma then class to resolve the integer value will be `java.sql.Types`.
Type can be postfixed by scale for example DECIMAL(10) would mean `java.sql.Types.DECIMAL` with scale 10.

Type name is optional and must be given between quotes(').

Value source is required. Value source populates the parameter value from the Exchange.
It can be either a Simple expression or header location i.e. `:#<header name>`. For example
Simple expression `${header.val}` would mean that parameter value will be read from the header "val".
Header location expression :#val would have identical effect.

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

URI means that the stored procedure will be called with parameter name "param1",
it's SQL type is read from field INTEGER of class `org.example.Types` and scale will be set to 10.
Input value for the parameter is passed from the header "srcValue".

[source,java]
----------------------------------------------------------------------------------------------------------
<to uri="sql-stored:MYFUNC('param1' 100 'mytypename' ${header.srcValue})"/>
----------------------------------------------------------------------------------------------------------
URI is identical to previous on except SQL-type is 100 and type name is "mytypename".

Actual call will be done using org.springframework.jdbc.core.SqlParameter.

=== OUT Parameters

OUT parameters work similarly IN parameters and contain three parts: SQL type(with scale), type name and output parameter name.

SQL type works the same as IN parameters.

Type name is optional and also works the same as IN parameters.

Output parameter name is used for the OUT parameter name, as well as the header name where the result will be stored.

[source,xml]
----
<to uri="sql-stored:MYFUNC(OUT org.example.Types.DECIMAL(10) outheader1)"/>
----

URI means that OUT parameter's name is "outheader1" and result will be but into header "outheader1".

[source,xml]
----
<to uri="sql-stored:MYFUNC(OUT org.example.Types.NUMERIC(10) 'mytype' outheader1)"/>
----

This is identical to previous one but type name will be "mytype".

Actual call will be done using `org.springframework.jdbc.core.SqlOutParameter`.

=== INOUT Parameters

INOUT parameters are a combination of all of the above.  They receive a value from the exchange, as well as store a
result as a message header.  The only caveat is that the IN parameter's "name" is skipped.  Instead, the OUT
parameter's "name" defines both the SQL parameter name, as well as the result header name.

[source,xml]
----
<to uri="sql-stored:MYFUNC(INOUT DECIMAL(10) ${headers.inheader} outheader)"/>
----

Actual call will be done using org.springframework.jdbc.core.SqlInOutParameter.

== Camel SQL Starter

A starter module is available to spring-boot users. When using the starter,
the `DataSource` can be directly configured using spring-boot properties.

[source,text]
----
# Example for a mysql datasource
spring.datasource.url=jdbc:mysql://localhost/test
spring.datasource.username=dbuser
spring.datasource.password=dbpass
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
----

To use this feature, add the following dependencies to your spring boot pom.xml file:

[source,xml]
----
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-sql-starter</artifactId>
    <version>${camel.version}</version> <!-- use the same version as your Camel core version -->
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
    <version>${spring-boot-version}</version>
</dependency>
----

You should also include the specific database driver, if needed.

