我在PLSQL中写一个存储过程
其中有句SQL语句
 select count(1)
      into rows1
      from T_BASE_AREA_EXCEPTIONCONF t
     where t.indexcode = INDEXCODE
       and t.year = YEAR
       and t.month = MONTH
       and t.zjjgdm = ZJJGDM;
总是返回1,即使我的表格中没有对应条件的记录但在sql plus中执行,则没问题
我很困惑,不知道为什么
请高手帮帮忙

解决方案 »

  1.   

    试试了没有啊select count(1) from ly_agent_task t
      结果 
    0
      

  2.   

    如果有分组,再用count,肯定不会返回0,还是大于等于1的数
      

  3.   

    检查一下你的程序,不应该会这样的 看看我的 SQL> variable v_count number; 
    SQL> begin 
      2  select count(1) into :v_count from user_tables where 1 <>1; 
      3  end; 
      4  / PL/SQL 过程已成功完成。 SQL> print :v_count;   V_COUNT 
    ---------- 
            0 
      

  4.   

    你的存储过程的连接中有一个没有commit的数据存在
    你commit一下,那就两边的查询结果一致了或者你把所有的连接都断一下再试
      

  5.   


    如果是分组的话,就有可能出现多行记录集,这是和不分组的count的区别,如果是多条记录集的话,这里select into 就会出错了。
      

  6.   

    在存储过程中定义一个rowid类型的变量,如果count(1)总返回1,看看返回的这个数据的rowid是什么
    例如:declare
    myrowid rowid;
    begin
    select rowid 
          into myrowid
          from T_BASE_AREA_EXCEPTIONCONF t 
        where t.indexcode = INDEXCODE 
          and t.year = YEAR 
          and t.month = MONTH 
          and t.zjjgdm = ZJJGDM; 
    dbms_output.put_line(myrowid);
    end;
    /
      

  7.   

    按理是不会出现这种情况的
    SQL> SELECT COUNT(1) FROM dual;
     
      COUNT(1)
    ----------
             1
     
    SQL> SELECT COUNT(1) FROM dual where 1 <> 1
      2  ;
     
      COUNT(1)
    ----------
             0
      

  8.   


    用你的方法试了下,发现不管我在哪个条件(INDEXCODE,YEAR,MONTH,ZJJGDM)输入任意值,都返回表格的所有行