Вы не можете просто select * from student;
.Это ничего не значит, что это делает с возвращенными данными?
Вместо этого вам нужно либо создать курсор, который selects ... from student
или SELECT columns INTO variables FROM student;
.
Так что для вас проблеманужно создать курсор, который выбирает из студента, а затем перебрать его и вывести каждую строку.Например:
create or replace procedure display_all_students
as
CURSOR cur_student IS
SELECT student_id, first_name, last_name FROM student;
begin
dbms_output.put_line('Listing all the student records');
FOR rec IN cur_student
LOOP
dbms_output.put_line( 'ID[' || rec.student_id || '] Name: '
|| rec.first_name || ' ' rec.last_name);
END LOOP;
end;
То же самое, что написано на длинном пути, вероятно, лучше изучать как начинающему, так как оно учит вас различным аспектам курсоров и т. Д. Это тот же самый код, написанный на длинном пути.
create or replace procedure display_all_students
as
CURSOR cur_student IS
SELECT student_id, first_name, last_name FROM student;
-- Host Variable to store cursor result.
rec cur_student%ROWTYPE;
begin
dbms_output.put_line('Listing all the student records');
OPEN cur_student;
LOOP
FETCH cur_student INTO rec;
EXIT WHEN cur_student%NOTFOUND;
dbms_output.put_line( 'ID[' || rec.student_id || '] Name: '
|| rec.first_name || ' ' rec.last_name);
END LOOP;
CLOSE cur_student;
end;
Синтаксис FOR variable IN cursor
позаботится о некоторых вещах для вас:
- Вам не нужно декальцировать переменную хоста
- У вас нетОТКРЫТЬ курсор
- Вам не нужно проверять, когда вы достигли конца данных
- Вам не нужно ЗАКРЫТЬ курсор
Разница только в синтаксисе.Фактическое исполнение и производительность обоих практически идентичны.