oracle弱键入记录作为参数

时间:2012-11-12 17:01:07

标签: oracle parameters record

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

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

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

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

TIA 金

2 个答案:

答案 0 :(得分: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;
/

答案 1 :(得分: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;
顺便说一句,你为什么要这样做?