`

oracle管道函数PIPELINED

 
阅读更多

先列举一个从网上搜到的比较简单的使用管道函数的例子:

 

--首先定义类型,管道函数可以返回多行数据,所以不能使用基础数据类型。   
create or replace type my_type as table of varchar2(4000);   
  
--创建管道函数   
--管道函数关键字: "[b]pipelined[/b]"   
--管道函数返回一行使用:"[b]pipe row(...)[/b]"   
create or replace function func_pipe_test return my_type   
  pipelined is  
begin  
  for i in reverse 1 .. 10 loop   
    pipe row(i);   
  end loop;   
  
end;   
  
--使用管道函数   
select * from table(func_pipe_test);  

 

下面结合项目中使用的与大家分享:

 

 

--首先定义类型,管道函数可以返回多行数据,所以不能使用基础数据类型
CREATE OR REPLACE TYPE "IF_SET_TAB"
 AS TABLE OF RET_ROW
--定义每一行内容的类型(此处也可定义成类似表结构)
CREATE OR REPLACE TYPE "RET_ROW"
 
   AS OBJECT(Rval  int)
--

CREATE OR REPLACE FUNCTION FB_IS_SETACCOUNT
 (
 NO   INT
 )

 RETURN  IF_SET_TAB  PIPELINED
 IS
 RET_ROW0  RET_ROW:=RET_ROW(NULL);
 bizType   fb_business.biz_type%TYPE;
 num   int;
 ret   int :=0;
 BEGIN
 SELECT  biz_type  INTO  bizType  FROM  business  WHERE   bid=FB_IS_SETACCOUNT.NO;
 IF  (bizType = '101')  THEN
    SELECT  count(*)  into  num   FROM    ACCOUNTS  WHERE   ACCOUNT_TYPE  IN('CREDIT','DEPOSIT','INTREST.INCOME','WITHHOLDING')
    AND  BID =FB_IS_SETACCOUNT.NO   and   account_no is  not  null;
    if  num = 4   then
    ret := 1;
    end if;
  ELSIF(bizType = '104')    THEN
    SELECT  count(*)  into  num  from   ACCOUNTS  WHERE   ACCOUNT_TYPE  IN('CREDIT','DEPOSIT','CONSIGN.DEPOSIT','CHARGE.PAY','CHARGE.INCOME','CONSIGN.INTREST')
      AND  BID =FB_IS_SETACCOUNT.NO  and   account_no is  not  null;
    if  num = 6   then
    ret := 1;
    end  if;
   END   IF;
   
   RET_ROW0.Rval := FB_IS_SETACCOUNT.ret; 
   pipe row(RET_ROW0);  --加入管道
   return;
 END;

 下面列举管道函数中返回的是类似于数组结构的函数:

  

  

 

--首先定义类型,管道函数可以返回多行数据,所以不能使用基础数据类型

CREATE OR REPLACE TYPE "HN_STAT_KM_BALANCE_TAB"
   AS TABLE OF HN_STAT_KM_BALANCE_ROW      
   
--定义每一行内容的类型(此处类似表结构)
CREATE OR REPLACE TYPE "HN_STAT_KM_BALANCE_ROW"                                                                                                                                                   AS OBJECT
 (no             varchar2(10),
  name            varchar2(100),
  treeNo          varchar2(20),
  currentAmount            NUMBER(20,2),
  notifyAmount     NUMBER(20,2),
  threeMonthAmount      NUMBER(20,2),
  sixMonthAmount     NUMBER(20,2),
  oneYearAmount     NUMBER(20,2),
  twoYearAmount            NUMBER(20,2),
  threeYearAmount             NUMBER(20,2),
  fiveYearAmount         NUMBER(20,2),
  MoreYearAmount          NUMBER(20,2),
  consignDepositAmount        NUMBER(20,2),
  shortLoanAmount          NUMBER(20,2),
  longLoanAmount          NUMBER(20,2),
  consignLoanAmount          NUMBER(20,2),
  totalAmount          NUMBER(20,2)
)

--下面是函数
CREATE OR REPLACE FUNCTION HN_STAT_KM_BALANCE(
qryCltno  varchar2,
qryTreeNo varchar2,
containFlag  Integer,
qrydate IN DATE,
qryType Integer,    --null--
bz IN varchar2
)
RETURN HN_STAT_KM_BALANCE_TAB PIPELINED
IS
RET  HN_STAT_KM_BALANCE_ROW:=HN_STAT_KM_BALANCE_ROW(NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
anothorTreeNo varchar2(20);
qrybz varchar2(1);
BEGIN

  qrybz := bz;
  if(bz is null) then
      qrybz := 'R';
  end if; 
  --存款科目余额
  if qryType is null then
     for rec3 in(select no,treeno,name from table(HN_STAT_SHEET_CLIENT(qryCltno,qryTreeNo,containFlag,null)))
    loop
        RET := HN_STAT_KM_BALANCE_ROW(NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);

        ret.no := rec3.no;
        ret.treeNo := rec3.treeno;
        ret.name := rec3.name;
        ret.totalAmount := 0;
        ret.threeMonthAmount := 0;
        ret.sixMonthAmount := 0;
        ret.oneYearAmount := 0;
        ret.notifyAmount := 0;
        ret.twoYearAmount:= 0;
        ret.threeYearAmount:=0;
        ret.fiveYearAmount := 0;
        ret.MoreYearAmount := 0;
        if ret.treeNo = '001001000%' then
           anothorTreeNo := '001001';
        else
           anothorTreeNo := '000';
        end if;

        --存款统计 包括 通知,短期存款, 中长期存款
           
         for  rec in (select  sum(b.rval) amount,a.kmh  kmh  from  acnt  a,table(NS_GetRval(qrybz,a.no, qrydate, 0)) b,client n
            where    a.clientid=n.cltno  and  a.bz = qrybz  and  b.rval != 0
            and (n.treeno like ret.treeNo or n.treeno = anothorTreeNo)
            group by a.kmh  order by a.kmh)
        loop
           if (rec.kmh = '*') then
                 ret.threeMonthAmount := ret.threeMonthAmount + rec.amount;
           elsif(rec.kmh = '*') then
                 ret.sixMonthAmount := ret.sixMonthAmount + rec.amount;
           elsif(rec.kmh = '*') then
                 ret.oneYearAmount := ret.oneYearAmount + rec.amount;
           elsif(rec.kmh = '*') then
                 ret.notifyAmount := ret.notifyAmount + rec.amount;
           elsif(rec.kmh = '*') then
                 ret.twoYearAmount := ret.twoYearAmount + rec.amount;
           elsif(rec.kmh = '*') then
                 ret.threeYearAmount := ret.threeYearAmount + rec.amount;
           elsif(rec.kmh = '*') then
                 ret.fiveYearAmount := ret.fiveYearAmount + rec.amount;
           elsif(rec.kmh = '*') then
                 ret.MoreYearAmount := ret.MoreYearAmount + rec.amount;
           end if;
           
             ret.totalAmount := ret.totalAmount + rec.amount;
          
        end loop;
         PIPE ROW(RET);
    end loop;
  end if;
  RETURN;
END HN_STAT_KM_BALANCE;

 

分享到:
评论

相关推荐

    pimpinella_3cd_01_0716.pdf

    pimpinella_3cd_01_0716

    FIB English learning

    FIB English learning

    linux下 jq 截取json文件信息

    X86-jq安装包

    [AB PLC例程源码][MMS_046356]SELX.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    大圣挪车小程序1.3.5+前端.zip

    大圣挪车小程序1.3.5 前端

    Manus.im 产品及开发团队研究报告.pdf

    Manus.im 产品及开发团队研究报告.pdf

    [AB PLC例程源码][MMS_044663]Control daisy chain wiring in Fieldbus Foundation.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    sun_3ck_01a_0918.pdf

    sun_3ck_01a_0918

    支持适用于PERC H330/H730/H730P/H830/H730P系列RAID卡MX/FD33xD/FD33xS控制器的驱动安装指南

    下载 1. 单击“立即下载”,以下载该文件。 2. 出现“文件下载”窗口后,单击“保存”,以将文件保存到硬盘。 安装 1. 浏览至文件下载目标位置并双击新下载的文件。 2. 仔细阅读对话窗口中显示的发布信息。 3. 下载并安装对话窗口中标识的任何必备项,然后再继续。 4. 单击“Install”(安装)按钮。 5. 按照其余提示执行更新。 安装 1. 将解压的文件复制到可访问Windows的介质。 2. 将系统重新引导至Windows操作系统。 3. 打开“服务器管理器”->“设备管理器”->“存储控制器”,然后单击“PERC控制器”。 5. 单击“更新驱动程序软件”,并按照提示更新驱动程序。 4. 重新引导系统以使更改生效。

    硬盘安装器,支持硬盘安装,无需制作U盘PE!

    支持所有操作系统一键安装。

    matlab程序代码项目案例:使用 Simulink 进行自适应 MPC 设计

    matlab程序代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    [AB PLC例程源码][MMS_044098]1769-ASCII Simultaneous Mode.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    swanson_01_1106.pdf

    swanson_01_1106

    [AB PLC例程源码][MMS_047811]SAF1 - Store.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    [AB PLC例程源码][MMS_043879]Programming in SFC and ST Language.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    sun_3ck_01_0919.pdf

    sun_3ck_01_0919

    方言距离数据.岭南学院产业与区域经济研究中心

    各城市方言距离数据-中山大学岭南学院产业与区域经济研究中心 方言距离是指两种或多种方言之间的相似程度或差异程度。参考中山大学岭南学院产业与区域经济研究中心的刘毓芸等(2015)文献。他们基于方言树图,并参考《汉语方言大词典》和《中国语言地图集》对方言的划分,将汉语方言从宽泛到具体分为以下几个层级:汉语→方言大区→方言区→方言片。为了量化县与县之间的方言差异,他们采用了一种赋值方法: 若它们分属不同方言大区,则距离为3。: 若两个县同属一个方言片,则它们之间的方言距离为0; 若两个县属于同一方言区但不同方言片,则距离为1; 若它们属于同一方言大区但不同方言区,则距离为2; 方言距离是一个反映方言之间相似程度或差异程度的重要指标,它在语音识别、方言研究等领域具有广泛的应用价值。 参考文献:[1]刘毓芸, 徐现祥, 肖泽凯. 2015. 劳动力跨方言流动的倒U型模式[J]. 经济研究, 50(10): 134-146+162. 指标 语系、语族、方言大区、方言区/语支、方言片/语种、Supergroup、Dialect、group、Sub-dialect、groupPref_1、Pref_2、DiaDist、PrefCode_1、PrefCode_2等等。

    基于PCA算法的人脸识别MATLAB源码

    基于PCA算法的人脸识别MATLAB源码

    [AB PLC例程源码][MMS_045740]Handling manual movement of axis using an Add On Instruction (AOI), .zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    lim_3ck_01a_0518.pdf

    lim_3ck_01a_0518

Global site tag (gtag.js) - Google Analytics