Почему я получаю SQLCODE=-204, SQLSTATE=42704 с DB2 LUW и WebSphere App Server?

есть множество веб-страниц, где люди показывают это сообщение как симптом (со значением после SQLERRMC и уровень водителя меняется):

DB2 SQL Error: SQLCODE=-204, SQLSTATE=42704, SQLERRMC=M51Dev.CUSTOMER, DRIVER=3.61.65

в том числе несколько здесь on StackOverflow.

коды ошибок означают, что объект-почти всегда таблица - не найден, а значение SQLERRMC параметр содержит имя рассматриваемого объекта. В каждом другом случае этого я могу найти, решение было просто им нужно было квалифицировать имя таблицы с именем схемы. Однако, как вы можете видеть из строки выше,это не так. Схема M51Dev, и таблица CUSTOMER, и оба они существуют.

среда WebSphere Application Server (7.0.0.31 в данном конкретном случае, но я почему-то сомневаюсь, что это актуально) работает на Windows Server 2003 R2 с DB2 9.7.300.3885 на старой машине XP. Источник данных определяется в WAS и извлекается через JNDI. этот приложение написано на Java, а наш SQL выполняется с помощью JDBC через Spring's JdbcTemplates.

определение источника данных в WAS включает пользовательское свойство с именем currentSchema, который M51Dev.

это соответствующая строка SQL (или одна из них, так как мы получаем один и тот же симптом для каждой таблицы):

SELECT rundateOverride  FROM customer WHERE customerId=1

а вот выдержка из трассировки стека. Я могу предоставить больше, если это поможет.

bad SQL grammar [SELECT rundateOverride  FROM customer WHERE customerId=1]; nested exception is com.ibm.db2.jcc.am.SqlSyntaxErrorException: DB2 SQL Error: SQLCODE=-204, SQLSTATE=42704, SQLERRMC=M51Dev.CUSTOMER, DRIVER=3.61.65
    at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:233)
    at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72)
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:406)
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:455)
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:463)
    at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:471)
    at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:476)
    at com.misys.meridian.runtime.userPromptable.SchedulerService.refreshMarketCentreSystemDates(SchedulerService.java:1539)
    at com.misys.meridian.runtime.userPromptable.SchedulerService.performService(SchedulerService.java:270)
    at com.misys.meridian.runtime.userPromptable.SchedulerService.prompt(SchedulerService.java:175)
    at com.misys.meridian.runtime.userPromptable.GenericDelegate.process(GenericDelegate.java:95)
    at org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:61)
    at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)
    at org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99)
    at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90)
    at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)
    at org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99)
    at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90)
    at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:71)
    at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)
    at org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99)
    at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90)
    at org.apache.camel.processor.interceptor.TraceInterceptor.process(TraceInterceptor.java:91)
    at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)
    at org.apache.camel.processor.RedeliveryErrorHandler.processErrorHandler(RedeliveryErrorHandler.java:333)
    at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:223)
    at org.apache.camel.processor.RouteContextProcessor.processNext(RouteContextProcessor.java:45)
    at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90)
    at org.apache.camel.processor.interceptor.DefaultChannel.process(DefaultChannel.java:304)
    at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:117)
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:80)
    at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:117)
    at org.apache.camel.processor.Pipeline.access0(Pipeline.java:43)
    at org.apache.camel.processor.Pipeline.done(Pipeline.java:135)
    at org.apache.camel.processor.ThreadsProcessor$ProcessCall.run(ThreadsProcessor.java:56)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:450)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:314)
    at java.util.concurrent.FutureTask.run(FutureTask.java:149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:906)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:929)
    at java.lang.Thread.run(Thread.java:761)
Caused by: com.ibm.db2.jcc.am.SqlSyntaxErrorException: DB2 SQL Error: SQLCODE=-204, SQLSTATE=42704, SQLERRMC=M51Dev.CUSTOMER, DRIVER=3.61.65
    at com.ibm.db2.jcc.am.ed.a(ed.java:676)
    at com.ibm.db2.jcc.am.ed.a(ed.java:60)
    at com.ibm.db2.jcc.am.ed.a(ed.java:127)
    at com.ibm.db2.jcc.am.gn.c(gn.java:2554)
    at com.ibm.db2.jcc.am.gn.d(gn.java:2542)
    at com.ibm.db2.jcc.am.gn.a(gn.java:2034)
    at com.ibm.db2.jcc.t4.cb.g(cb.java:140)
    at com.ibm.db2.jcc.t4.cb.a(cb.java:40)
    at com.ibm.db2.jcc.t4.q.a(q.java:32)
    at com.ibm.db2.jcc.t4.rb.i(rb.java:135)
    at com.ibm.db2.jcc.am.gn.gb(gn.java:2005)
    at com.ibm.db2.jcc.am.gn.a(gn.java:3023)
    at com.ibm.db2.jcc.am.gn.a(gn.java:667)
    at com.ibm.db2.jcc.am.gn.executeQuery(gn.java:651)
    at com.ibm.ws.rsadapter.jdbc.WSJdbcStatement.executeQuery(WSJdbcStatement.java:999)
    at org.springframework.jdbc.core.JdbcTemplateQueryStatementCallback.doInStatement(JdbcTemplate.java:440)
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:395)
    ... 40 more

как раз как некоторый фон: это банковское приложение, поддерживающее несколько платформ баз данных. У нас есть многолетний опыт использования различных версий Oracle, MS SQL Server и DB2 для System i; но мы относительно новички в использовании DB2 LUW. Тем не менее, некоторые из моих коллег имеют вышеуказанную конфигурацию, по крайней мере, когда у них есть WAS и DB2 на одной машине.

и я могу запустить клиент SQL на машине, которая была, и подключиться к рассматриваемой базе данных с теми же параметрами и запросить ее успешно, включая использование SET SCHEMA M51Dev и не квалифицируя имена таблиц, которые, я думаю, наиболее близко эмулируют среду JDBC/JNDI.

1 ответов


ответ-чувствительность к регистру.

этот ответ был фактически предоставлен mustaccio на комментарий, но они, похоже, не хотят добавлять его в качестве ответа. Если вы видите это, @mustaccio, пожалуйста, добавьте свой собственный ответ, чтобы я мог его принять.

в любом случае, оказывается, что было эффективно помещать кавычки вокруг значений, которые вы указываете в разделе "пользовательские свойства". Я вошел! .. --0--> на currentSchema свойство, и оно было отправлено для DB2 as "M51Dev". Но DB2 сохранил имя схемы как M51DEV Он видит их как два разных значения, конечно..

указывающий M51DEV для значения свойства Исправлена проблема.