请教 Kv对sql语句占位符传递参数问题,字符类型与整型类型,参数的问题

请教问题:

数据库为 ORACLE 10G,

使用 代码

SELECT WH_CODE FROM TITEM WHERE ITEMCODE = ?

ITEMCODE 是字段Varchar2字符类型;

商品编码传入 参数 :01827364 的话 ,ORACLE自动转换成整型;

SQL打印出来: SELECT WH_CODE FROM TITEM WHERE ITEMCODE = 01827364 ,是查询不到数据

(ORACLE自动会转换为整型, 删除掉 0 ,变成 ITEMCODE = 1827364 

应是: SQL SELECT WH_CODE FROM TITEM WHERE ITEMCODE = '01827364',来返回正确数据

请问有在SQL模板中有解决方式么?

评论区

杜福忠

2021-04-25 10:53

检查一下 01827364 是不是在传入参数的时候就已经被转了,在Db.find挂参查询和SQL模板中的sqlPara.addPara都没有转换的动作,再说字符串也不会被转。估计是传入之前就已经被转了。 贴码吧

credavis

2021-04-25 11:19

@杜福忠
打印 sqlPara
Sql: SELECT WH_CODE FROM TITEM WHERE ITEM_CODE = ?
Para: [01827364]

输入完整SQL:
[2021/04/25 11:17:51.004] Sql Parameter = SELECT WH_CODE FROM TITEM WHERE ITEM_CODE = 01827364

代码简单;
Kv kv = Kv.by("itemCode", "01827364");
SqlPara sqlPara = Db.getSqlPara("event.selectitem", kv);
Record record= Db.findFirst(sqlPara);
#sql("selectitem")
SELECT WH_CODE FROM TITEM WHERE ITEM_CODE = #para(itemCode)
#end
直接在 PLSQL中 输入上述语句也不行;
只有 WHERE ITEMCODE = '01827364' 也是只有加单引号才可以;

杜福忠

2021-04-25 11:32

@credavis 看样子和驱动有关系了,ORACLE我不熟悉,试试换个ORACLE驱动版本?

credavis

2021-04-25 13:45

INFECTION_K

2021-04-25 14:49

我这Oracle10g没这问题啊 驱动ojdbc6.jar

credavis

2021-04-25 15:51

@INFECTION_K
你好 ,我又发现了 占位符 如果设置参数为 “”,占位符就是 ,没有‘’, SQL报错。
我用的驱动是 ojdbc6-11.2.0.3
你的ojdbc6.jar 能发给我么?
我的邮箱 credavis@163.com
谢谢

INFECTION_K

2021-04-25 21:04

@credavis 已发 但是我觉得跟驱动没啥关系