create or replace 
FUNCTION get_maxmissreason (param1 IN VARCHAR)
return NUMBER
AS
v_missreason number;
--v_max_updatetime date;
--v_orderno varchar2(20);
CURSOR c_max_updatetime IS
select  a.orderno µ¥ºÅ,max(b.updatetime) ·þÎñÐÐΪ¸üÐÂʱ¼ä 
from servicerepair a,serviceaction b,a1report c
where a.orderno = b.orderno
and a.orderno = c.orderno
group by a.orderno;
BEGIN
FOR r_max_updatetime IN c_max_updatetime
LOOP
--v_max_updatetime := r_max_updatetime.·þÎñÐÐΪ¸üÐÂʱ¼ä;
--v_orderno := r_max_updatetime.µ¥ºÅ;
select missreason 
into v_missreason
from serviceaction
where orderno = r_max_updatetime.µ¥ºÅ 
and updatetime = r_max_updatetime.·þÎñÐÐΪ¸üÐÂʱ¼ä;
return v_missreason;
END LOOP;
END;
查询代码select a.orderno,get_maxmissreason(a.orderno) from servicerepair a,a1report b
where a.orderno = b.orderno表1 a1report
orderno
1
2
3
4
5表二servicerepair
orderno 
1
2
3
4
5
6
7
表三serviceaction
orderno updatetime     missreason
1       时间1(dat类型) 1        
1                      2
2                      3  
2                      4
3                      5
3                      6
4                      7
4                      8
5                      9
5                      10 
5                      11
为什么通过上面的函数执行以后  返回的missreason都是同一个值呢?
把上面的函数改写为过程以后  就显示正确  纠结坏了!

解决方案 »

  1.   

    serviceaction结构如下
    orderno   updatetime          missreson
    1         时间1(dat类型)       1
    1         时间1(dat类型)       2
    2         时间1(dat类型)       3 
    serviceaction的结构如上所示
      

  2.   

    运行不是同一个值就怪了你这写的函数不关接收什么值都会执行一遍,param1  这个接收一个值就执行下面的语句一遍,你的表数据不变当然都是相同的值BEGIN    
        FOR r_max_updatetime IN c_max_updatetime
        LOOP
            --v_max_updatetime := r_max_updatetime.·þÎñÐÐΪ¸üÐÂʱ¼ä;
            --v_orderno := r_max_updatetime.µ¥ºÅ;
            select missreason 
                into v_missreason
            from serviceaction
            where orderno = r_max_updatetime.µ¥ºÅ 
                and updatetime = r_max_updatetime.·þÎñÐÐΪ¸üÐÂʱ¼ä;
            return v_missreason;
        END LOOP;
    END;
      

  3.   

    楼主不要纠结了,因为函数有返回值,而过程没有返回值,
    你的函数,return的地方写的有问题啊,所以全是第一条的值。
    如果改成过程,你的return没了,就可以正常执行了!也许会返回不同值吧,看你怎么操作了