oracle游标(显示和隐示)之使用
来源:互联网 发布:js解析url获取参数 编辑:程序博客网 时间:2024/05/18 03:43
要求:定义一个游标,使用FOR循环将班级编号为20010505的学生平均分按从高到低排名,
要求在SQL*PLUS环境中显示学号,姓名,姓名,班级名称,平均分,名次字段。
create or replace procedure ShowAvgScoreDesc_Cursor is
begin
declare cursor studscore_cursor is
/**//*序号不能放在里面,而是放在外面,后放弃使用序号,而是系统变量rownum*/
select rownum as grade,studno,studname,classname,avgscore
from
(
select s.studno,studname,classname,round(avg(studscore),2) avgscore
from studinfo s,studscoreinfo ss,classinfo c
where s.studno=ss.studno and s.classid=c.classid
and s.classid='20010505'
group by s.studno,studname,classname
order by avg(studscore) desc
);
begin
for studscore_record in studscore_cursor loop
dbms_output.put_line('学号'||studscore_record.studno||',姓名'||studscore_record.studname||',班级名称:'||studscore_record.classname||'平均分:'||studscore_record.avgscore||',名次:'||studscore_record.grade);
end loop;
end;
end ShowAvgScoreDesc_Cursor;
begin
declare cursor studscore_cursor is
/**//*序号不能放在里面,而是放在外面,后放弃使用序号,而是系统变量rownum*/
select rownum as grade,studno,studname,classname,avgscore
from
(
select s.studno,studname,classname,round(avg(studscore),2) avgscore
from studinfo s,studscoreinfo ss,classinfo c
where s.studno=ss.studno and s.classid=c.classid
and s.classid='20010505'
group by s.studno,studname,classname
order by avg(studscore) desc
);
begin
for studscore_record in studscore_cursor loop
dbms_output.put_line('学号'||studscore_record.studno||',姓名'||studscore_record.studname||',班级名称:'||studscore_record.classname||'平均分:'||studscore_record.avgscore||',名次:'||studscore_record.grade);
end loop;
end;
end ShowAvgScoreDesc_Cursor;
注意:1,显示隐标属性%rowcount是个变化的值,即它不是这个游标的环境区域的总行数,而是一个不断增长的值,这不同于隐示游标,是多少就是多少.如:
DECLARE
CURSOR MyCurIS
SELECT ClassID,ClassNameFROM ClassInfo;
BEGIN
FOR mrecIN MyCur
LOOP
DBMS_OUTPUT.PUT_LINE(mrec.ClassID||mrec.ClassName||'记录数:'||MyCur%Rowcount);
END LOOP;
END;
CURSOR MyCurIS
SELECT ClassID,ClassNameFROM ClassInfo;
BEGIN
FOR mrecIN MyCur
LOOP
DBMS_OUTPUT.PUT_LINE(mrec.ClassID||mrec.ClassName||'记录数:'||MyCur%Rowcount);
END LOOP;
END;
后碰到一个要求:创建一个存储过程,使用游标循环找出班级编号为20010505班的平均分最高的学生和最低的学生。(注:不能使用MAX,MIN)
create or replace procedure Pr_MaxAvgAndMinAvg is
begin
/**//*
创建一个存储过程,使用游标循环找出班级编号为20010505班的平均分最高的学生和最低的学生。(注:不能使用MAX,MIN)
*/
declare cursor MyCur is
select s.studno,studname,classname,round(avg(studscore),2) avgscore
from studinfo s,studscoreinfo ss,classinfo c
where s.studno=ss.studno and s.classid=c.classid
and s.classid='20010505'
group by s.studno,studname,classname
order by avg(studscore) desc;
i int;
MaxCount int;/**//*而不是写在下面的语句中,也不用declare,因为前面已经有了*/
begin
MaxCount:=0;
i:=1;
for studscore_record in MyCur loop
dbms_output.put_line('');
MaxCount:=MaxCount+1;
end loop;
for studscore_record in MyCur loop
/**//*索引从1开始,不是0*/
if i=1 then
dbms_output.put_line('学号'||studscore_record.studno||',姓名'||studscore_record.studname||',班级名称:'||studscore_record.classname||'平均分:'||studscore_record.avgscore);
end if;
if i=MaxCount then
dbms_output.put_line('学号'||studscore_record.studno||',姓名'||studscore_record.studname||',班级名称:'||studscore_record.classname||'平均分:'||studscore_record.avgscore);
end if;
i:=i+1;
end loop;
end;
end Pr_MaxAvgAndMinAvg;
begin
/**//*
创建一个存储过程,使用游标循环找出班级编号为20010505班的平均分最高的学生和最低的学生。(注:不能使用MAX,MIN)
*/
declare cursor MyCur is
select s.studno,studname,classname,round(avg(studscore),2) avgscore
from studinfo s,studscoreinfo ss,classinfo c
where s.studno=ss.studno and s.classid=c.classid
and s.classid='20010505'
group by s.studno,studname,classname
order by avg(studscore) desc;
i int;
MaxCount int;/**//*而不是写在下面的语句中,也不用declare,因为前面已经有了*/
begin
MaxCount:=0;
i:=1;
for studscore_record in MyCur loop
dbms_output.put_line('');
MaxCount:=MaxCount+1;
end loop;
for studscore_record in MyCur loop
/**//*索引从1开始,不是0*/
if i=1 then
dbms_output.put_line('学号'||studscore_record.studno||',姓名'||studscore_record.studname||',班级名称:'||studscore_record.classname||'平均分:'||studscore_record.avgscore);
end if;
if i=MaxCount then
dbms_output.put_line('学号'||studscore_record.studno||',姓名'||studscore_record.studname||',班级名称:'||studscore_record.classname||'平均分:'||studscore_record.avgscore);
end if;
i:=i+1;
end loop;
end;
end Pr_MaxAvgAndMinAvg;
- oracle游标(显示和隐示)之使用
- oracle隐式游标和显示游标
- Oracle游标创建和使用的语法和举例(显示和隐式游标)
- 游标的使用(隐式游标和显示游标)
- ORACLE显示游标和隐式游标的区别
- oracle 隐式游标,显示游标,游标循环,动态SELECT语句和动态游标、异常等
- oracle 隐式游标,显示游标,游标循环,动态SELECT语句和动态游标、异常等
- Oracle 游标 隐式游标,显示游标,游标循环,动态SELECT语句和动态游标,异常处理,自定义异常
- oracle 游标(显示游标,隐式游标,动态游标)
- oracle之隐式游标和ref游标总结
- Oracle隐式游标/显示游标
- oracle 隐式游标,显示游标,游标循环,动态SELECT语句和动态游标,异常处理,自定义异常,
- oracle 隐式游标,显示游标,游标循环,动态SELECT语句和动态游标,异常处理,自定义异常,
- oracle 隐式游标,显示游标,游标循环,动态SELECT语句和动态游标,异常处理,自定义异常
- oracle 隐式游标,显示游标,游标循环,动态SELECT语句和动态游标,异常处理,自定义异常,
- oracle 隐式游标,显示游标,游标循环,动态SELECT语句和动态游标,异常处理,自定义异常,
- oracle 隐式游标,显示游标,游标循环,动态SELECT语句和动态游标,异常处理,自定义异常
- oracle 隐式游标,显示游标,游标循环,动态SELECT语句和动态游标,异常处理,自定义异常
- 都说男人好色
- web应用数据库连接池的必要性
- 计算代码执行的CPU时钟
- 网页中常用标签的编码HTML
- 開通Google網上論壇
- oracle游标(显示和隐示)之使用
- FLASH控件--商业图表--Rich Chart Builder
- J2ME编程技巧与程序优化
- english story
- ActiveX控件--甘特图控件-- VARCHART XGantt
- 暴雪MPQ文件资源提取工具[支持加密的地图文件]
- sring与Cstring之间的转换
- setsockopt配置socket选项
- DotNet组件--经典合集--Xceed Ultimate Suite