oracle 用函数查询怎么直接返回一个表

返回cursor的话,那么必须要cursor的手段来处理,不能作为查询语句的目的表。

如果需要在函数返回一个可以供查询语句使用的结果集,那么该函数的返回类型应该定义为一个索引表类型(一个table类型),然后在查询语句中使用table函数将函数返回的索引表转换成查询可以使用的目的表。示例如下:

1. 创建返回索引表所需的类型

create or replace type type_rec is object (idx integer, user_name varchar2(50));
create or replace type type_tb is table of type_rec;

2. 创建函数

create or replace function fn_return_tb
return type_tb
is
o_tb type_tb := type_tb();
i number := 0;
begin
  for v_rec in (select 1 as idx, 'Andy' as user_name from dual
  union select 2, 'Jack' from dual
  union select 3, 'Paul' from dual) loop
    o_tb.extend;
    i := i + 1;
    o_tb(i) := type_rec (v_rec.idx, v_rec.user_name);
  end loop;
  return o_tb;
end fn_return_tb;

3. 调用函数

select s.* 
from table(fn_return_tb()) s;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值