首页 > 开发 > 综合 > 正文

关于查询连续3次生子小于21的问题解答

2024-07-21 02:40:24
字体:
来源:转载
供稿:网友

呵呵,前段时间见到一位老兄写了个问题,最近想出了解决方案,但却怎么

也找不到原来的发题的贴子了,找了半天,只好贴在这希望对那位老兄有点帮助

。大概我记得问题是这样的:表名,字段名都是我瞎起的。
一个表pigs,里面有字段生产匹次:numbers,猪号:pig_id,生产批次:

pigbirthday,生产数量:pigsonnum;选出所有连续3次生子数量小于21的猪。
number      pig_id     pigbirthday    pigsonnum
1              11        15              20
2              22        16              22
3              11        17              19
4              33        18              21
5              11        19              18
大概是这个样子的我的过程如下:
1:创建表rightpig用于存放选出连续3次生子数量小于21的猪; 
create table rightpig(pig_id char(6));
2:创建选猪存储过程。
create or replace PRocedure findpig
is
sums number;  --临时存储连续生产小于21天的次数。
pigsonmums number;--临时存储生产猪的个数。
cursor findallpig is select distinct pig_id from pigs;   -- 从表里选出

--所有猪。
cursor findrightpig(pig_ids   char(6)) is select pigsonnum from pigs 

where pig_id=pig_ids order by pigbirthday;   --从表里选出一头猪的各批次

--生子数量并以批次排序。
begin
open cursor findallpig;
fetch findallpig into pigids;     --从表里逐一选出猪的id号并存入变量

pigids;
loop
open cursor findrightpig(pigids);  --将猪的id号代入游标,按出生批次先后

--选出猪的各批次生子数量并放入变量pigsonnums。
fetch findrightpig into pigsonnums;
sums=0;
loop
if pigsonnums<21 then   --假如生子数量小于21则累计批次加一;
sums=sums+1;
if sums>3 then          --假如连续3次则将此猪插入表rightpig,并退出这只


--猪的循环;
insert into rightpig
values('pigids'); 
exit loops;
end if;
else sums=0;         --假如生子数量大于21则将累计批次置零,并继续查询。
end if;
end loop;
close cursor findrightpig;
end loop;
end cursor findallpig;
end;
希望大家帮助指正。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表