2011-12-13 6 views
0

Я использую драйвер jddc jconn2.jar (5.5) для Sybase для подключения к базе данных sybase из автономного приложения Java. Приложение java будет читать тысячи записей из текстового файла и вставлять их в таблицу в базе данных sysbase . У меня есть запрос select с предложением IN. Это предложение IN будет иметь более 10 000 значений. при выполнении этого запроса, то приложение возвращает ошибку ниже:com.sybase.jdbc2.jdbc.SybSQLException: Слишком много параметров - переполнение переполнения таблицы

Caused by: com.sybase.jdbc2.jdbc.SybSQLException: Too many parameters -- symbol table overflow.

at com.sybase.jdbc2.tds.Tds.processEed(Tds.java:3281) at com.sybase.jdbc2.tds.Tds.nextResult(Tds.java:2548) at com.sybase.jdbc2.jdbc.ResultGetter.nextResult(ResultGetter.java:69) at com.sybase.jdbc2.jdbc.SybStatement.nextResult(SybStatement.java:220) at com.sybase.jdbc2.jdbc.SybStatement.nextResult(SybStatement.java:203) at com.sybase.jdbc2.jdbc.SybStatement.queryLoop(SybStatement.java:1614) at com.sybase.jdbc2.jdbc.SybStatement.executeQuery(SybStatement.java:1599) at com.sybase.jdbc2.jdbc.SybPreparedStatement.executeQuery(SybPreparedStatement.java:96)

at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:93)

at org.springframework.jdbc.core.JdbcTemplate$1.doInPreparedStatement(JdbcTemplate.java:648)

at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:591) ... 10 more

Тот же запрос работает хорошо для значений в предложении IN с до 10000 значений.

Я пробовал с jconnect6 и jconnect7. но тот же результат.

У любого есть какая-либо идея, почему это , возвращая ошибку, как указано выше, для значений, имеющих больше , чем 10 000?

Заранее благодарен

+0

Вероятно, только потому, что существует жесткий предел количества элементов в предложении IN. Ограничение Oracle составляет 1000. –

+0

В соответствии с руководством sybase предложение IN в sybase может иметь до 2,50,000 элементов. http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.infocenter.help.ase.15.0.3/title.htm Количество значений в списке IN 250 000 –

+0

Тогда жесткий предел возможно, не по количеству элементов в предложении IN, а в количестве параметров в подготовленном заявлении. Это, кстати, сообщение об исключении: «Слишком много параметров - переполнение таблиц символов». –

ответ

0

Похоже, вы просто натолкнулись на жесткий лимит? Я бы не рекомендовал условие IN с такими многими значениями: если вам это нужно, вы делаете что-то совершенно нецелесообразное в своем SQL, и настало время посмотреть на рефакторинг ...?

+0

Первоначально я так думал. Но руководство sybase сообщает, что предложение IN в Sybase может иметь до 2,50,000. –

+0

Возможно, это жесткий предел в слое JDBC, а не Sybase. Если 9999 работает, а 10 000 - нет, это действительно говорит о том, что вы достигли предела. И есть более эффективные способы управления этим дизайном в 10 000+ значений, например. подзапрос, используйте временную таблицу. – Brian

+0

Это не совсем число 10000. Я положил его ок. Нет проблем, если нет. значений 10 000+. Но не работает со значениями 11 000+ –

Смежные вопросы