我正在尝试从名为' student'的表中输出多行数据。使用pl / sql。我能够输出第一行数据,但这就是全部。我熟悉其他编程语言中的循环过程,但我是pl / sql的新手就是我所拥有的:
DECLARE
variable_Score Number;
variable_LetterGrade Char(1);
name char(10);
cursor studentPtr is SELECT name, grade from STUDENT;
BEGIN
open studentPtr;
LOOP
fetch studentPtr into name, variable_Score;
IF variable_Score >= 90 THEN
variable_LetterGrade := 'A';
ELSIF variable_Score >= 80 THEN
variable_LetterGrade := 'B';
ELSIF variable_Score >= 70 THEN
variable_LetterGrade := 'C';
ELSIF variable_Score >= 60 THEN
variable_LetterGrade := 'D';
ELSE
variable_LetterGrade := 'F';
END IF;
DBMS_OUTPUT.PUT_LINE('Hello '||name||', you receive a '||variable_LetterGrade||' for the class');
EXIT;
END LOOP;
END;
/
输出结果为:
你好Joe,你收到了班级的B
这只是学生表中的第一行,但我还想输出三行数据。
答案 0 :(得分:2)
问题在于EXIT
语句。一个裸出口语句会跳过循环并显示第一个fetch
的行。
因此,请在EXIT;
之前删除END LOOP
,并在EXIT
之后添加fetch
这样的语句。
..
fetch studentPtr into name, variable_Score;
EXIT WHEN studentPtr%NOTFOUND;
..
..
%NOTFOUND
是一个游标属性,在获取所有行时变为true。
该语句的作用是,只有当cursor
无法获取任何行时,它才会跳过循环。