Package org.frankframework.jdbc
Class StoredProcedureQuerySender
java.lang.Object
org.frankframework.jdbc.JdbcFacade
org.frankframework.jdbc.AbstractJdbcSender<QueryExecutionContext>
org.frankframework.jdbc.AbstractJdbcQuerySender<QueryExecutionContext>
org.frankframework.jdbc.FixedQuerySender
org.frankframework.jdbc.StoredProcedureQuerySender
- All Implemented Interfaces:
FrankElement,HasApplicationContext,HasName,HasPhysicalDestination,IBlockEnabledSender<QueryExecutionContext>,IConfigurable,IScopeProvider,ISender,ISenderWithParameters,IWithParameters,IXAEnabled,NameAware,ConfigurableLifecycle,org.springframework.beans.factory.Aware,org.springframework.context.ApplicationContextAware,org.springframework.context.Lifecycle,org.springframework.context.Phased,org.springframework.context.SmartLifecycle
StoredProcedureQuerySender is used to send stored procedure queries and retrieve the result.
QueryType settings and OUTPUT parameters
The StoredProcedureQuerySender class has the following features:- It supports setting the output parameters of the stored procedure by setting 'mode' attribute of the corresponding 'Param' to 'OUTPUT' or 'INOUT'.
- The queryType can only be 'SELECT' or 'OTHER'.
- Use queryType 'SELECT' when the stored procedure only returns a set of rows, and you need
the output to be the format as
FixedQuerySender(seeDB2XMLWriter). - Use queryType 'OTHER' if the stored procedure has one or more output parameters. With this query type, the stored procedure can return a result-set along with returning some values in output parameters. Depending on the database, the stored procedure can even returning multiple result sets or a combination of result sets as return values, and result sets as REF_CURSOR OUT parameters.
All stored procedure parameters that are not fixed, so specified in the query with a ?, should
have a corresponding IParameter entry. Output parameters should have mode="OUTPUT", or
mode="INOUT" depending on how the stored procedure is defined.
Sample Output for queryType=OTHER
Basic Example with Only Simple Output Parameters
<resultset>
<result param="r1" type="STRING">MESSAGE-CONTENTS</result>
<result param="r2" type="STRING">E</result>
</resultset>
Example with Resultset and Simple Output Parameters
<resultset>
<result resultNr="1">
<fielddefinition>
<field name="FIELDNAME"
type="columnType"
columnDisplaySize=""
precision=""
scale=""
isCurrency=""
columnTypeName=""
columnClassName=""/>
<field ...../>
</fielddefinition>
<rowset>
<row number="0">
<field name="TKEY">MSG-ID</field>
<field name="TCHAR">E</field>
<field name="TMESSAGE">MESSAGE-CONTENTS</field>
<field name="TCLOB" null="true"/>
<field name="TBLOB" null="true"/>
</row>
<row number="1" ...../>
</rowset>
</result>
<result param="count" type="INTEGER">5</result>
</resultset>
Example with Simple and Cursor Output Parameters
<resultset>
<result param="count" type="INTEGER">5</result>
<result param="cursor1" type="LIST">
<fielddefinition>
<field name="FIELDNAME"
type="columnType"
columnDisplaySize=""
precision=""
scale=""
isCurrency=""
columnTypeName=""
columnClassName=""/>
<field ...../>
</fielddefinition>
<rowset>
<row number="0">
<field name="TKEY">MSG-ID</field>
<field name="TCHAR">E</field>
<field name="TMESSAGE">MESSAGE-CONTENTS</field>
<field name="TCLOB" null="true"/>
<field name="TBLOB" null="true"/>
</row>
<row number="1" ..... />
</rowset>
</result>
</resultset>
- Since:
- 7.9
- Parameters
- All parameters present are applied to the query to be executed.
-
Nested Class Summary
Nested classes/interfaces inherited from class org.frankframework.jdbc.AbstractJdbcQuerySender
AbstractJdbcQuerySender.QueryType -
Field Summary
Fields inherited from class org.frankframework.jdbc.AbstractJdbcQuerySender
UNP_END, UNP_STARTFields inherited from class org.frankframework.jdbc.AbstractJdbcSender
connection, paramListFields inherited from class org.frankframework.jdbc.JdbcFacade
logFields inherited from interface org.springframework.context.SmartLifecycle
DEFAULT_PHASE -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidConfigure this component.protected MessageexecuteOtherQuery(Connection connection, PreparedStatement statement, String query, String resultQuery, PreparedStatement resStmt, Message message, PipeLineSession session, ParameterList parameterList) protected PreparedStatementprepareQueryWithColumnsReturned(Connection con, String query, String[] columnsReturned) protected PreparedStatementprepareQueryWithResultSet(Connection con, String query, int resultSetConcurrency) voidsetAvoidLocking(boolean avoidLocking) This feature is not supported for StoredProcedureQuerySender.voidThis feature is not supported for StoredProcedureQuerySender.voidsetBlobCharset(String string) This feature is not supported for StoredProcedureQuerySender.voidsetBlobColumn(int i) This feature is not supported for StoredProcedureQuerySender.voidsetBlobsCompressed(boolean b) This feature is not supported for StoredProcedureQuerySender.voidsetBlobSessionKey(String string) This feature is not supported for StoredProcedureQuerySender.voidsetBlobSmartGet(boolean b) This feature is not supported for StoredProcedureQuerySender.voidsetClobColumn(int i) This feature is not supported for StoredProcedureQuerySender.voidsetClobSessionKey(String string) This feature is not supported for StoredProcedureQuerySender.voidsetColumnsReturned(String string) This feature is not supported for StoredProcedureQuerySender.voidsetLockRows(boolean b) This feature is not supported for StoredProcedureQuerySender.voidsetLockWait(int i) This feature is not supported for StoredProcedureQuerySender.voidsetMaxRows(int i) This feature is not supported for StoredProcedureQuerySender.voidA SQL statement that calls a stored procedure.voidsetQueryType(AbstractJdbcQuerySender.QueryType queryType) The query type.voidsetRowIdSessionKey(String string) This feature is not supported for StoredProcedureQuerySender.voidsetStartRow(int i) This feature is not supported for StoredProcedureQuerySender.Methods inherited from class org.frankframework.jdbc.FixedQuerySender
closeBlock, closeStatementSet, getQuery, openBlock, sendMessage, setBatchSizeMethods inherited from class org.frankframework.jdbc.AbstractJdbcQuerySender
adjustQueryAndParameterListForNamedParameters, buildDb2XMLWriter, closeConnectionForSendMessage, convertQuery, executeOtherQuery, executePackageQuery, executeSelectQuery, executeStatementSet, executeUpdateBlobQuery, executeUpdateClobQuery, fillParamArray, getBatchSize, getCallWithRowIdReturned, getConnectionForSendMessage, getQueryExecutionContext, getResult, getResult, getReturnedColumns, getStatement, getUpdateStatementResult, prepareQuery, setCloseOutputstreamOnExit, setIncludeFieldDefinition, setNullValue, setOutputFormat, setPackageContent, setPrettyPrint, setResultQuery, setScalar, setScalarExtended, setSqlDialect, setStreamCharset, setSynchronous, setTrimSpaces, setUseNamedParams, startMethods inherited from class org.frankframework.jdbc.AbstractJdbcSender
addParameter, getConnection, getParameterList, sendMessage, setTimeout, stop, toStringMethods inherited from class org.frankframework.jdbc.JdbcFacade
getConnectionWithTimeout, getDatasource, getDatasourceName, getDbmsSupport, getLogPrefix, getPassword, getPhysicalDestinationName, isConnectionsArePooled, isRunning, isTransacted, setAuthAlias, setConnectionsArePooled, setDatasourceName, setDbmsSupportFactory, setName, setPassword, setTransacted, setUsernameMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface org.springframework.context.ApplicationContextAware
setApplicationContextMethods inherited from interface org.frankframework.lifecycle.ConfigurableLifecycle
getPhase, isAutoStartup, isConfiguredMethods inherited from interface org.frankframework.core.FrankElement
addConfigWarningMethods inherited from interface org.frankframework.core.HasApplicationContext
getApplicationContext, getConfigurationClassLoaderMethods inherited from interface org.frankframework.core.ISender
isSynchronous, sendMessageOrThrowMethods inherited from interface org.frankframework.core.ISenderWithParameters
consumesSessionVariableMethods inherited from interface org.springframework.context.SmartLifecycle
stop
-
Constructor Details
-
StoredProcedureQuerySender
public StoredProcedureQuerySender()
-
-
Method Details
-
configure
Description copied from interface:IConfigurableConfigure this component.configure()is called once at startup of the framework in the configure method of the owner of thisIConfigurable. Purpose of this method is to check whether the static configuration of the object is correct. As much as possible class-instantiating should take place in theconfigure(), to improve performance.In the case of a container, this will propagate the configure signal to all components that apply.
- Specified by:
configurein interfaceIConfigurable- Overrides:
configurein classFixedQuerySender- Throws:
ConfigurationException- in case it was not able to configure the component.
-
prepareQueryWithResultSet
protected PreparedStatement prepareQueryWithResultSet(Connection con, String query, int resultSetConcurrency) throws SQLException - Overrides:
prepareQueryWithResultSetin classAbstractJdbcQuerySender<QueryExecutionContext>- Throws:
SQLException
-
prepareQueryWithColumnsReturned
protected PreparedStatement prepareQueryWithColumnsReturned(Connection con, String query, String[] columnsReturned) throws SQLException - Overrides:
prepareQueryWithColumnsReturnedin classAbstractJdbcQuerySender<QueryExecutionContext>- Throws:
SQLException
-
executeOtherQuery
protected Message executeOtherQuery(@Nonnull Connection connection, @Nonnull PreparedStatement statement, @Nonnull String query, @Nullable String resultQuery, @Nullable PreparedStatement resStmt, @Nullable Message message, @Nullable PipeLineSession session, @Nullable ParameterList parameterList) throws SenderException - Overrides:
executeOtherQueryin classAbstractJdbcQuerySender<QueryExecutionContext>- Throws:
SenderException
-
setQuery
A SQL statement that calls a stored procedure. The statement should begin with theCALLorEXECSQL keyword depending on SQL dialect. In case of doubt, the safe choice is to always start withCALLand choose Oracle dialect.- Overrides:
setQueryin classFixedQuerySender- Parameters:
query- The SQL statement to invoke the stored procedure.
-
setQueryType
The query type. For stored procedures, valid query types areAbstractJdbcQuerySender.QueryType.SELECTandAbstractJdbcQuerySender.QueryType.OTHER. UseAbstractJdbcQuerySender.QueryType.SELECTwhen your stored procedure returns a row set (not supported by Oracle and PostgreSQL). UseAbstractJdbcQuerySender.QueryType.OTHERwhen your stored procedure returns values viaOUTorINOUTparameters, or does not return anything at all.Using any other value will be rejected.
- Overrides:
setQueryTypein classAbstractJdbcQuerySender<QueryExecutionContext>- Parameters:
queryType- The queryType.
-
setColumnsReturned
This feature is not supported for StoredProcedureQuerySender.- Overrides:
setColumnsReturnedin classAbstractJdbcQuerySender<QueryExecutionContext>
-
setLockRows
public void setLockRows(boolean b) This feature is not supported for StoredProcedureQuerySender.- Overrides:
setLockRowsin classAbstractJdbcQuerySender<QueryExecutionContext>
-
setLockWait
public void setLockWait(int i) This feature is not supported for StoredProcedureQuerySender.- Overrides:
setLockWaitin classAbstractJdbcQuerySender<QueryExecutionContext>
-
setBlobColumn
public void setBlobColumn(int i) This feature is not supported for StoredProcedureQuerySender.- Overrides:
setBlobColumnin classAbstractJdbcQuerySender<QueryExecutionContext>
-
setBlobSessionKey
This feature is not supported for StoredProcedureQuerySender.- Overrides:
setBlobSessionKeyin classAbstractJdbcQuerySender<QueryExecutionContext>
-
setBlobsCompressed
public void setBlobsCompressed(boolean b) This feature is not supported for StoredProcedureQuerySender.- Overrides:
setBlobsCompressedin classAbstractJdbcQuerySender<QueryExecutionContext>
-
setBlobBase64Direction
This feature is not supported for StoredProcedureQuerySender.- Overrides:
setBlobBase64Directionin classAbstractJdbcQuerySender<QueryExecutionContext>
-
setBlobCharset
This feature is not supported for StoredProcedureQuerySender.- Overrides:
setBlobCharsetin classAbstractJdbcQuerySender<QueryExecutionContext>
-
setBlobSmartGet
public void setBlobSmartGet(boolean b) This feature is not supported for StoredProcedureQuerySender.- Overrides:
setBlobSmartGetin classAbstractJdbcQuerySender<QueryExecutionContext>
-
setClobColumn
public void setClobColumn(int i) This feature is not supported for StoredProcedureQuerySender.- Overrides:
setClobColumnin classAbstractJdbcQuerySender<QueryExecutionContext>
-
setClobSessionKey
This feature is not supported for StoredProcedureQuerySender.- Overrides:
setClobSessionKeyin classAbstractJdbcQuerySender<QueryExecutionContext>
-
setAvoidLocking
public void setAvoidLocking(boolean avoidLocking) This feature is not supported for StoredProcedureQuerySender.- Overrides:
setAvoidLockingin classAbstractJdbcQuerySender<QueryExecutionContext>
-
setMaxRows
public void setMaxRows(int i) This feature is not supported for StoredProcedureQuerySender.- Overrides:
setMaxRowsin classAbstractJdbcQuerySender<QueryExecutionContext>
-
setStartRow
public void setStartRow(int i) This feature is not supported for StoredProcedureQuerySender.- Overrides:
setStartRowin classAbstractJdbcQuerySender<QueryExecutionContext>
-
setRowIdSessionKey
This feature is not supported for StoredProcedureQuerySender.- Overrides:
setRowIdSessionKeyin classAbstractJdbcQuerySender<QueryExecutionContext>
-