0
  1. 编写一个完成以下任务的 PL/SQL 程序: (a) 声明一个名为 c_students 的游标,该游标从 Student 表中选择以下字段:StudentId、Lname、Fname 和 Major 其中专业为“Accounting” (b) 检索记录上面列出的为 v_sid、v_lname、v_fname、v_major (c) 显示检索到的记录。

使用 for.. 循环从 Student 表中检索学生姓氏为“Black”的所有行。显示这些行。

解决方案:我已成功完成 a、b 和 c 部分,如下所示:

DROP TABLE IF EXISTS students;
CREATE TABLE students(
    StudentId NUMBER(3),
    LName VARCHAR2(30),
    FNAme VARCHAR2(30),
    Major VARCHAR2(30));
INSERT INTO students VALUES(130,'Black','Judy','Accounting');
INSERT INTO students VALUES(132,'Maw','Richard','Marketing');
INSERT INTO students VALUES(134,'Bessner','Bryan','Finance');
INSERT INTO students VALUES(136,'Shaw','Tim','Accounting');
INSERT INTO students VALUES(138,'Black','Conrad','Sales');

COMMIT;

DECLARE
    cursor c_students IS
    --for rec in (select * from students where 
        select * from students where major like 'Accounting';
    v_sid Number(3);
    v_lname VARCHAR2(30);
    v_fname VARCHAR2(30);
    v_major VARCHAR2(30);
BEGIN   
    open c_students;
    Loop
        Fetch c_students into v_sid, v_lname, v_fname, v_major;
        IF c_students%NOTFOUND Then
            Exit;
        End If;
        dbms_output.put_line(v_sid||' '||v_lname||' '||v_fname||' '||v_major);
    End Loop;
    close c_students;
End;
/

==================================================== ================================

现在最后一部分,在 c 之后,声明我需要用 for 循环完成我在上面所做的同样的事情,但我终其一生都无法弄清楚如何在 for 循环中完成它。我知道 for 循环没有被声明并从 Begin 部分开始,但我不知道从那里去哪里。任何帮助将不胜感激。谢谢!

4

1 回答 1

1

用以下内容替换开环等。然后您可以通过rec变量引用光标的列。

For rec in c_students
Loop
...
End loop;
于 2013-07-22T22:11:12.013 回答