Как вы делаете вызовы jdbc сервера sql к хранимой процедуре использовать курсор на стороне сервера? - PullRequest
1 голос
/ 11 февраля 2009

Я использую JDBC для вызова хранимой процедуры в MSSql 2005. Мне бы хотелось, чтобы набор результатов использовал серверные курсоры для ограничения объема памяти, используемой клиентом. Я могу сделать это легко, используя простой запрос и установив курсор SelectMethod = на соединение. Когда я помещаю этот запрос в хранимую процедуру, кажется, что весь набор результатов возвращается так, как если бы соединение было создано с помощью SelectMethod = direct.

Есть ли способ заставить вызов хранимой процедуры вести себя как простой запрос.

Я тестировал драйверы MS SQL JDBC 1.1 и 1.2. В приведенном ниже примере разница между двумя значениями totalMemory зависит от размера результатов без извлечения каких-либо строк.

long totalMemoryUsed = java.lang.Runtime.getRuntime().totalMemory();
String sql = "{call ap_Select(?, ?, ?, ?)}";

CallableStatement cstmt = conn.prepareCall(sql,ResultSet.TYPE_FORWARD_ONLY,  
                           ResultSet.CONCUR_READ_ONLY);     
cstmt.setString(1,readAlldbnames );
cstmt.setString(2,readPublicDbnames);
cstmt.setString(3, whereClause);
cstmt.setString(4, " order by key5 ");

ResultSet a_resultSet = cstmt.executeQuery();
long totalMemoryUsedAfterQuery = java.lang.Runtime.getRuntime().totalMemory();

1 Ответ

0 голосов
/ 15 апреля 2010

Единственное, что я до сих пор нашел, - это получить набор результатов из хранимой процедуры в таблице, затем использовать серверный курсор на таблице и удалить таблицу ... Я хотел бы найти лучший способ, чем этот.

Пожалуйста, дайте мне знать, если возможно использовать серверные курсоры для вызовов хранимых процедур с использованием JDBC.

Спасибо,
Саялы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...