2016-10-06 2 views
1

에 대해 정의되지 않았습니다. 나는 아무런 오류가 없다. 나는 다음과 같은 오류가 절차오류 :이 저장 프로 시저를 호출 할 때 매개 변수 아웃 저장 프로 시저

procedure [dbo].[pTest] 
    @ReportData varbinary(max) out 
    ,@Date varchar(max) =null 
as 
begin 
select * from test 
end 

에 다른 매개 변수를 추가 할 때 : 나는 @Date 매개 변수를 제거하고 그에 따라 코드를 수정하는 경우

2016-10-06 15:50:16.283 DEBUG 32604 --- [   main] c.m.s.jdbc.internals.SQLServerException : *** SQLException:SQLServerCallableStatement:9 com.microsoft.sqlserver.jdbc.SQLServerException: Parameter out was not defined for stored procedure pTest. Parameter out was not defined for stored procedure pTest. 
2016-10-06 15:50:16.289 DEBUG 32604 --- [   main] o.h.engine.jdbc.spi.SqlExceptionHelper : Error preparing CallableStatement [pTest] 

com.microsoft.sqlserver.jdbc.SQLServerException: Parameter out was not defined for stored procedure pTest. 
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:191) ~[sqljdbc-4.2.jar:na] 

, 나는 어떤 오류가 발생하지 않습니다. @Date 매개 변수를 두 개 매개 변수로 다시 추가하면 오류가 다시 발생합니다. 왜?

다음과 같이 두 PARAMS의 코드는 다음과 같습니다

@Entity 
@NamedStoredProcedureQuery(name = "Test.getTest", procedureName = "pTest", parameters = { 
     @StoredProcedureParameter(mode = ParameterMode.IN, name = "Date", type = String.class), 
     @StoredProcedureParameter(mode = ParameterMode.OUT, name = "ReportData", type = byte[].class) 
      }) 
public class Test { 

    // serves no purpose other than to meet 
    // JPA requirement 
    @Id 
    private byte[] reportData; 
} 

봄 데이터 저장소 :

public interface TestRepository extends Repository<Test, Long> { 
    @Procedure("pTest") 
    byte[] get(@Param("Date") String date); 
} 

테스트 코드 :

@RunWith(SpringRunner.class) 
@SpringBootTest 
@Transactional(transactionManager="transactionManager") 
public class TestRepositoryTest { 

    @Autowired 
    private TestRepository testRepository; 

    @Test 
    public void testGet() throws SQLException { 

     byte[] blob = testRepository.get("hi"); 
     //error occurs 
    } 

} 
+0

, 나는 오류'프로 시저 또는 함수 'PTEST가'매개 변수를 예상 얻을 '@ReportData'I를 supplied.'되지 않은 : 이것에

@Entity @NamedStoredProcedureQuery(name = "Test.getTest", procedureName = "pTest", parameters = { @StoredProcedureParameter(mode = ParameterMode.IN, name = "Date", type = String.class), @StoredProcedureParameter(mode = ParameterMode.OUT, name = "ReportData", type = byte[].class) }) 

: 그래서이를 변경 SQL Server 2005를 사용하고 있지만 SQL Server 2008에서도 동일한 동작을하는 것으로 보입니다. – James

+0

매개 변수 순서는 가져올 수 있습니다. 매개 변수의 순서를 변경하려고 시도 했으므로 'OUT'을 먼저 선언해야합니다. '@NamedStoredProcedureQuery '정의, 또는 저장 프로 시저 DDL에서 'OUT' 두 번째? –

+0

'@ NamedStoredProcedureQuery'에서'OUT '이 처음으로 순서가 변경되었습니다. 그래도 나는 여전히 같은 오류가 발생합니다. 나는 그 문제에 대한 해결책을 찾아 냈다. 나는 그것을 게시 할 것이다. 그러나 OP의 코드가 왜 작동하지 않는지 이해하는 것은 대단 할 것이다. – James

답변

1

이 문제 : 속성 이름의 발견을 @NamedStoredProcedureQuery은 저장소 메소드 이름과 일치해야합니다. 내가 jTDS를 사용하는 경우

@Entity 
@NamedStoredProcedureQuery(name = "Test.get", procedureName = "pTest", parameters = { 
     @StoredProcedureParameter(mode = ParameterMode.IN, name = "Date", type = String.class), 
     @StoredProcedureParameter(mode = ParameterMode.OUT, name = "ReportData", type = byte[].class) 
      }) 
관련 문제