我在项目中使用Spring Integration。我有一个奇怪的场景需要处理。当我连接到DB2数据库时,我的存储过程不会返回任何结果。所以,我使用int-jdbc:stored-proc-outbound-channel-adapter
和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
有没有办法为OUT
定义int-jdbc:stored-proc-outbound-channel-adapter
参数,以便Oracle存储过程可以毫无问题地执行。
P.S。如果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;
答案 0 :(得分:1)
就像Reference Manual中描述的那样:
<int-jdbc:sql-parameter-definition name="YOUR_OUT_PARAM" direction="OUT"/>
<强>更新强>
对于Oracle,您必须声明ignore-column-meta-data="true"
并使用<int-jdbc:sql-parameter-definition>
手动定义所有参数。
如果您的OUT
参数为SYS_REFCURSOR
,则sql-parameter-definition
必须如下:
<int-jdbc:sql-parameter-definition name="CUR" direction="OUT" type="#{T(oracle.jdbc.OracleTypes).CURSOR}" />