Open
Description
APIJSON Version/APIJSON 版本号
5.4.0
Database Type & Version/数据库类型及版本号
Oracle12c
Environment/环境信息
- JDK/基础库:1.8.0_17
- OS/系统:Linux
APIAuto Screenshots/APIAuto 请求与结果完整截屏
暂无
Current Behavior/问题描述
现有系统架构为SpringMVC+Oracle,最近深度使用了Apijson的多表查询功能。我这边的Oracle应用场景是使用各种join拼接非常多的表进行关联查询,看了目前的issue感觉如果使用join就必须要改下源码,参考了#393,更改了AS之后还是存在关联字段重定义报错的问题,不清楚之前有没有人碰到过。查看输出SQL,发现join子句被包了一层select-from结构,如果主表和子表都有相同的字段就会导致SQL执行报错。目前是临时改了下AbstractSQLConfig的相关代码,把select-from结构去掉而直接进行join子表,然后根据有没有传递@column参数来跳过子SQL生成的递归队列,把子表的字段放在主表的@column参数里进行查询,暂时先跑起来了。还有一些数据缓存问题,没搞清楚哪里来的暂时注释掉了。还有些小问题,建议官方可以考虑下oracle的支持。
1.首先使用的是非join模式下的多表查询,这种方式会先执行主表sql,再执行子表sql,而且子表查询个数与主表查询结果相关。实测oracle最大游标设置是500情况下,查询page=350左右可以正常使用,数据再大则出现了cursor游标越界。
{
"[]": {
"MAIN_INFO": {
"@column": "SR_NO_ID;PRD_ID;INFO_NM",
"@schema": "T",
"INFO_NM": "qqq",
"@raw":"@column"
},
"SUB_A": {
"@column": "A_NM;A_ADRS",
"@schema": "T",
"SR_NO_ID@": "/MAIN_INFO/SR_NO_ID"
},
"SUB_B": {
"@column": "B_NM",
"@schema": "T",
"PRD_ID@": "/MAIN_INFO/PRD_ID"
},
"count": 200,
"page": 0,
"query": 2
},
"info@": "/[]/info",
"total@": "/[]/total"
}
2.参考了#393中描述的源码修改方案,修改了拼接AS问题,但是Join时会出现主表子表关联字段重名导致的SQL报错。查看输出SQL,发现join子句被包了一层select-from结构。其实oracle应用需求比较简单,只要能完成多表连接并分页就可以,目前是临时改了下代码跑通了。调试的时候还发现了缓存数据有点问题,暂时给注释了。
```json
{
"[]": {
"join":"</SUB_A,</SUB_B",
"MAIN_INFO": {
"@column": "MAIN_INFO.SR_NO_ID;PRD_ID;INFO_NM;SUB_A.A_NM;SUB_A.A_ADRS;SUB_B.B_NM",
"@order": "SR_NO_ID-",
"@schema": "T",
"INFO_NM": "qqq",
"SUB_A.A_NM": "xxx.png"
},
"SUB_A": {
"@schema": "T",
"SR_NO_ID@": "/MAIN_INFO/SR_NO_ID"
},
"SUB_B": {
"@schema": "T",
"PRD_ID@": "/MAIN_INFO/PRD_ID"
},
"count": 500,
"page": 0,
"query": 2
},
"info@": "/[]/info",
"total@": "/[]/total"
}
### Expected Behavior/期望结果
是否能提供官方的支持Oracle的解决方案
### Any additional comments?/其它补充说明?
_No response_