PL/SQL:从游标中获取2个或更多连接表的最佳实践?

2 oracle plsql record cursor

我听说使用%ROWTYPE属性在PL/SQL中定义记录是一个好习惯.这样可以节省输入并允许您的包即使在添加或删除列时也能继续运行.(如我错了请纠正我!)

但是,当我从涉及连接的游标中获取时,我发现我必须获取程序员定义的记录,该记录包括由连接返回的每列的(很可能很长的)手写列表.

所以我的问题是:是否有可能获取嵌套记录,或者获取记录列表,或做些什么来避免这种丑陋的kludge?我尝试过的所有内容都会导致错误的记录与光标返回的内容不匹配.

使用游标返回连接的结果对我来说似乎是一个常见的用例,奇怪的是在搜索中没有出现与此相关的内容.

谢谢.

Edw*_*win 8

您可以使用游标%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;
/
Run Code Online (Sandbox Code Playgroud)


小智 5

为什么甚至打扰光标声明?

这是等效的.

begin
  for r_c in (select emp.*, dept.* from emp, dept) loop
  ...
  end loop;
end;
Run Code Online (Sandbox Code Playgroud)

我在你的评论中看到你提到这一点.但我看到显式的游标语法使用了这么多,我认为显示它很重要.