• 全部
  • Oracle 基础和管理
  • Oracle 高级技术
  • Oracle 认证与考试
  • 职位交流
  • 问答

如何 判断 游标取出来的值,减去1,是否还在游标当中

buildxl 2012-05-21 05:13:05
请问这个如果写

在function 中 游标取出来的是 一组(第一列 倒序)数据
如:
year id
2012,aaa
2011,bbb
2010,ccc
2008,hhh
2007,xxx

取连续的数据当中,最小的那个值对应的id,这个 正确的结果是:2010,id3


通过游标,2012-1 =2011 有值,就 判断2011
如果2011-1 =2010 在游标中存在,就继续。
如果2010-1 =2009 在游标中不存在,就返回2010 对应的那个ccc。到此结束,以后,就不执行了
...全文
102 点赞 收藏 5
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
buildxl 2012-05-23
我的思路就是 wuhaitoapual类似的。(就是没放在包里执行)

create or replace function tb1_desc return number is
cursor v_cur is select * from tb1 order by year desc;
v_year number;
begin
for cur_col in v_cur loop
select count(*) into v_year from tb1 where tb1.year=cur_col.year-1;
if v_year = 0 then
return cur_col.year;
end if;
end loop;
end;

但是有几个问题我没搞定

1.如果游标为空的,我怎么返回值,不然报错的

2.有个疑问 if v_year = 0,有返回值,那v_year>0 ,这个要不要处理?
还是说if v_year = 0,这个游标就停止了。


谢谢
回复
Northgale 2012-05-23
一般情况下都不用这个notfound来判断啊了,用for循环游标,游标打开关闭让系统自己去处理,要不然忘记关游标可不是件好事,就像你写java连接数据库一样,自己写jdbc 一会开,一会关,要是哪天发昏了,忘记关连接的,会出漏子的,一般情况下都是交给spring处理了要不然忘记关游标可不是件好事
回复
kingkingzhu 2012-05-23
游标有自己的判断啊notfound
回复
kingkingzhu 2012-05-21
如果你的游标如果没有其他处理逻辑 好像没必要哦

用游标取出值
然后用exists 和你游标的sql进行判断吧
直接去判读游标剩余的值 好像木有听过哦
回复
wuhaitoapual 2012-05-21
你看看这样不可行不行,tb1表包含year和id两个字段
create or replace function tb1_desc return number is
cursor v_cur is select * from tb1 order by year desc;
v_year number;
begin
for cur_col in v_cur loop
select count(*) into v_year from tb1 where tb1.year=cur_col.year-1;
if v_year = 0 then
return cur_col.year;
end if;
end loop;
end tb1_desc;
回复
发帖
Oracle
创建于2007-09-28

1.6w+

社区成员

Oracle开发相关技术讨论
申请成为版主
帖子事件
创建了帖子
2012-05-21 05:13
社区公告
暂无公告