oracle函数返回表的实现

如果要通过oracle函数实现返回表,应该如何实现呢?下面就教您一个oracle函数返回表的实现方法,供您参考,希望对您学习oracle函数能有所帮助。

包里面用一个存储过程,返回游标,就可以了

>包的定义
1) 包头

  1. create or replace package mypk  
  2. as  
  3. type t_cursor is ref cursor;  
  4. procedure proc(name varchar2,c out t_cursor,a number);  
  5. end; 

2) 包体

  1. create or replace package body mypk  
  2. as  
  3. procedure proc(name varchar2,c out t_cursor,a number)  
  4. as   
  5. begin  
  6. open c for select * from test where id=a and namename=name;  
  7. end proc;  
  8. end;  

这个方案的局限性太大,无法实现select * from function()的要求

从oracle 9i 开始,提供了一个叫做“管道化表函数”的概念,来解决这个问题
这种类型的函数,必须返回一个集合类型,且标明 pipelined
这个oracle函数不能返回具体变量,必须以一个空 return 返回
这个oracle函数中,通过 pipe row () 语句来送出要返回的表中的每一行

调用这个oracle函数的时候,通过 table() 关键字把管道流仿真为一个数据集

以下是一个十分简单的实例:

  1. create table tb1(k number, v varchar2(10));  
  2.  
  3. insert into tb1(k, v) values(100,'aaa');  
  4. insert into tb1(k, v) values(200,'bbb');  
  5. insert into tb1(k, v) values(200,'ccc');  
  6.  
  7. select * from tb1;  
  8.  
  9. create type row_type1 as object(k number, v varchar2(10));  
  10.  
  11. create type table_type1 as table of row_type1;  
  12.  
  13. create or replace function fun1 return table_type1 pipelined as  
  14. v row_type1;  
  15. begin  
  16. for myrow in (select k, v from tb1) loop  
  17. :row_type1(myrow.k, myrow.v);  
  18. pipe row (v);  
  19. end loop;  
  20. return;  
  21. end;  
  22.  
  23. select * from table(fun1);  
  24.  

如果oracle函数带参数,可以写法如下:

  1. create or replace function fun1(i_v Int) return table_type1 pipelined as  
  2. v1 row_type1;  
  3. begin  
  4. for myrow in (select k, v from tb1 Where k = i_v) loop  
  5. v1 :row_type1(myrow.k, myrow.v);  
  6. pipe row (v1);  
  7. end loop;  
  8. return;  
  9. end;  
  10.  
  11. select * from table(fun1(100));  

这个方案基本可以实现返回表的要求,但是需要注意的是,过多的集合对象的申请不利于管理。
 
 

 

 

【编辑推荐】

带您了解Oracle FBI索引

详解Windows下卸载Oracle数据库

详解如何将Oracle安装为Linux服务

详解Oracle多种表连接方式

oracle中使用SQL递归语句的例子

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/229750.html<

(0)
运维的头像运维
上一篇2025-04-18 22:13
下一篇 2025-04-18 22:14

相关推荐

  • RAKsmart独立服务器2026年测评,CN2 GIA实测数据与性能表现,CN2 GIA服务器到底怎么样,CN2 GIA独立服务器推荐

    RAKsmart 独立服务器在 2026 年已确立为连接中国内地与全球的高性能网络枢纽,其 CN2 GIA 线路实测延迟稳定在 35ms 以内,吞吐量突破 900Mbps,是跨境业务场景下兼顾稳定性与性价比的优选方案,核心网络性能深度解析2026 年 CN2 GIA 线路实测数据在 2026 年的网络架构中,R……

    2026-05-02
    0
  • hosteonsVPS测评,实测体验,hosteonsVPS怎么样?

    Hosteons VPS 在 2026 年的实测表现显示,其依托全球 BGP 线路优化与 NVMe 全闪存架构,在亚洲至北美跨洋延迟控制上表现优异,是追求高性价比与稳定性的中小型企业首选,但需注意其部分机房在晚高峰期的波动风险,核心性能与网络架构深度解析在 2026 年云计算基础设施全面向 AI 算力与边缘计算……

    2026-05-02
    0
  • BaCloud独立服务器测评不限流量实测表现,BaCloud独立服务器不限流量怎么样

    2026 年实测结论:BaCloud 独立服务器在不限流量场景下表现优异,特别适合高并发视频流媒体与大数据传输业务,其性价比与稳定性在同类竞品中处于第一梯队,但需关注其节点覆盖密度,在 2026 年云计算市场进入存量博弈与精细化运营并存的阶段,企业用户对于“不限流量”的诉求已从单纯的带宽大小转向实际吞吐能力与计……

    2026-05-02
    0
  • 香港旅游好去处,香港自由行攻略,香港签证怎么办理

    2026 年香港作为全球顶级金融与科创枢纽,其核心优势在于“一国两制”下的资金自由流动、低税率环境及与国际市场无缝对接的法治体系,是跨境企业布局亚太的首选地,2026 香港宏观环境:政策红利与产业格局进入 2026 年,香港在巩固国际金融中心地位的同时,正加速向“国际创新科技中心”转型,根据香港特区政府统计处及……

    2026-05-02
    0
  • RamNode 是什么?RamNode 价格贵吗

    RamNode 在 2026 年依然是全球高性价比独立服务器首选,尤其适合预算有限但追求极致 I/O 性能与 99.9% 在线率的中小型跨境电商及游戏开发者,在 2026 年的云计算版图中,RamNode 凭借其独特的“内存优先”架构与极致的成本控制策略,继续稳固其在 VPS 市场的头部地位,对于寻求RamNo……

    2026-05-02
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注