2016-07-01 8 views
0

Wir verwenden die Federintegration in unserem Projekt. Ich verwende int-jdbc:stored-proc-outbound-gateway, um eine gespeicherte Prozedur auszuführen. Ich erhalte den folgenden Fehler, wenn ich Spring-Integration-Layer verwende, um die gespeicherte Prozedur zu treffen. Aber seltsamerweise wird dieselbe gespeicherte Prozedur erfolgreich von SQL Developer ausgeführt und die erforderliche Zeile in die Tabelle eingefügt.Stored Procedure Outbound Gateway kann keine gültige gespeicherte Prozedur ausführen

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] 

Das folgende ist mein 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 

Die gespeicherte Prozedur ist unten:

<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"/> 

Die folgenden einige der Protokolldatei Inhalt in den Debug-Modus empfangen wird

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; 

Kann mir bitte jemand helfen, was hier falsch sein könnte?

+0

Bitte teilen Sie die gespeicherte Prozedurdefinition –

+0

@ArtemBilan Danke für die Antwort. Ich habe die gespeicherte Prozedurdefinition in der Frage enthalten. –

Antwort

1

Gemäß Ihrer procedure ZSPPQINSERTUSERIDBA ist es nur Verfahren ohne Rücksendungen. Deshalb ist Ihr <int-jdbc:returning-resultset name="rowMapper"> wie ein falsches und zusätzliches Argument, das diesen Fehler verursacht.

Also, verwenden Sie <int-jdbc:stored-proc-outbound-channel-adapter> - One-Way-genau für void Verfahren Komponente.

+0

Danke ... +1 für schnelle Antwort –