Вывод всех имен таблицы в процедуре

#oracle #plsql #oracle-sqldeveloper

#Oracle #plsql #oracle-sqldeveloper

Вопрос:

Я хочу отобразить все last_name из моей employees таблицы в этой процедуре.

Ошибка: ORA-01422: Request returns more than the requested number of lines

Код:

 CREATE OR REPLACE PROCEDURE writeAllEmployees AS 
  lastn employees.last_name%TYPE;
BEGIN
 SELECT last_name INTO lastn FROM employees;
 DBMS_OUTPUT.PUT_LINE(lastn);
 END;
 /
 EXEC writeAllEmployees;
  

Ответ №1:

Поскольку в таблице более одной строки, вам понадобится цикл:

 CREATE OR REPLACE PROCEDURE writeAllEmployees AS 
BEGIN
  for cur_r in (SELECT last_name FROM employees) loop
    DBMS_OUTPUT.PUT_LINE(cur_r.last_name);
  end loop;
END;
/
EXEC writeAllEmployees;
  

Не забудьте включить serveroutput; в некоторых инструментах это выполняется set serveroutput on .

Комментарии:

1. lastn не объявлено. Не знаю, почему

2. Ах, извините, не обратил на это внимания. Исправлено; посмотрите, пожалуйста.