首页 > 数据库 >【Oracle】 管道函数pipelined function简单的使用

【Oracle】 管道函数pipelined function简单的使用

时间:2023-07-26 17:23:26浏览次数:40  
标签:function 函数 test 管道 pipelined Oracle Type Row

Oracle 管道函数pipelined function简单的使用

如果在函数(function)中加关键字 pipelined,就表明这是一个oracle管道函数,其返回值类型必为 集合,体现出来的数据结构类似于表,即可以理解成,使用管道函数可以返回一张查询表,可以是单行数据也可以是多行数据,而不是平常函数返回的单行数据

这种返回多行数据在需要大数据量处理的时候很有用,且在复杂的方法下更好地去处理一些复杂的逻辑查询

要使用管道函数的话需要先进行一下类型的类型的创建

首先我们创建一个类型对象

CREATE OR REPLACE Type test_Row_Type As Object
(
  test1 Varchar2(512),
  test2 Varchar2(3000),
  test3 Varchar2(3000),
  test4 Varchar2(3000),
  test5 Varchar2(3000),
  test6 Number,
  test7 Number
)

然后我们创建嵌套的表

CREATE OR REPLACE TYPE test_Row_Type_TABLE AS TABLE OF test_Row_Type;

接下来创建一个临时表,用来测试数据

create table TTTtable
(
  aaa VARCHAR2(50),
  bbb VARCHAR2(50),
  ccc VARCHAR2(50)
)

其中数据如下

image

然后我们开始写管道函数

CREATE OR REPLACE FUNCTION test_Row_pipelined(p_varchar in varchar2)
  return test_Row_Type_TABLE
  --关键字加在这里
  pipelined as
  p_num integer := 0;
  ret   test_Row_Type;
begin
  --查询临时表数据
  for sub_data in (select t.bbb, t.ccc
                     from TTTtable t
                    where t.aaa = p_varchar) loop
  
    p_num := p_num + 1;
    
    ret := test_Row_Type(p_num,
                             sub_data.bbb,
                             sub_data.ccc,
                             '',
                             '',
                             0,
                             0);
    --将数据放入管道,pipe row()语法被用来返回该集合的单个元素
    pipe row(ret);
  
  end loop;
  --函数使用一个空的return结束
  return;
end;

如果是使用

select test_Row_pipelined('a') from dual

则返回的是<Collection>数据,此时在PL/SQL中打开就是这样的

image

同时,我们还可以使用这种语法

select * from table(test_Row_pipelined('a')) t

结果也是这样的,不过推荐使用这种方法,因为这种方式是可以使用where条件去进行过滤的

比如我们加上where

select t.* from table(test_Row_pipelined('a')) t where t.test1 = 1

则得到的结果就是这样的

image

这就是管道函数的最基本的用法

标签:function,函数,test,管道,pipelined,Oracle,Type,Row
From: https://www.cnblogs.com/jokingremarks/p/17583048.html

相关文章

  • oracle查询相关性能语句
    ------------------------------SGA-----------------------------------------------SGA各部分大小showsgaselect*fromv$sga;SELECT*FROMV$SGAINFO;--SGA设置大小showparametersga_target--SGA各个池大小COLnameFORMATa32;SELECTpool,name,bytes/1024......
  • oracle partition by 查询重复记录中的1条数据(获取表去重后的数据所有字段)
    1,partitionby分组后给分组数据排序selectt.*,row_number()over(partitionbyt."name",t."rid"orderbyt."rid")as"sort"from"person"t;2、获取去重后的记录selectt2.*from(SELECTt.*,row_number()over(partitionbyt.&......
  • Oracle日常性能问题查看 转载 https://www.cnblogs.com/yhq1314/p/10601630.html
    1判断回滚段竞争的sql--当Ratio大于2时存在回滚段竞争,需要增加更多的回滚段)selectrn.name,rs.GETS,rs.WAITS,(rs.WAITS/rs.GETS)*100ratiofromv$rollstatrs,v$rollnamernwherers.USN=rn.usn;2判断恢复日志竞争的sql,这句有问题不能使用--immediate_con......
  • ORACLE UNPIVOT函数
    语法     函数用途: UNPIVOT函数用来将列值转换为行值.1. INCLUDE|EXCLUDENULLS子句参数可以控制在结果集中是否保留值为NULL的行(新生成的行,即PIVOT_FOR_CLAUSE参数值)。当省略这个控制参数时,默认为EXCLUDENULLS,即去除空值行。2. 列转行后结果集中生成的......
  • Oracle数据完整性和锁机制
    Oracle数据完整性和锁机制本课内容属于Oracle高级课程范畴,内容略微偏向理论性,但是与数据库程序开发和管理、优化密切相关;另外本课的部分内容在前面章节已经涉及,请注意理论联系实际。事务  事务(Transaction)从通讯的角度看:是用户定义的数据库操作序列,这些操作要么全做、要么......
  • ORACLE函数大全
    ORACLE函数大全SQL中的单记录函数1.ASCII返回与指定的字符对应的十进制数;SQL>selectascii('A')A,ascii('a')a,ascii('0')zero,ascii('')spacefromdual;      A        A     ZERO    SPACE------------------------------------......
  • 30 天精通 RxJS (02):Functional Programming 基本观念
    FunctionalProgramming是Rx最重要的观念之一,基本上只要学会FP要上手Rx就不难了!FunctionalProgramming可以说是近年来的显学,各种新的函式编程语言推出之外,其他旧有的语言也都在新版中加强对FP的支持!什么是FunctionalProgramming?FunctionalProgramming是一种编程......
  • oracle服务 linux启动命令
    一、Linux下启动OracleLinux下启动Oracle分为两步:1)启动监听;2)启动数据库实例;1.登录服务器,切换到oracle用户,或者以oracle用户登录[admin@dataserver~]$su-oracle密码:[oracle@dataserver~]$2.打开监听服务[oracle@localhost~]$lsnrctlstart可以通过ls......
  • Linux下如何重启Oracle
    操作步骤切换到oracle用户su–oracle通过sqlplus以管理员身份登录sqlplus/assysdba然后执行shutdownimmediate退出sqlplusexit重启监听器lsnrctlreload检查当前监听器的状态//可以查看各实例的状态lsnrctl......
  • Oracle-21C导入dmp文件
    1、前期工作具体参考该博文Windows操作系统安装Oracle数据库下载安装Oracle数据库图形管理工具2、连接和调整数据库环境2.1、以数据库管理员身份登录数据库++++++++++++++++++++++分割线++++++++++++++++++++++2.2、查询当前会话是否为CDB注意:Oracle12C以及更......