各位大虾,小弟有个ORA-01403: no data found的问题.
在我的存储过程的当中有一条这样的sql:
SELECT  ps.vc2postid as postid
              INTO p_numfpostidold
              FROM dt_bbs_post ps
             WHERE ps.vc2forumid = 'id'
这个语句运行的时候返回的值是空的
但是我在将该语句拿出来单独在数据库中运行
SELECT  ps.vc2postid as postid
              FROM dt_bbs_post ps
             WHERE ps.vc2forumid = 'id',上句下句的id是相等的 ,却能够查处数据,不知道和解,请大家指点一二,谢谢

解决方案 »

  1.   

    看一下,是不是这个意思?http://hi.baidu.com/rambo739/blog/item/d5679cc2926fb1180ff4770c.html
      

  2.   

    是不是可以这样解释?当你:SELECT  ps.vc2postid as postid INTO p_numfpostidold FROM dt_bbs_post ps WHERE ps.vc2forumid = 'id';
    时,第一条被检索的记录不满足条件,此时返回一个null值,即:p_numfpostidold := NULL
    其实NULL在数据库中是可以赋值给字段的,但在变量中这种赋值方法是不行的,所以报错。上贴中的exception异常捕获解决方法是否对楼主有点参考价值呢?
      

  3.   

    是在同一个schema下面跑的?存储过程里有没有其他的no data found异常语句?
      

  4.   

    --可以这样查询一下,看是什么结果?SELECT  ps.vc2postid as postid FROM dt_bbs_post ps WHERE ps.vc2forumid = 'id' and rownum=1;
      

  5.   

    先把SQL语句放到TOAD或是PL SQL developer 中运行看有没有数据?如果没有去掉where条件看有没有数据?
      

  6.   

    回复6楼,你的方法我已经试过了,结果一样是查不出来.
    各位大虾,我把那条语句单独在PL SQL developer运行是可以查出数据的
    到底是什么问题啊? 
      

  7.   

    WHERE ps.vc2forumid = 'id' 
    这个id是在哪附值的???
      

  8.   

    不行的话,加个异常捕获处理(exception )吧,也许是BUG。http://hi.baidu.com/rambo739/blog/item/d5679cc2926fb1180ff4770c.html
      

  9.   

    你在sqlplus里面能查几条数据? 应该不止一条吧,如果不止一条,那 出no data found 是对的,因为多条记录是不能Into到一个变量里的如果只有一条记录的话,那就是那条记录的vc2postid 字段是空的
      

  10.   

    SELECT ps.vc2postid as postid
      INTO p_numfpostidold
      FROM dt_bbs_post ps
     WHERE ps.vc2forumid = 'id';
    dbms_output.put_line(p_numfpostidold);---加这句来测试
    请确定把INTO p_numfpostidold去掉可以查询出,另外注意'id'是否带引号了?
      

  11.   

    改成SELECT  ps.vc2postid 
    INTO p_numfpostidold
    FROM dt_bbs_post ps
    WHERE ps.vc2forumid = 'id'试试!
      

  12.   

    改为:
    SELECT  ps.vc2postid  INTO p_numfpostidold 
    FROM dt_bbs_post ps 
    WHERE ps.vc2forumid = 'id' 
    去掉 AS 选项
      

  13.   

    SELECT  ps.vc2postid as postid 
                  INTO p_numfpostidold 
                  FROM dt_bbs_post ps 
                WHERE ps.vc2forumid = 'id' 
    在ID前面加上trim看看行不行
    我也遇到过这个问题
    我加上trim之后解决了。
      

  14.   

    正解,我剛剛也遇到同樣的狀況,trim(id)就好了
      

  15.   

    我觉得LZ应该保证两个执行的环境是相同的,USER/PASSWORD@本地服务名都是相同的,如果相同的话,不应该出现你说的情况的
      

  16.   


    WHERE ps.vc2forumid = 'id' 这里的id和你在plsql dev里的一致么,感觉应该是这里没有找到数据的原因