SAP/WebDynpro - JDBC Connection... Não suporta todos comandos SQL

Oi pessoal,

Em SAP WebDynpro, base de dados Oracle, diz na documentação que tenho que pegar a conecção da base de dados assim:

javax.naming.Context ctx = new javax.naming.InitialContext();
avax.sql.DataSource ds = (javax.sql.DataSource) ctx.lookup("jdbc/SAPDB");
java.sql.Connection conn = ds.getConnection();

Este código funciona, mas se tentar usar, Group By, Distinct, SubQuerys, retorna erros… mas se for um select simples funciona na boa.

Para resolver este probelma eu passei a usar o ojdbc driver:

oracle.jdbc.pool.OracleDataSource ods = new oracle.jdbc.pool.OracleDataSource();
ods.setURL(config.getStringEntry("oracle.datasource.url"));
ods.setUser(config.getStringEntry("oracle.datasource.user"));
ods.setPassword(config.getStringEntry("oracle.datasource.pass"));
java.sql.Connection conn = ods.getConnection();

Com o OJDBC todos os comandos SQL funcionam 100%, mas a na documentação dis para eu usar a outra maneira, e aqui no projeto o cliente prefere que eu faça como na documentação, já fui no forum oficial e todos usam a primeira opção… como vou poder resolver isto alguém sabe?

Exemplo… esta query:

select CUSTOM "MODULO" from
   SAPEPTDB.WCR_WEBCONTENTSTAT  inner join
      SAPEPTDB.WCR_USERPAGEUSAGE 
        on (ID = HOURLY_ID or 
            ID = DAILY_ID or 
            ID = WEEKLY_ID or 
            ID = MONTHLY_ID or 
            ID = QUARTERLY_ID) 
group by CUSTOM order by CUSTOM

Com OJDBC funciona bem, mas com Context.lookup retorna este erro:

The SQL statement 
"SELECT "CUSTOM" "MODULO" FROM 
"SAPEPTDB"."WCR_WEBCONTENTSTAT" INNER JOIN 
"SAPEPTDB"."WCR_USERPAGEUSAGE" ON "ID" = "HOURLY_ID" OR 
"ID" = "DAILY_ID" OR "ID" = "WEEKLY_ID" OR "ID" = 
"MONTHLY_ID" OR "ID" = "QUARTERLY_ID" GROUP BY "CUSTOM" 
ORDER BY "CUSTOM"" contains the semantics error[s]: ON 
conditions should only be concatenated with AND

Valeu…

“jdbc/SAPDB”? Por acaso você está se conectando a uma base Oracle mesmo, ou então a uma SAP DB (que é um banco SQL diferente, conforme você pode verificar no site http://www.sapdb.org/ - é o tal do MaxDB que você pode baixar do site http://www.mysql.com/products/maxdb/ .

A sintaxe do MaxDB e do Oracle é ligeiramente diferente; veja se não está ocorrendo essa confusão aí.

É estranho isto que no OJDBC estou usando a mesma base de dados… quando faço o ods.setURL("…");

Mas vou verificar isto, e fazer uns testes usando umas querys do SAPDB… mas eu até utilizo o SQLDeveloper official da Oracle para mexer nas tabelas e talz… heee mas pronto, pelo InitialContext.lookup pode estar apenas a permitir querys do MaxDB, e depois transforma em query Oracle… não sei, meio estranho… que a DB aqui é Oracle, mas é verdade que independente disto o SAP também utiliza o MaxDB por padrão, e obriga a instalação do SAPDB.

Vou fazer aqui uns testes, depois digo, valew.

Bem… disisto…

Com o InitialContext.lookup, consegui fazer group by, mas só com campos numéricos, tivo varchar, da erro dizendo que não é suportado, e depois no inner join não suporta também on (… or … or …)…

Tenho q fazer querys muito complexas, sendo assim vou desistir e ficar mesmo com o OJDBC, isto tudo aqui ta meio esquisito, mas o que interessa é q assim bem ou mal, ta a funcionar, e vai ficar assim pra já.

De qualquer forma, valew ai :wink: