SELECT  serialno,
partid,
filepath,
staffno,
recordtime
INTO     t_serialno,
t_partid,
t_filepath,
t_staffno,
t_recordtime 
FROM 
(SELECT COUNT(serialno) AS t_count,serialno,partid,filepath,staffno,recordtime 
FROM MyTable
WHERE substr(serialno,1,8)='20060906'
AND partid=substr('20060906',5,4) 
GROUP BY serialno,partid,staffno,filepath,recordtime)
WHERE t_count>1 AND rownum=1;
以上语句去掉INTO在PL/SQL DEVELOP里执行是成功的,但加上INTO在存储过程里总是异常抛出错误,好郁闷啊,到底是怎么回事?高手们帮帮忙。
错误号是:ORA-01403 和ORA-06512

解决方案 »

  1.   

    查询没有结果,当然出异常
    你先count(1)看看有结果在select into(隐式光标)
      

  2.   

    select into(隐式光标)
    必须要求你的select语句至少要能查到且只能查到1条数据
    否则就会出意外
      

  3.   

    select into 必须一对一。一个into 一个,不能多也不能少。你看看select出来的数据是不是都是一对一的。少了就加null,多了就自己解决掉。
      

  4.   

    哦,原结果集是多于1个记录的,但我已经加上条件限制了:rownum=1;
    怎么还有问题?
      

  5.   

    这里的检索语句,一定要用KEY检索,全KEY比较才行
      

  6.   

    rownum = 1没用啊!最好就是用计算大于1的另外处理,只处理一对一的。SELECT COUNT (*)
         INTO ll_count
         FROM table
     group by serialno, partid, filepath, staffno, recordtime
    if ll_count = 1 then
       处理一对一的纪录。
    end if
      

  7.   

    楼上的,我做into就是为了在存储过程减少sql操作的次数;
    if ll_count = 1 then
       处理一对一的纪录。
    end ifif ll_count > 1 then
       该如何处理?(照这样说依然有隐式光标的问题)
    end if
      

  8.   

    不如把查询语句写成一个游标,然后把游标的值fetch给你的变量
      

  9.   

    另外INTO后面是变量?应该是表吧,因为你能select出多条记录的啊,所以按我上面的做吧,应该没有问题,游标的值赋值给变量,然后你想做什么都可以了