2

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

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

所以我的问题是:是否有可能获取嵌套记录,或者获取记录列表,或者做一些事情来避免这种丑陋的混乱?我尝试过的所有操作都会导致记录与游标返回的内容不匹配的错误。

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

谢谢你。

4

2 回答 2

8

您可以使用 cursor%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;
/
于 2009-02-26T05:49:32.430 回答
5

为什么还要打扰游标声明?

这是等价的。

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

我在您的评论中看到您提到了这一点。但我看到显式游标语法被大量使用,我认为展示出来很重要。

于 2009-02-26T13:59:55.947 回答