Одиночная проблема кода в SQL во время компиляции - PullRequest
0 голосов
/ 19 января 2012

Я пишу SQL

SELECT ID                                   
FROM NDA.K_FAKTURIER_KDF                    
WHERE FAKTURIER_KDF_KZ = ?                  
AND NVL(MANDANT, ' ') = (CASE ?             
WHEN '01180311' THEN                        
'BUTLERS'                                   
ELSE                                        
' '                                         
END)

В моей программе при запуске я получил ошибку

java.sql.SQLSyntaxErrorException: ORA-00932: inconsistent datatypes: expected CHAR got NUMBER

Во время отладки я обнаружил, что компилятор Java выполняет запрос как

SELECT ID                                   
FROM NDA.K_FAKTURIER_KDF                    
WHERE FAKTURIER_KDF_KZ = ?                  
AND NVL(MANDANT, ' ') = (CASE ?             
WHEN 01180311 THEN                      
'BUTLERS'                                   
ELSE                                        
' '                                         
END)`

Итак, Java-компилятор экранирует один код, и любой может сказать мне, как он будет работать правильно?

Ответы [ 2 ]

3 голосов
/ 19 января 2012

Вы пытались использовать PreparedStatement и передали "01180311" в качестве параметра setString?

0 голосов
/ 19 января 2012

Если предположить, что MANDANT является символьным полем, то выполнение только символьной операции со значением '01180311' может помешать компилятору удалять кавычки.

Попробуйте изменить '01180311' на '0118'||'0311' в своем выражении.

...