Spring integration 使用存储过程出站通道适配器处理参数
我在我的项目中使用Spring集成。我有一个奇怪的情况需要处理。当我连接到DB2数据库时,我的存储过程不会返回任何结果。因此,我使用了Spring integration 使用存储过程出站通道适配器处理参数,spring-integration,Spring Integration,我在我的项目中使用Spring集成。我有一个奇怪的情况需要处理。当我连接到DB2数据库时,我的存储过程不会返回任何结果。因此,我使用了int-jdbc:stored-proc-outbound-channeladapter和int:publish-subscribe-channel来执行存储过程并继续执行流程 现在,Oracle数据库中的同一存储过程返回一些结果。因此,使用int-jdbc:stored-proc-outbound-channel adapter执行Oracle存储过程会导致问题
int-jdbc:stored-proc-outbound-channeladapter
和int:publish-subscribe-channel
来执行存储过程并继续执行流程
现在,Oracle数据库中的同一存储过程返回一些结果。因此,使用int-jdbc:stored-proc-outbound-channel adapter
执行Oracle存储过程会导致问题,因为它需要定义一个额外的参数,即OUT
ORA-06550: line 1, column 7: PLS-00306: wrong number or types of arguments in call to ZSPPQINSERTUSERIDBA
是否有任何方法可以为int jdbc:stored proc outbound channel adapter
定义OUT
参数,以便Oracle存储过程在执行时不会出现任何问题
另外,如果int jdbc:stored proc outbound channel adapter
没有返回任何内容,我最不担心的是,存储过程应该使用OUT
参数成功执行
有没有办法处理这种情况
更新
以下是我的Oracle存储过程:
create or replace
PROCEDURE ZSPPQINSERTUSERIDBA (
P_USERID char,
P_BUSINESSAREA char,
P_SELECTEDIND char,
P_DEFAULTIND char,
P_LEGACYSYSTEM char,
P_LEGACYLOGIN char,
P_LEGACYPASSWORD char,
P_OTHERLOGIN char,
P_OTHERPASSWORD char,
P_ADDSECURLOGIN char,
P_ADDSECURPASSWORD char,
P_LASTUPDATEUSERID char,
P_LASTUPDATE char, cur OUT SYS_REFCURSOR)
AS
BEGIN
OPEN cur FOR SELECT * from USERBUSINESSAREA
where (USERID = P_USERID
AND BUSINESSAREA = P_BUSINESSAREA);
INSERT
INTO USERBUSINESSAREA
(
USERID,
BUSINESSAREA,
SELECTEDIND,
DEFAULTIND,
LEGACYSYSTEM,
LEGACYLOGIN,
LEGACYPASSWORD,
OTHERLOGIN,
OTHERPASSWORD,
ADDSECURLOGIN,
ADDSECURPASSWORD,
LASTUPDATEUSERID,
LASTUPDATE
)
VALUES ( P_USERID,
P_BUSINESSAREA,
P_SELECTEDIND,
P_DEFAULTIND,
P_LEGACYSYSTEM,
P_LEGACYLOGIN,
P_LEGACYPASSWORD,
P_OTHERLOGIN,
P_OTHERPASSWORD,
P_ADDSECURLOGIN,
P_ADDSECURPASSWORD,
P_LASTUPDATEUSERID,
P_LASTUPDATE);
END;
正如在以下章节中所描述的:
谢谢你的回复。配置
OUT
参数后,我仍然会收到相同的错误。仅供参考,对于Oracle,我的OUT
参数是返回ResultSet
的游标。但是,对于DB2,不会返回ResultSet
。现在有什么想法吗?所以,您需要两个单独的适配器定义—Oracle和DB2。考虑通过代码>配置文件< /代码>切断它们。为了正确地定义参数,我们需要知道Oracle过程的签名。也许它是一个函数
,它确实返回了值
…这只是一个XML名称空间前缀。当然,对于特定的模式位置,您必须使用配置中定义的。OK。在不返回结果集的情况下尝试。这在存储的proc出站通道适配器上确实不可用。很抱歉
<int-jdbc:sql-parameter-definition name="YOUR_OUT_PARAM" direction="OUT"/>
<int-jdbc:sql-parameter-definition name="CUR" direction="OUT" type="#{T(oracle.jdbc.OracleTypes).CURSOR}" />