编译时SQL中的单个代码问题

时间:2012-01-19 07:24:14

标签: java sql compilation escaping

我写了一个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 个答案:

答案 0 :(得分:3)

您是否尝试使用PreparedStatement,并将“01180311”作为setString参数传递?

答案 1 :(得分:0)

假设MANDANT是一个字符字段,那么对'01180311'值执行仅字符操作可能会阻止编译器删除引号。

尝试将表达式中的'01180311'更改为'0118'||'0311'