【问题标题】:Single code issue in SQL at the time of compilation编译时 SQL 中的单个代码问题
【发布时间】:2012-01-19 07:24:13
【问题描述】:

我写了一个 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 编译器转义了单个代码,所以任何人都可以告诉我它将如何正常运行?

【问题讨论】:

  • 你试过转义角色吗?当\'01180311\'然后
  • 请发布代码(至少相关部分)..
  • MANDANT 是字符字段还是数字字段?

标签: java sql compilation escaping


【解决方案1】:

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

【讨论】:

  • +1 是的!让 JDBC 驱动程序找出数据类型的正确语法以及如何将参数放入查询中。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-07
    • 2017-01-28
    • 1970-01-01
    • 2011-07-07
    • 1970-01-01
    • 2020-07-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多