假设我在PLSQL过程中有这个构造:
...
for rec in
(
select a, b, c from t;
)
loop
process_record(rec);
end loop;
...
procedure process_record(p_rec in ???)
...
如何将rec(这是弱类型游标的记录)传递给处理过程。 我不想为这种类型的记录定义游标和类型。 这可能吗?
TIA 金
答案 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;
顺便说一句,你为什么要这样做?