使用if语句PL / SQL从游标输出多行数据

时间:2017-11-30 16:47:15

标签: sql oracle plsql

我正在尝试从名为' 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

这只是学生表中的第一行,但我还想输出三行数据。

1 个答案:

答案 0 :(得分:2)

问题在于EXIT语句。一个裸出口语句会跳过循环并显示第一个fetch的行。

因此,请在EXIT;之前删除END LOOP,并在EXIT之后添加fetch这样的语句。

  ..
  fetch studentPtr into name, variable_Score;
  EXIT WHEN studentPtr%NOTFOUND;
  ..
  ..

%NOTFOUND是一个游标属性,在获取所有行时变为true。 该语句的作用是,只有当cursor无法获取任何行时,它才会跳过循环。