При выполнении daoMethod()
я получаю следующее исключение:
java.sql.SQLException: процедура или функция 'Get_Books' ожидает параметр '@totalRowsReturned', который не был предоставлен.
Почему? Я определил @totalRowsReturned
как ВЫХОД. И я не понимаю, почему я должен предоставить @totalRowsReturned
- это выходной параметр, а не входной.
Дао класс:
public class BookDao {
@Autowired
DataSource dataSource;
public void daoMethod() {
Integer programIdLocal = null;
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("bookId", 1);
MyStoredProcedure storedProcedure = new MyStoredProcedure(dataSource);
//Exception!!!!
Map<String, Object> results = storedProcedure.execute(parameters);
}
private class MyStoredProcedure extends StoredProcedure {
private static final String SQL = "dbo.Get_Books";
public MyStoredProcedure(DataSource dataSource) {
setDataSource(dataSource);
setFunction(true);
setSql(SQL);
declareParameter(new SqlReturnResultSet("rs", new BookMapper()));
declareParameter(new SqlOutParameter("totalRowsReturned", Types.INTEGER));
declareParameter(new SqlParameter("bookId", Types.INTEGER));
setFunction(true);
compile();
}
}
}
Хранимая процедура:
CREATE PROCEDURE [dbo].[Get_Books]
@bookId int,
@totalRowsReturned int OUTPUT
AS
BEGIN
SET NOCOUNT ON;
DECLARE @SelectQuery NVARCHAR(2000)
DECLARE @first_id int
DECLARE @totalRows int
SET @SelectQuery = 'FROM books b WHERE b.book_id >= @bookId'
Set @SelectQuery = 'SELECT @first_id = b.book_id , @totalRows=Count(*) OVER() ' + @SelectQuery + ' ORDER BY b.book_id'
Execute sp_Executesql @SelectQuery, N'@first_id int, @bookId int, @totalRows int OUTPUT', @first_id, @bookId, @totalRows=@totalRowsReturned OUTPUT
END