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都是同一个值呢?
把上面的函数改写为过程以后 就显示正确 纠结坏了!
解决方案 »
- 创建好的存储过程在
- isqlplus启动问题
- 如何用pl sql 导出数据库dmp文件以及log日志和dat文件
- 如果在一个游标内部再定义一个新的游标
- Oracle中 某字段类型为varchar2 但数据类似 Timestamp 形如“20080904100555,055” ,如何进行日期先后的比较?
- 关于触发器的问题,请教高人(在线等)
- 这个sql语句如何些
- 如何将SQL2000库导入到LINUX下的ORACLE中
- 小弟想学习oracle,但不知从何入手,请个伟大哥!!给小弟指点米经!!
- mysql优化,视图union查询很慢。高手请入!
- ORACLE从多个关联的表中随机取20条数据
- 游标求助。
orderno updatetime missreson
1 时间1(dat类型) 1
1 时间1(dat类型) 2
2 时间1(dat类型) 3
serviceaction的结构如上所示
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;
你的函数,return的地方写的有问题啊,所以全是第一条的值。
如果改成过程,你的return没了,就可以正常执行了!也许会返回不同值吧,看你怎么操作了