- 浏览: 324797 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
Mr丶Chenn:
...
doFilter如何使用 -
Mr丶Chenn:
[url][url][url][url][/url][/url ...
doFilter如何使用 -
Mr丶Chenn:
...
doFilter如何使用 -
Mr丶Chenn:
引用引用引用引用引用
doFilter如何使用 -
honlin:
SafeUtil.getDateFormat().trim() ...
DateUtil
先列举一个从网上搜到的比较简单的使用管道函数的例子:
--首先定义类型,管道函数可以返回多行数据,所以不能使用基础数据类型。 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;
发表评论
-
数据库连接超过了最大最大连接数
2012-06-06 10:31 1446从日志看是发起的数据库连接超过了最大最大连接数(500个)。如 ... -
临时表空间损坏
2012-06-05 14:58 0http://www.linuxidc.com/Linux/2 ... -
union union all
2012-02-29 15:16 461union 以后会去掉重复字段 union ... -
oracle extract函数
2012-02-29 14:54 952select extract(year from TO_D ... -
oracle profiler安装
2012-01-17 14:20 1331比较好的安装资料 http://www.qudong. ... -
oralce数据库调优
2012-01-13 16:26 1541oracle数据库调优培训备 ... -
查找表中某几个字段重复的记录
2011-12-31 13:16 885查找表中某几个字段重复的记录 select rowid ... -
oracle字段从varchar2转化为clob
2011-12-06 11:30 2053在项目中遇到原来的varchar2类型长度不够了,仅为4000 ... -
oracle意外drop表
2011-08-26 15:33 962http://8xybuttfly.blog.163.com/ ... -
decode函数
2011-08-17 16:56 776select decode( x , 1 , ‘x is 1 ... -
plsql对小时判断
2011-08-17 16:41 1046if to_char(sysdate,'HH24') n ... -
oracle中private同义词和public同义词
2011-08-17 11:06 3651项目中遇到,遂从网上搜索了下,觉得如下解释较为通俗易懂: ... -
表空间太小报错
2011-08-11 14:47 858ORA-10654 unable to extend ... -
oracle数据脚本的管理
2011-07-27 14:30 1027针对没有上线的项目脚本,可以集中在一起管理。 写成.P ... -
oracle和sqlserver判空函数区别
2011-07-26 14:18 1387sqlserver 判空函数: isnull(v.name ... -
oracle工作常用技巧
2011-05-27 14:18 907导入数据 1:导入库时,先登录控制台 http:// ...
相关推荐
### Oracle管道函数详解 #### 一、概述 Oracle管道函数是一种特殊类型的函数,它能够返回一个数据集合,并且能够在函数执行的过程中逐步返回结果,而不仅仅是最后的结果。这种特性使得管道函数非常适合于处理大量...
如果需要在客户端实时的输出函数执行过程中的一些信息,在oracle9i以后可以使用管道函数(pipeline function)。 关键字PIPELINED表明这是一个oracle管道函数,oracle管道函数的返回值类型必须为集合 --创建一个集合...
总的来说,"pipeline管道模型python实现"涉及到的主要知识点包括:设计模式的应用、配置文件解析、Python函数或类的组合使用,以及使用`networkx`库来管理和协调这些组件。理解并熟练掌握这些概念,对于构建高效、...
其中,聚合管道(Aggregation Pipeline)是MongoDB中一个非常重要的特性,用于对数据进行复杂处理和分析。接下来,我们将详细地探讨MongoDB聚合管道的相关知识点。 首先,从概念上理解,MongoDB的聚合管道可以类比...
标题中的“lmd_管道泄漏_lmd_LMD仿真_仿真管道信号_pipeline_”指的是一个关于管道泄漏检测的项目,其中LMD(Laplacian of Gaussian,高斯拉普拉斯算子)是一种重要的仿真和分析工具。这个项目可能涉及到利用LMD方法...
本文将深入探讨如何利用Redis的管道(PipeLine)和批量(Batch)操作来显著提高数据处理速度。 首先,让我们回顾一下问题的来源。在示例代码中,为了记录商品购买用户,使用了`SADD`命令向Redis的Set中添加元素。...
"jenkins-common-pipeline"是一个专为Jenkins设计的项目,旨在提供一套可复用的、标准化的管道脚本,以实现高效且灵活的自动化流程。本文将深入探讨这个项目的核心概念——共享库,以及如何利用它来提升Jenkins管道...
现在我们来谈谈“Pipeline”(管道)。在Tomcat中,Pipeline是一个处理链的概念,它定义了请求和响应如何在各个组件之间传递。每个Engine、Host和Context都拥有自己的Pipeline,其中包含了Valve(阀门)组件。Valve...
标题中的“EMD_管道泄漏信号_pipeline_管道_信号检测算法_EMD.zip”表明这是一个关于使用Empirical Mode Decomposition(EMD)算法进行管道泄漏信号检测的项目。EMD是一种自适应的数据分析方法,常用于非线性、非...
在介绍Tomcat的管道模式(Pipeline)与Valve的详细知识点前,我们先来理解一下什么是管道模式。管道模式可以被看作是一种设计模式,它的核心概念是将多个处理对象通过一种类似于管道的结构连接起来,每个处理对象在...
标题中的“EMD_管道泄漏信号_pipeline_管道_信号检测算法_EMD_源码.rar”表明这个压缩包文件主要涉及的是使用经验模态分解(Empirical Mode Decomposition, EMD)算法来检测管道泄漏的信号处理技术。EMD是一种自适应...
标题中的“Untitled_matlab_pipeline_”暗示这可能是一个关于使用MATLAB进行管道固有频率计算的项目或脚本。MATLAB是一种强大的编程环境,尤其适用于数值计算和数据分析,因此在这个项目中,它被用来确定管道的自然...
用C#实现管道,用BlockingCollection 集合。线程安全
jenkins-pipeline-docker, 带有Jenkins管道插件和 Docker的容器构建环境 采用Jenkins管道插件和 Docker的容器环境。这里代码与这里博客帖子相关:...
蓝色流管道 (Blue Stream Pipeline) - **长度**: 1213公里 - **直径**: 610-1400毫米 - **最大水深**: 2,150米 - **成本**: 32亿美元 - **输气量**: 计划到2010年达到160亿立方米 - **地震活动**: 该地区地震活跃,...
传统的Map-Reduce框架通常运行在独立的计算集群上,而Oracle数据库通过其独特的特性——**Pipeline Table Functions**(管道表函数)——提供了一种直接在数据库内部实现Map-Reduce的方式,从而实现了真正的“in-...
在自然的从左到右表达式中快速链接方法调用、属性访问和函数。 就像 + + 都整合到一个函数中。 Node下安装使用: npm install functional-pipeline --save var fp = require('functional-pipeline'); // or ...