假设我在 PLSQL 过程中有这个结构:
...
for rec in
(
select a, b, c from t;
)
loop
process_record(rec);
end loop;
...
procedure process_record(p_rec in ???)
...
如何将作为弱类型游标记录的rec 传递给过程进行处理。我不想为这种类型的记录定义游标和类型。这可能吗?
TIA 金牌
假设我在 PLSQL 过程中有这个结构:
...
for rec in
(
select a, b, c from t;
)
loop
process_record(rec);
end loop;
...
procedure process_record(p_rec in ???)
...
如何将作为弱类型游标记录的rec 传递给过程进行处理。我不想为这种类型的记录定义游标和类型。这可能吗?
TIA 金牌
您必须定义一个游标或一个类型(两者都不需要)才能告诉 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;
/
我不知道一个简单的方法(并且会很惊讶地看到一个),但我有一个解决方法:
使用 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;
顺便说一句,你为什么要这样做?