比如这个sql语句
SELECT  qybh FROM kd_storage_pc_mx
 WHERE  pcjhh = :vc_pcjhh 
 AND    qybh = :vc_qybh
返回 一个值不会报错,但多个值报错?什么原因呢?错误名为:select ... into returns more rows
别说加 DISTINCT,我需要的是原因

解决方案 »

  1.   

    因为into是一个变量,无法容纳多个值。
      

  2.   

    SELECT  qybh FROM kd_storage_pc_mx 
    WHERE  pcjhh = :vc_pcjhh 
    AND    qybh = :vc_qybh 
    你这个写在过程里,需要变量保存你得到的结果,
    SELECT  qybh INTO 变量名 
    FROM kd_storage_pc_mx 
    WHERE  pcjhh = :vc_pcjhh 
    AND    qybh = :vc_qybh 
      

  3.   

    select ... into ...  是将查询的值放入一个变量中,查询出多个值的话就是将多个值存入一个变量,肯定会报错了。
      

  4.   

    晕,你们看我的sql里有into这个词吗?
      

  5.   

    可以用游标
    或者定义一个pl/sql表tmp
    SELECT  qybh bulk collect into tmp
    FROM kd_storage_pc_mx 
    WHERE  pcjhh = :vc_pcjhh 
    AND    qybh = :vc_qybh 
      

  6.   

    我再晕错误名为:select ... into returns more rows 
    那你这个错误哪里来的?
      

  7.   

    没有Into的话在pl sql里,不管返回几个值都会报错
      

  8.   

    7楼,不是哟,我加了distinct 就好了,只要是一条记录就没问题.
      

  9.   

    select into 要保证成功,必须有且仅有一条记录符合条件。
    没数据,会报 NO_DATA_FOUND。
    多于一条,就是你看到的了。
    原因:
    select A into v_a from.....
    因为v_a 是一个变量,不能被fetch多个值。
    就跟程序里面
    String a;
    a={"1","2"}...是会有问题的。
      

  10.   

    我要哭了,我不是说了我没加过into吗?
    只是报错信息是"select ... into returns more rows" 
      

  11.   

    ...
    如果返回一行就没有问题,且你只需要返回一行

    SELECT  max(qybh) FROM kd_storage_pc_mx 
    WHERE  pcjhh = :vc_pcjhh 
    AND    qybh = :vc_qybh 
    and rownum<2;
      

  12.   

     看看 :vc_pcjhh 和:vc_qybh  的值,是不是有什么不正常的地方
      

  13.   

    .... 16楼的同志....代码是完整的,就这句sql而已,你要什么其他完整的?
    难道你要我的调试语句?
      

  14.   

    在补充哈嘛,我使用的是pro_c,非要完整给你看不就差EXEC SQL吗?好吧....
    完整的就 EXEC SQL SELECT  qybh FROM kd_storage_pc_mx 
    WHERE  pcjhh = :vc_pcjhh 
    AND    qybh = :vc_qybh 
    现在大家知道答案了吗?望大家赐教啊
      

  15.   

    pro_c不早说,导致大家都以为你在plsql里面执行。
    早知道是c就路过了,反正不会。。
      

  16.   

    猜想应该是程序的问题吧
    从这条语句单看你是没有使用select into把表中取得的数据赋给哪个变量
    可是会不会在程序中的其他什么地方这样做了
    那么就会导致那个错误了