我写了一个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编译器转义单个代码,那么任何人都可以告诉我它将如何正常运行吗?
答案 0 :(得分:3)
您是否尝试使用PreparedStatement,并将“01180311”作为setString参数传递?
答案 1 :(得分:0)
假设MANDANT是一个字符字段,那么对'01180311'
值执行仅字符操作可能会阻止编译器删除引号。
尝试将表达式中的'01180311'
更改为'0118'||'0311'
。