Por que eu tenho SQLCODE=-204, SQLSTATE=42704 com DB2 LUW e WebSphere App Server?

existem numerosas páginas web onde as pessoas mostram esta mensagem como um sintoma (com o valor após SQLERRMC e o nível do condutor variando):

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

incluindo vários Aquiem StackOverflow.

Os códigos de erro significam que um objecto -- quase sempre uma tabela -- não é encontrado, e o valor do parâmetro SQLERRMC contém o nome do objecto em questão. Em todas as outras ocorrências que eu posso encontrar, a solução era apenas que eles precisavam qualifica o nome da tabela com o nome do esquema. No entanto, como podem ver pela linha acima, não é o caso aqui. O esquema é M51Dev, e a tabela é CUSTOMER, e ambos existem.

o ambiente é WebSphere Application Server (7.0.0.31 neste caso particular, mas duvido que isso seja relevante) rodando no Windows Server 2003 R2, com DB2 9.7.300.3885 em uma antiga máquina XP. A fonte de dados é definida em WAS e recuperada via JNDI. o aplicativo é escrito em Java, e nosso O SQL é executado utilizando o JDBC via Spring's JdbcTemplate s.

A definição de fonte de dados em era inclui uma propriedade personalizada chamada currentSchema, que é definida para M51Dev.

Esta é a linha relevante de SQL (ou um deles, pois temos o mesmo sintoma para cada tabela):

SELECT rundateOverride  FROM customer WHERE customerId=1
E aqui está um extracto da pilha de vestígios. Posso providenciar mais se ajudar.

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.access$100(Pipeline.java:43)
    at org.apache.camel.processor.Pipeline$1.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.JdbcTemplate$1QueryStatementCallback.doInStatement(JdbcTemplate.java:440)
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:395)
    ... 40 more

tal como alguns antecedentes: esta é uma aplicação bancária que suporta múltiplas plataformas de bases de dados. Temos anos de experiência com ele usando várias versões do Oracle, MS SQL Server e DB2 para o sistema i; mas nós somos relativamente novos para usar o DB2 LUW. Ainda assim, alguns dos meus colegas têm a configuração acima funcionando, pelo menos quando eles foram e DB2 na mesma máquina.

e eu posso executar um cliente SQL na máquina que foi, e conectar à base de dados em questão com os mesmos parâmetros e consultá-lo com sucesso, incluindo usando SET SCHEMA M51Dev e não qualificando os nomes das tabelas, que eu acho que a maioria emula de perto o ambiente JDBC / JNDI.

Author: Community, 2014-06-10

1 answers

A resposta é sensibilidade ao caso.

Esta resposta foi de facto fornecida pormustaccio num comentário, mas eles não parecem querer adicioná-la como resposta. Se você vir isto, @mustaccio, por favor adicione sua própria resposta, para que eu possa aceitá-la.

De qualquer forma, acontece que parece que foi efectivamente colocar aspas em torno dos valores que você especifica na secção "propriedades personalizadas". Eu tinha entrado {[[0]} para a propriedade currentSchema, e estava a ser enviada para DB2 como "M51Dev". Mas DB2 tinha armazenado o nome schema como M51DEV ele vê esses como dois valores diferentes, é claro..

Especificar M51DEV para o valor da propriedade resolveu o problema.

 9
Author: Martin McCallion, 2017-05-23 11:47:16