2016-07-01 4 views
0

このプロジェクトでは、スプリング統合を使用しています。私はint-jdbc:stored-proc-outbound-gatewayを使用してストアドプロシージャを実行しています。不思議なことに、同じストアドプロシージャがSQL Developerから正常に実行され、必要な行がテーブルに挿入されてしまっています。 ストアドプロシージャアウトバウンドゲートウェイが有効なストアドプロシージャを実行できません

2016-07-01 11:45:49,254 DEBUG http-0.0.0.0-8080-4 [org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator] Translating SQLException with SQL state '65000', error code '6550', message [ORA-06550: line 1, column 7: 
PLS-00306: wrong number or types of arguments in call to 'ZSPPQINSERTUSERIDBA' 
ORA-06550: line 1, column 7: 
PL/SQL: Statement ignored 
]; SQL was [{call ZSPPQINSERTUSERIDBA(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)}] for task [CallableStatementCallback] 

は私 int-jdbc:stored-proc-outbound-gatewayです:

2016-07-01 11:45:48,505 DEBUG http-0.0.0.0-8080-4 [org.springframework.jdbc.core.simple.SimpleJdbcCall] The following parameters are used for call {call ZSPPQINSERTUSERIDBA(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)} with: {P_LEGACYLOGIN=ratna, P_ADDSECURPASSWORD=, P_SELECTEDIND=N, P_OTHERPASSWORD=, P_BUSINESSAREA=CS2XAA, P_USERID=DT76747, P_DEFAULTIND=Y, P_OTHERLOGIN=, P_LASTUPDATE=2016-07-01-11.45.21.000590, P_ADDSECURLOGIN=, P_LASTUPDATEUSERID=DT76747, P_LEGACYSYSTEM=Amisys, P_LEGACYPASSWORD=engan} 

............. 


Caused by: org.springframework.jdbc.BadSqlGrammarException: CallableStatementCallback; bad SQL grammar [{call ZSPPQINSERTUSERIDBA(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)}]; nested exception is java.sql.SQLException: ORA-06550: line 1, column 7: 
PLS-00306: wrong number or types of arguments in call to 'ZSPPQINSERTUSERIDBA' 
ORA-06550: line 1, column 7: 
PL/SQL: Statement ignored 

ストアドプロシージャは、以下の通りです:

<int-jdbc:stored-proc-outbound-gateway 
         id="PQPutUserBAInformation-AWD-StoredProcedure2" 
         auto-startup="true" 
         data-source="routingDataSource" 
         stored-procedure-name="ZSPPQINSERTUSERIDBA" 
         skip-undeclared-results="true" 
         ignore-column-meta-data="true" 
         use-payload-as-parameter-source = "false" 
         expect-single-result="true" > 

         <int-jdbc:sql-parameter-definition name="P_USERID" direction="IN" type="VARCHAR" /> 
         <int-jdbc:sql-parameter-definition name="P_BUSINESSAREA" direction="IN" type="VARCHAR" /> 
         <int-jdbc:sql-parameter-definition name="P_SELECTEDIND" direction="IN" type="VARCHAR" /> 
         <int-jdbc:sql-parameter-definition name="P_DEFAULTIND" direction="IN" type="VARCHAR" /> 
         <int-jdbc:sql-parameter-definition name="P_LEGACYSYSTEM" direction="IN" type="VARCHAR" /> 
         <int-jdbc:sql-parameter-definition name="P_LEGACYLOGIN" direction="IN" type="VARCHAR" /> 
         <int-jdbc:sql-parameter-definition name="P_LEGACYPASSWORD" direction="IN" type="VARCHAR" /> 
         <int-jdbc:sql-parameter-definition name="P_OTHERLOGIN" direction="IN" type="VARCHAR" /> 
         <int-jdbc:sql-parameter-definition name="P_OTHERPASSWORD" direction="IN" type="VARCHAR" /> 
         <int-jdbc:sql-parameter-definition name="P_ADDSECURLOGIN" direction="IN" type="VARCHAR" /> 
         <int-jdbc:sql-parameter-definition name="P_ADDSECURPASSWORD" direction="IN" type="VARCHAR" /> 
         <int-jdbc:sql-parameter-definition name="P_LASTUPDATEUSERID" direction="IN" type="VARCHAR" /> 
         <int-jdbc:sql-parameter-definition name="P_LASTUPDATE" direction="IN" type="VARCHAR" /> 


         <int-jdbc:parameter name="P_USERID" expression="#xpath(payload, '//CurrentUserID')" /> 
         <int-jdbc:parameter name="P_BUSINESSAREA" expression="#xpath(payload, '//SelectedBusinessArea/Code')" /> 
         <int-jdbc:parameter name="P_SELECTEDIND" expression="#xpath(payload, '//SelectedBusinessArea/Selected')" /> 
         <int-jdbc:parameter name="P_DEFAULTIND" expression="#xpath(payload, '//SelectedBusinessArea/Default')" /> 
         <int-jdbc:parameter name="P_LEGACYSYSTEM" expression="#xpath(payload, '//SelectedBusinessArea/LegacySystem')" /> 
         <int-jdbc:parameter name="P_LEGACYLOGIN" expression="#xpath(payload, '//SelectedBusinessArea/LegacyLogin')" /> 

         <int-jdbc:parameter name="P_LEGACYPASSWORD" expression="headers.LegacyPassword" /> 

         <int-jdbc:parameter name="P_OTHERLOGIN" expression="#xpath(payload, '//SelectedBusinessArea/OtherLogin')" /> 

         <int-jdbc:parameter name="P_OTHERPASSWORD" expression="headers.otherPassword" /> 

         <int-jdbc:parameter name="P_ADDSECURLOGIN" expression="#xpath(payload, '//SelectedBusinessArea/AddSecurLogin')" /> 

         <int-jdbc:parameter name="P_ADDSECURPASSWORD" expression="headers.addSecurPassword" /> 

         <int-jdbc:parameter name="P_LASTUPDATEUSERID" expression="#xpath(payload, '//userID')" /> 
         <int-jdbc:parameter name="P_LASTUPDATE" expression="#xpath(payload, '//dateTimeStamp')" /> 

       <int-jdbc:returning-resultset name="rowMapper" row-mapper="com.dsths.cs.awd.utils.ResultSetRowMapper"/> 

次は、デバッグモードで受信したログファイルの内容の一部をあります

create or replace procedure ZSPPQINSERTUSERIDBA 
(
    P_USERID in types.char10, 
    P_BUSINESSAREA in types.char10, 
    P_SELECTEDIND in types.char1, 
    P_DEFAULTIND in types.char1, 
    P_LEGACYSYSTEM in types.char10, 
    P_LEGACYLOGIN in types.char16, 
    P_LEGACYPASSWORD in types.char16, 
    P_OTHERLOGIN in types.char10, 
    P_OTHERPASSWORD in types.char10, 
    P_ADDSECURLOGIN in types.char10, 
    P_ADDSECURPASSWORD in types.char10, 
    P_LASTUPDATEUSERID in types.char10, 
    P_LASTUPDATE in types.char26 
) 
authid current_user 
as 
    TOTALCNT INTEGER DEFAULT 0 ; 

begin 
    select count(*) into TOTALCNT 
    from USERBUSINESSAREA 
    where USERID = P_USERID 
    and BUSINESSAREA = P_BUSINESSAREA; 

    if (TOTALCNT = 0) 
    then 
     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 if; 
end; 

誰かがここで間違っているかもしれない何かを助けてくれますか?

+0

ストアドプロシージャ定義を共有してください。 –

+0

@ArtemBilanレスポンスありがとうございます。質問にストアドプロシージャ定義が含まれています。 –

答えて

1

procedure ZSPPQINSERTUSERIDBAによると、手順には返品が一切ありません。だからこそあなたの<int-jdbc:returning-resultset name="rowMapper">は間違った余分な引数のようなものです。

したがって、void手順コンポーネントの場合は、一方向に正確に<int-jdbc:stored-proc-outbound-channel-adapter>を使用することを検討してください。

+0

ありがとうございました。 –

関連する問題