Oracle学习笔记二十四:自定义函数之返回结果集

Oracle学习笔记二十四:自定义函数之返回结果集一、基本说明 • Oracle 中的函数可以返回表类型,但是这个表类型实际上是集合类型(与数组类似)。从 Oracle 9i 开始,提供了一个叫做"管道化表函数"来解决此

Oracle学习笔记二十四:自定义函数之返回结果集

一、基本说明

• Oracle 中的函数可以返回表类型,但是这个表类型实际上是集合类型(与数组类似)。从 Oracle 9i 开始,提供了一个叫做”管道化表函数”来解决此问题。

• 管道化表函数,必须返回一个集合类型,且标明 pipelined。它不能返回具体变量,必须以一个空 return 返回,通过 pipe row () 语句来送出要返回的表中的每一行。调用这个函数的时候,通过 table() 关键字把管道流仿真为一个数据集。

二、常见形式

2.1、以游标形式返回结果集

1)创建函数

create or replace function fn_GetEmpnoByCursor(p_ename in varchar2)
    return sys_refcursor 
is
    c_empno sys_refcursor;
begin
    open c_empno for
        select empno,ename from emp where ename=p_ename;
    return(c_empno);
end;

2)调用函数

select fn_GetEmpnoByCursor(p_ename => "James") from dual;

2.2、以Table形式返回结果集

1)创建函数

--定义一个行类型
create or replace type "emp_row_type" as object(empno varchar2(10),ename varchar2(20));
 
--定义一个表类型
create or replace type "emp_table_type" as table of "emp_row_type";
 
--创建函数
create or replace function fn_GetEmpnoByTable (p_ename in varchar2)
    return "emp_table_type" 
is
    emp_row "emp_row_type";                             --定义单行
    emp_table "emp_table_type" :="emp_table_type"();    --定义返回结果,并初始化。
begin
    for currow in (select empno,ename from emp where ename=p_ename) 
    loop
        emp_row := "emp_row_type"(currow.empno,currow.ename);
        emp_table.extend;
        emp_table(emp_table.count) := emp_row;
    end loop;
    return(emp_table);
end;

2)调用函数

select * from table(fn_GetEmpnoByTable(p_ename => "James"));

2.3、以管道形式返回结果集

1)创建函数

--定义一个行类型
create or replace type "emp_row_type" as object(empno varchar2(10),ename varchar2(20));
 
--定义一个表类型
create or replace type "emp_table_type" as table of "emp_row_type";

--创建函数
create or replace function fn_GetEmpnoByPipe(p_ename in varchar2)
    return "emp_table_type" pipelined
is
    emp_row "emp_row_type"; --定义emp_row为行对象类型
begin
    for currow in (select empno,ename from emp where ename=p_ename)
    loop
        emp_row := "emp_row_type"(currow.empno,currow.ename);
        pipe row (emp_row);
    end loop;
    return;
end;

2)调用函数

select * from table(fn_GetEmpnoByPipe(p_ename => "James"));

 

原文地址:https://www.cnblogs.com/atomy/archive/2022/06/07/16347891.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/5140.html

(0)
上一篇 2023-05-21 13:30
下一篇 2023-05-21 15:30

相关推荐

  • 记一个ORACLE 11G无法远程登录的BUG[亲测有效]

    记一个ORACLE 11G无法远程登录的BUG[亲测有效]首先平台是WIN SERVER 2008,ORACLE 11G 刚开始见到别人发的代码是无监听,首先判断是服务或者监听没有配置好。 使用ORACLE自带的NET CONFIGURATION ASSI…

    2023-02-25
    140
  • 告诉你个广告业务存储神器[亲测有效]

    告诉你个广告业务存储神器[亲测有效]摘要:高性能、大容量、低成本、强稳定性,广告业务需要的Ta都有 本文分享自华为云社区《广告业务存储神器:华为云GaussDB for Redis》,作者: GaussDB 数据库。 一、从需求场景说起

    2023-06-10
    140
  • Python实现Excel合并单元格功能

    Python实现Excel合并单元格功能在Excel操作中,很多时候需要对表格进行整理和排版等处理,而合并单元格就是其中一个比较常用的功能。而在Python中,也可以通过调用相关的库实现Excel合并单元格的功能。本文将通过介绍Python中实现Excel合并单元格功能的方法及相关代码示例,帮助读者更好地掌握这个知识点。

    2024-09-04
    22
  • Python数组拆分:有效处理大型数据集

    Python数组拆分:有效处理大型数据集

    2024-03-29
    68
  • 用Python轻松实现字体格式转换

    用Python轻松实现字体格式转换字体格式转换指的是将一种字体格式转换成另一种字体格式。在日常生活中,我们常常会遇到需要将一种格式的字体转换成另一种格式的情况。比如,有些软件只支持某种字体格式,但我们手上的文件是另一种格式,这就需要将文件中的字体进行转换。在以下的文章中,我们将会使用Python语言,展示如何通过简单的代码实现字体格式的转换。

    2024-03-24
    75
  • Spyder打不开的解决办法

    Spyder打不开的解决办法Spyder是一款用于Python语言集成开发环境,提供了编辑器、交互式控制台、调试器等功能的综合性IDE。然而,在使用过程中,有时会出现Spyder打不开的问题,导致用户不能正常使用该软件开发Python项目。

    2024-09-15
    25
  • 利用Python的dict数据结构实现高效数据查找

    利用Python的dict数据结构实现高效数据查找Python是一门非常适合数据科学和数据处理的编程语言,因为它内置了一些非常强大的数据结构和算法。其中最常见的就是字典(dict)数据结构,它是Python中最常用的数据结构之一。

    2023-12-27
    116
  • [20221008]sql profile优化失效问题.txt

    [20221008]sql profile优化失效问题.txt[20221008]sql profile优化失效问题.txt//生产系统一条sql语句存在性能问题,使用sql profile优化固定执行计划,再次出现问题,以前也遇到类似的问题,做一个记录.1

    2023-06-09
    103

发表回复

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