APIJSON icon indicating copy to clipboard operation
APIJSON copied to clipboard

希望使用Oracle数据库时对生成的sql进行改进

Open gx0803 opened this issue 4 years ago • 5 comments

已经实现Oracle数据库的万能接口,不过发现在执行查询的时候,后台生成的接口,字段名是加了双引号的。比如请求json如下: image 这样在后台生成的sql将会是: image 在Oracle中,如果字段名加了引号,则区分大小写,那么该查询就会报错,因为字段是大写的。所以,如果在生成sql时,能生成如下格式的sql,则可以忽略大小写。 image 不知道是否可以通知配置解决该需求,还是要自己重写生成sql的相关逻辑代码

gx0803 avatar May 14 '21 09:05 gx0803

DemoSQLConfig重写 getKey 或 AbstractSQLConfig 直接改 getKey 源码,判断 isOracle() 则直接返回 key,不用 super.getKey(key) // 它会加双引号

TommyLemon avatar May 14 '21 10:05 TommyLemon

DemoSQLConfig重写 getKey 或 AbstractSQLConfig 直接改 getKey 源码,判断 isOracle() 则直接返回 key,不用 super.getKey(key) // 它会加双引号

恩谢谢,已经解决,为了方便进行改造,目前是直接引用的apijson的orm与framework的源码,没有使用maven引入,参考jfinal的demo版本,与jboot进行了集成,方便进行其他扩展。想作为oracle版本贡献一个新的demo工程,不知是否可行。

gx0803 avatar May 17 '21 09:05 gx0803

DemoSQLConfig重写 getKey 或 AbstractSQLConfig 直接改 getKey 源码,判断 isOracle() 则直接返回 key,不用 super.getKey(key) // 它会加双引号

恩谢谢,已经解决,为了方便进行改造,目前是直接引用的apijson的orm与framework的源码,没有使用maven引入,参考jfinal的demo版本,与jboot进行了集成,方便进行其他扩展。想作为oracle版本贡献一个新的demo工程,不知是否可行。

可以的,非常感谢。 对 APIJSONORM/apijson-framework 源码的改动也可以发 Pull Request 贡献哦,会把你也加入这个贡献者名单 https://github.com/Tencent/APIJSON/blob/master/CONTRIBUTING.md

TommyLemon avatar May 17 '21 15:05 TommyLemon

我使用Oracle 数据源,也出现这个问题。重写了getKey,
@Override public String getKey(String key) { return ColumnUtil.compatInputKey(key, getTable(), getMethod()); } 但是项目启动报错,错误信息:Caused by: Error : 904, Position : 74, Sql = SELECT * FROM (SELECT* FROM "Access" WHERE ( (debug = :1 ) ) ORDER BY id) WHERE ROWNUM BETWEEN 0 AND 99999, OriginalSql = SELECT * FROM (SELECT* FROM "Access" WHERE ( (debug = ?) ) ORDER BY id) WHERE ROWNUM BETWEEN 0 AND 99999, Error Msg = ORA-00904: "ID": 标识符无效。

是哪里还没配置对吗?

zhukj avatar Sep 09 '21 15:09 zhukj

我使用Oracle 数据源,也出现这个问题。重写了getKey, @Override public String getKey(String key) { return ColumnUtil.compatInputKey(key, getTable(), getMethod()); } 但是项目启动报错,错误信息:Caused by: Error : 904, Position : 74, Sql = SELECT * FROM (SELECT* FROM "Access" WHERE ( (debug = :1 ) ) ORDER BY id) WHERE ROWNUM BETWEEN 0 AND 99999, OriginalSql = SELECT * FROM (SELECT* FROM "Access" WHERE ( (debug = ?) ) ORDER BY id) WHERE ROWNUM BETWEEN 0 AND 99999, Error Msg = ORA-00904: "ID": 标识符无效。

是哪里还没配置对吗?

用最新版(直接下载代码引用),已经把 ORDER BY id 去掉了

TommyLemon avatar Sep 18 '21 17:09 TommyLemon