sql union关键字 分页查询报错

SELECT 
      T.ID, 
      T.NAME,
      T.CONTENT_ID,
      T.MODIFTIED_TIME,
      T.STATUS,
      T.TERM_ID,
      T.MODIFTIED_USER_ID
  	FROM TABLE1 T
  	WHERE 1 = 1
	#if(null!=MODIFTIED_USER_ID)
	 	AND T.MODIFTIED_USER_ID = #para(MODIFTIED_USER_ID)
	#end
	#if(null!=title)
	 	AND T.NAME LIKE concat(concat('%',#para(title)),'%')
	#end

	UNION
	
	SELECT 
			H.TERM_PK_ID AS ID,
			H.NAME,
			H.CONTENT_ID,
			H.MODIFTIED_TIME,
			H.STATUS,
      H.TERM_ID,
      H.MODIFTIED_USER_ID
	FROM TABLE2 H
	WHERE 1 = 1
	#if(null!=MODIFTIED_USER_ID)
	 	AND H.MODIFTIED_USER_ID = #para(MODIFTIED_USER_ID)
	#end
	#if(null!=title)
	 	AND H.NAME LIKE concat(concat('%',#para(title)),'%')
	#end

我想用union查两张表,并且分页,JFinal在查总数的时候,拼接sql语句把union拼接上去了,就报ORA-01789: 查询块具有不正确的结果列数,这个怎么办?

评论区

JFinal

2018-06-14 19:12

select 块中是不允许存在问号占位符的,而你的 #para(MODIFTIED_USER_ID) #para(title) 都生成了问号占位,改成 #(MODIFTIED_USER_ID) 直接输出变量即可

JFinal

2018-06-14 19:13

多看看文档中有关 #para 指令的用法,这个指令是不能用在 select 块中的,JDBC 不支持这样的 sql :
select a, ? , ? from ...

sxf2018

2018-06-14 19:35

@JFinal #para(MODIFTIED_USER_ID) 上面有where 1=1

sxf2018

2018-06-14 19:38

@JFinal 我改成用视图查询了

JFinal

2018-06-14 23:48

@sxf2018 有 where 也不行,因为这个始终属于 select 块,而这个块在生成 totalRow 的 sql 时会被 replace 掉

热门反馈

扫码入社