我的查询语句是相同的,比如SELECT ID FROM ABC WHERE NAME=:NAME
但有多个查询条件,如‘张三’,‘李四’,‘王五’,是否可以OracleParameter.value=names,names是一个字符串数组,里面是张三、李四王五等,然后查询结果查出这三个的ID结果。我要解决的问题是相同的查询语句,因为不同的条件,需要程序调用数据库查询多次,非常消耗时间,因为之前使用过insert和update的这种参数是数组的方式进行多条数据新增或更新的方式,也希望能够通过这种方式进行多条的查询,降低查询时间。
查询语句因程序逻辑原因,无法更改为如in或者其他的了,只能是这个,所以寄希望于是否有这种方式,请大神帮忙~~~

解决方案 »

  1.   

    不行,当然你可以改成几个union拼接的sql
      

  2.   


    我估计你并没有真正看过那些所谓的 insert、update 语句。
      

  3.   

    谢谢你们的回复,那是否有方法可以进行呢?
    目前的状况是这样的,查询语句是用户根据实际情况写的,包含了变量,然后程序根据用户写的查询语句,从excel中获取相应的值,以参数的方式赋予查询语句参数中,比如,用户写了SELECT ID FROM ABC WHERE name=:name,然后EXCEL中一列就是用户名,程序会将此列数据全部挨个使用这个查询语句将name转变为ID值,这也是为什么我无法修改查询语句为in或什么的。如果只是where后面有参数还好说,可以用字符串截取、拼接修改为exist什么的,但是很多时候还有left join后面就带参数的。那么这种情况是否有什么好的解决方案能加快查询效率。我尝试过的有:
    1.多条语句拼接,然后一次查询,这个在程序环境中实现不适用,因为存在变量的问题。
    2.减少conn.open(),conn.close().因为程序使用DbHelperOra通用类,所以每次查询都会开闭一次,为此专门写了一个连续查询,手动关闭的方法,但是效果也不是很明显。
    是否还有其他方式可以解决此类问题?
      

  4.   

    union方法我在考虑其可行性和是否有其他衍生问题,是否还有其他的方式。因为union查询语句,对性能消耗貌似很大,尤其是查询语句中存在多表联查的情况下。
      

  5.   

    不管用户写了什么,你给用户设计一个交互程序,你写的程序就是要解决一整列的 Excel 值都要写到一条 sql 语句中的这个编程问题。说白了,你们自己设计的逻辑本身就是自相矛盾的,或者是自己给自己下套,或者说是自己太想当然化地让用户写了一个 sql 语句但是自己又没有能力解析、改变这个 sql 语句。
      

  6.   

    简单直观的解决的办法,就是不要让用户自己手写那么低级的什么 sql 语句。你给用户做一个灵活、美观的查询界面,让用户比较方便的进行查询。
      

  7.   

    我的难点在于,查询语句和字段都是配置方式的,并不是初期就可以规划的,比如我的软件连接了A数据库,向A数据库中的A1表导入数据,那么我就要针对A1表进行配置,设置其字段值获取方式,以及查询的sql语句。除非我的软件做成全配置方式,用户通过图形化方式进行查询语句的配置,那样就可以根据实际情况自动生成适合的查询语句了。但就目前情况来说,还无法实现。基本还是需要根据用户写的sql查询语句,根据配置的内容,读取相应的excel对应列的数据,进行查询转化。
      

  8.   

     where in 在数据库操作中,是常见的
    可惜的是,目前看到的所有数据库帮助类的参数化方法都不支持他
    幸好你还可以使用字符串拼接方式构造 SQL
      

  9.   

    OracleParameter参数方式查询貌似不能数组查询吧,看看能不能用存储过程
      

  10.   

    不改代码,那从上层进行操作,所有数据都拿出来,NAME不作为条件,到查询结果的datatable里进行筛选。