关于jfinal 如何使用oracle的cte的问题

我在调用oracle语句时,由于语句比较复杂,不得不选择在sql 模板中加入了cte。语句在数据库中执行是正常的,但是在jfinal中却运行错误,请问大家jfinal不支持使用cte吗?sql语句如下:

		WITH BaseQuery AS (
		    SELECT 
		        sea.XZDQ_DM,
		        xzdq.XZDQ_MC AS NAME,
		        SUM(CASE WHEN sea.sblb IN ('1000', '2000', '3000', '4000', '5000', '6000', '9000') THEN 1 ELSE 0 END) AS all_sum,
		        SUM(CASE WHEN sea.sblb = '1000' THEN 1 ELSE 0 END) AS gl_sum,
		        SUM(CASE WHEN sea.sblb = '2000' THEN 1 ELSE 0 END) AS rq_sum,
		        SUM(CASE WHEN sea.sblb = '3000' THEN 1 ELSE 0 END) AS dt_sum,
		        SUM(CASE WHEN sea.sblb = '4000' THEN 1 ELSE 0 END) AS qzjx_sum,
		        SUM(CASE WHEN sea.sblb = '5000' THEN 1 ELSE 0 END) AS cnjdcl_sum,
		        SUM(CASE WHEN sea.sblb = '6000' THEN 1 ELSE 0 END) AS ylss_sum,
		        SUM(CASE WHEN sea.sblb = '9000' THEN 1 ELSE 0 END) AS sd_sum,
		        SUM(CASE WHEN sea.sblb2 = '2300' THEN 1 ELSE 0 END) AS qp_sum
		    FROM 
		        (SELECT * FROM V_SB_SEARCHER WHERE sbsyzt NOT IN ('00080004', '00080008', '00080016')
		           #for(x : cond)
		              #if(com.jfinal.kit.StrKit::notBlank(x.value))
		                  AND #(x.key) #para(x.value)
		              #end
		          #end          
		        ) sea
		    LEFT JOIN 
		        FRM_XZDQ xzdq ON sea.XZDQ_DM = xzdq.XZDQ_DM
		    WHERE 
		        xzdq.XZDQ_MC IS NOT NULL
		    GROUP BY 
		        xzdq.XZDQ_MC, sea.XZDQ_DM
		),
		GDZCDData AS (
		    SELECT 
		        XZDQ_DM,
		        COALESCE(SUM(TO_NUMBER(GDZCD)),0) AS gd_sum
		    FROM 
		        T_SB_GD
		    WHERE 
		        sbsyzt NOT IN ('00080004', '00080008', '00080016')
		        AND REGEXP_LIKE (GDZCD, '^[0-9]+$')
		        #for(x : cond)
		            #if(com.jfinal.kit.StrKit::notBlank(x.value))
		                AND #(x.key) #para(x.value)
		            #end
		        #end        
		        group by XZDQ_DM
		)
		
		SELECT 
		    BQ.NAME,
		    BQ.all_sum,
		    BQ.gl_sum,
		    BQ.rq_sum,
		    BQ.dt_sum,
		    BQ.qzjx_sum,
		    BQ.cnjdcl_sum,
		    BQ.ylss_sum,
		    BQ.sd_sum,
		    BQ.qp_sum,
		    GD.gd_sum
		FROM 
		    BaseQuery BQ
		LEFT JOIN 
		    GDZCDData GD ON BQ.XZDQ_DM = GD.XZDQ_DM
		GROUP BY 
		    BQ.NAME, BQ.all_sum, BQ.gl_sum, BQ.rq_sum, BQ.dt_sum, BQ.qzjx_sum, BQ.cnjdcl_sum, BQ.ylss_sum, BQ.sd_sum, BQ.qp_sum,GD.gd_sum


评论区

JFinal

2024-07-26 17:00

jfinal 用 enjoy 将 sql 生成之后,直接扔给了 jdbc 去执行,只要是 jdbc 支持的 sql , jfinal 一定支持

异常信息以及调用代码都没有,无法进一步判断

konguwmang

2024-07-26 17:01

@JFinal 好的,既然是支持的那应该就是我的问题,我再研究看看

JFinal

2024-07-26 17:40

@konguwmang 用下面的方式先测下 jdbc 是不是支持:
Connection conn = DbKit.getConfig().getConnection();
conn.preparedStatement(sql, ...);
conn.executeQuery();

用上面的方式试下 jdbc 是否支持你的 sql , 支持的话就没问题

liugz

2024-07-31 09:16

如果是用的jfinal分页,像你种sql中有cte或特殊排序等写法时一般会无法执行,需要自己封装分页写法。 因为jfinal的分页只适合大部分通用普通查询sql

热门反馈

扫码入社