pk2.f2只有一条记录,那还有必要用cursor吗?另外,你的写法很奇怪啊,pl/sql中有你这样写的吗?
  
f2(b varchar2,c varchar2) return varchar2 is
  v_d  varchar2(30);
begin
  select d into v_d from tb2 where b1=b and c1=c;
  return v_d;
exception 
  when others then 
    raise;
end  f2;
pk1.f1 
SELECT A,B,C,pk2.f2(b,c) d FROM TB1;