PL / SQL: лучшая практика для выборки 2 или более объединенных таблиц из курсора?

Я слышал, что рекомендуется определять свои записи в PL / SQL с помощью атрибута% ROWTYPE. Это экономит ввод и позволяет вашему пакету продолжать работу даже при добавлении или удалении столбца. (Поправьте меня если я ошибаюсь!)

Однако, когда я извлекаю из курсора, который включает соединение, я обнаруживаю, что мне нужно выполнить выборку в определенную программистом запись, которая включает (вполне возможно, длинный) рукописный список всех столбцов, возвращаемых объединением.

Итак, мой вопрос: можно ли выполнять выборку во вложенных записях, или извлекать из списка записей, или делать что-то, чтобы избежать такой уродливой путаницы? Все, что я пробовал, приводит к ошибке о том, что запись не соответствует тому, что возвращает курсор.

Возврат результата соединения с использованием курсора кажется мне настолько распространенным вариантом использования, что странно, что в поиске ничего, связанного с этим, не обнаруживается.

Спасибо.

Ответов (2)

Зачем вообще возиться с объявлением курсора?

Это эквивалентно.

begin
  for r_c in (select emp.*, dept.* from emp, dept) loop
  ...
  end loop;
end;

Я вижу в своем комментарии вы упомянули об этом. Но я вижу, что явный синтаксис курсора используется так часто, что я думаю, это важно показать.

Вы можете использовать курсор% rowtype.

Образец:

declare
cursor c_c is
select emp.*, dept.* -- use aliasses if columns have same name
from emp
,    dept; -- for sample no join condition

r_c c_c%rowtype; 

begin
  for r_c in c_c loop -- with for loop even the definition of r_c is not needed.
  ...
  end loop;
end;
/