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

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

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

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

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

Спасибо.

+2
источник поделиться
2 ответа

Вы можете использовать курсор пользователя% 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;
/
+8
источник

Почему даже беспокоиться с объявлением курсора?

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

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

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

+5
источник

Посмотрите другие вопросы по меткам или Задайте вопрос