论坛首页 入门技术论坛

ibatis中oracle正则表达式问题

浏览 3305 次
精华帖 (1) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-07-21  

环境:本机struts+spring_+ibatis,oracle 10g.
问题:数据表a,现在要根据关键字来过滤a中某字段得到符合关键字的所有数据,要分页。
怎么通过sql解决?
说明:关键字也是通过查询表得到的,并且量很多,多的达到数千个。不同字段的关键字不同,
关键字格式:1,完全关键字,表示全字匹配(数据表中关键字表示为单纯字符串,首尾没有%)
2,模糊关键字,首尾有%,或者首部有%,或者尾部有%,意义与sql的%意义相同。
我的解决过程:
1,采用oracle 10g的正则表达式regexp_like(columnName,regString);
获得关键字列表,拼好了regstring传过去。但是报错:正则表达式太长。
2,获得关键字列表,在后台对关键字分组,每50个为一组(保证每组关键字生成的正则表达式不超长),然后用or连接,传到数据库sql中的where后面,系统报:字符串太长。

   发表时间:2009-07-22  
先把关键字插入临时表中
0 请登录后投票
   发表时间:2009-07-22  
抛出异常的爱 写道
先把关键字插入临时表中

回复楼上:
1,关键字需要做一下预处理,比如前后的%是sql意义的,但在正则表达式中不适用。
2,可能没有建表权限。
0 请登录后投票
   发表时间:2009-07-23  
没有人知道如何解决么?
或者,不屑于说?

也许,问题的关键在于分页,也就意味着需要在数据库中解决问题。
0 请登录后投票
   发表时间:2009-07-23  
其实也不知道理没理解楼主的意思,
不过我说一下我在做公司通用查询的做法,
界面查询的所有参于where过滤的字段
全部加上query_的前缀,
条件全部提交到后台后在Controller处通过公共方法
来处理这些query_的条件组装成where后的条件,
支持spring的jdbcTemplate与hibernate的hql

当然由于是动态组装sql条件,所以这里不能使用绑定变量
要支持绑定变量使用了另一种折中的方法

另外模糊查询不要用前%,会做全表扫描
0 请登录后投票
   发表时间:2009-07-23  
julycool 写道
其实也不知道理没理解楼主的意思,
不过我说一下我在做公司通用查询的做法,
界面查询的所有参于where过滤的字段
全部加上query_的前缀,
条件全部提交到后台后在Controller处通过公共方法
来处理这些query_的条件组装成where后的条件,
支持spring的jdbcTemplate与hibernate的hql

当然由于是动态组装sql条件,所以这里不能使用绑定变量
要支持绑定变量使用了另一种折中的方法

另外模糊查询不要用前%,会做全表扫描


也许我说的有点太简略了吧。
我做的这个不是一个通用的查询,是在我们的项目中的一个比较特殊的应用。关键在于,我需要根据查询到的一批关键字来过滤另一批数据,这些关键字上的%不是后加的,而是固定存在的。而且这些关键字根据过滤的数据字段业务类型不同而不同,并且量有时候还很大,达到数千个,所以想全部拼成动态sql估计会太长。
0 请登录后投票
   发表时间:2009-07-26  
经过了一个周末,回来看看帖子,依然是门前冷落车马稀!
0 请登录后投票
   发表时间:2009-07-27  
先把拼奏写成一个储存过程。再把regString替换为那个储存过程。
0 请登录后投票
   发表时间:2009-07-27  
唉,要是可以用存储过程解决,那还干嘛费这个事,直接全部就用存储过程了。
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics