我实验了两个查询语句,
时间30多秒,oracle出错,
1.SELECT count(*) FROM 表 WHERE invspec <> 'a'       用时31秒多,抛出错误.实际结果是1万多
2.SELECT count(*) FROM 表 WHERE invspec like  '%0'   用时20秒,正常.实际结果是2千
结论我认为是数据量大,查询时间超时了,所以希望找到如何设置oracle查询超时时间的具体地方.网上查了,没找到.
先谢谢大家指点迷津.

解决方案 »

  1.   

    你的sql是在程序里调用的吗?还是直接在plsql中执行的?
    在plsql中查询30多秒,不会超时的,你确定抛出的是超时异常?
    有可能是数据量太大,缓存空间不够造成的吧还有 你的sql太慢,需要优化一下,或者数据库需要优化了
      

  2.   


    看执行计划 可以考虑instr(invspec,'0')>0 来  建个函数索引等
      

  3.   


    我没有说清楚,执行时间是在plsql中测试的.plsql中没有出错.sql是在程序里调用的.缓存空间如何设置?sql如何优化,就那么一个简单的查询语句.望赐教.
      

  4.   

    其实我程序里用到的sql是
    SELECT count(*) FROM 表
    针对这种情况如何建索引?多谢
      

  5.   

    有个参数是 设定回话查询时间的。。应该是CUP_PER_SESSION 
      

  6.   

    如果是这样,那要看你的主语言是什么了
    oracle没有超时时间这一说吧 这个得在你executequery里边设置啊
      

  7.   

    SELECT count(*) FROM 表 WHERE invspec <> 'a' 
    给该表的invspec 这个字段建立索引试试
    不行的话 用SELECT/*+rule*/ count(*) FROM 表 WHERE invspec <> 'a' 看看效果
    还不行 就执行一下analyze table tablename compute statistics 再查询
      

  8.   

    CPU_PER_SESSION  整数
    用户在一次数据库会话期间可以占用的CPU时间总量(单位为:1%秒)。当达到该时间限制之后,用户就不能在会话中执行任何操作了。用户必须断开与Oracle 的连接再重新建立连接以使该CPU 累计器复位
      

  9.   

    楼主没有说明白,sql语句是在用什么开发语言调用的
      

  10.   

    还要知道你连的是什么数据库 access sql server 还是oracle
    而且 这属于vc的范畴 不属于oracle了
      

  11.   

    用odbc连接时 有两个函数SetQueryTimeout和SetLoginTimeout可以设置连接超时时间和执行sql超时时间
    其他的你可以自己找
      

  12.   

    抛出的错误是:
    Option value changed.
    ORA-01013: 用户请求取消当前的操作
      

  13.   

    可以把你创建connection对象的语句贴出来 
    还有 这种问题 你最好放到vc板块 在这里 只是解决oracle内部的问题
    至于vc里怎么调用 要归vc处理