1

假设我在 PLSQL 过程中有这个结构:

...
for rec in
  (
  select a, b, c from t;
  )
loop
  process_record(rec);
end loop;
...

procedure process_record(p_rec in ???)
...

如何将作为弱类型游标记录的rec 传递给过程进行处理。我不想为这种类型的记录定义游标和类型。这可能吗?

TIA 金牌

4

2 回答 2

0

您必须定义一个游标或一个类型(两者都不需要)才能告诉 oracle 输入的结构(除非您想沿着路线走或定义 AnyData/AnyType 方法。

例如

declare
  cursor my_template
  is
    select a,b,c from t;


  procedure process_record(p_rec in my_template%rowtype)
      is
  begin
   null;
  end;
begin
for rec in
  (
  select a, b, c from t
  )
loop
  process_record(rec);
end loop;
end;
/
于 2012-11-12T17:32:26.400 回答
0

我不知道一个简单的方法(并且会很惊讶地看到一个),但我有一个解决方法:

使用 XMLType 作为您的类型:

declare

begin
  for rec in (select xmlelement("p_rec", xmlforest(a, b, c)) r from t) loop
    process_record(rec.r);
  end loop;
end; 

...

create or replace procedure process_record(p_rec in XMLtype) as

BEGIN
dbms_output.put(p_rec.extract('//A/text()').getstringval() || ',');
dbms_output.put(p_rec.extract('//B/text()').getstringval() || ',');
dbms_output.put_line(p_rec.extract('//C/text()').getstringval());
END;

顺便说一句,你为什么要这样做?

于 2012-11-12T17:32:36.260 回答