oracle高级函数去重,傅老师课堂:Oracle高级应用之去重聚合函数

开篇一笑:高中的时候,自行车被偷,早上顺路搭同学的自行车。我坐在后座看到前面一大妈跑步,很猥琐的对同学说:“你看前面那个肥婆跑得屁股都甩圆了!”这货沉默了一下。当我们和大妈擦身而过的时候,他喊道:“妈....”

本例实现的是连接字符串,并且去掉重复的项。

聚合函数实际上就是一个对象:

create or replace type distinct_concat_type as object

(

--对象变量

cat_string varchar2(500),

--对象初始化

static function ODCIAggregateInitialize(cs_ctx In Out distinct_concat_type)

return number,

--聚合函数的迭代方法

member function ODCIAggregateIterate(self In Out distinct_concat_type,

value in varchar2) return number,

--当查询语句并行运行时,才会使用该方法,可将多个并行运行的查询结果聚合

member function ODCIAggregateMerge(self In Out distinct_concat_type,

ctx2 In Out distinct_concat_type)

return number,

--终止聚集函数的处理,返回聚集函数处理的结果

member function ODCIAggregateTerminate(self In Out distinct_concat_type,

returnValue Out varchar2,

flags in number)

return number

)

接着实现对象主体:

create or replace type body distinct_concat_type is

--对象初始化

static function ODCIAggregateInitialize(cs_ctx IN OUT distinct_concat_type)

return number is

begin

cs_ctx := distinct_concat_type(null);

return ODCIConst.Success;

end;

--聚合函数的迭代方法

member function ODCIAggregateIterate(self IN OUT distinct_concat_type,

value IN varchar2) return number is

begin

if self.cat_string is null or (instr(self.cat_string, value, 1, 1) = 0) then

self.cat_string := self.cat_string || ',' || value;

end if;

return ODCIConst.Success;

end;

--当查询语句并行运行时,才会使用该方法,可将多个并行运行的查询结果聚合

member function ODCIAggregateMerge(self IN OUT distinct_concat_type,

ctx2 IN Out distinct_concat_type)

return number is

begin

if self.cat_string is null or

(instr(self.cat_string, ctx2.cat_string, 1, 1) = 0) then

self.cat_string := self.cat_string || ',' || ctx2.cat_string;

end if;

return ODCIConst.Success;

end;

--终止聚集函数的处理,返回聚集函数处理的结果

member function ODCIAggregateTerminate(self IN Out distinct_concat_type,

returnValue OUT varchar2,

flags IN number) return number is

begin

returnValue := ltrim(rtrim(self.cat_string, ','), ',');

return ODCIConst.Success;

end;

end;

最后定义函数,使用的是上面定义的对象:

create or replace function distinct_concat(input varchar2) return varchar2

parallel_enable

aggregate using distinct_concat_type;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/506031.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jquery手写轮播图_jquery 实现轮播图详解及实例代码_jquery_脚本之家

轮播图:接触jquery也有一段时间了,今天刚好利用轮播图来练练手。博文的前面会介绍一个简单用jquery做轮播图的例子,中间会插入一些关于轮播图更多的思考,在后面会用Javascript的方法来写一个轮播图,最后则是关于jquery…

关于python_关于python的基础知识

一,编程语言的类型: 1、编译型 2、解释型 3、静态语言 4、动态语言 5、强类型定义语言 6、弱类型定义语言 编译型vs解释型 编译型: 优点:编译器一般会有预编译的过程对代码进行优化。因为编译只做一次,运行时不需要编译…

oracle10g如何导出dmp,Oracle 10g dmp文件的导入导出

Oracle数据导入dmp文件可以是“某个用户下的数据库”,也可以是“某张表”,这里以导入数据库为例说明 :1.用SYS用户名,以DBA的身份在ie中登入到数据库(ORACLE客户端Enterprise Manager Console)2.在方案->用户与权限->用户新…

idea 不打开文件提示错误_IDEA无法正常启动(打不开报错)

版权声明:转载请附上文章地址https://blog.csdn.net/qq_42672839IDEA无法正常启动(两种问题)目录第一种是缓存问题 双击Idea打开,无任何反应,资源管理器中有Idea的进程。第二种报错(报错: cannot lock system foiders)两种…

python套用word模板_如何使用Python批量创建Word模板

如何使用 Python 批量创建 Word 模板 在日常工作中我们经常需要重复性地将同一份内容的 Word 文档资料发送 给多个不同客户, 此时 Word 文档内容可能只有客户署名不同、 或者只有部分关 键信息不同。此时如果采用传统的工作方法我们可能需要反复地打开不同 Word 文档…

oracle sh文件怎么打开,Oracle数据库逻辑备份的SH文件

该Oracle教程将告诉诸位学习Oracle的朋友:Oracle数据库逻辑备份的SH文件。完全备份的SH文件:exp_comp.shrq date "%m%d" su - oracle -c "exp system/manager fully inctypecomplete file/oracle/export/db_comp$rq.dmp"累计备份的S…

jetson nano 系统镜像制作_2.Jetson Nano烧写系统镜像

烧录工具.zip点击下载Jetson Nano是一款形状和接口类似于树莓派的嵌入式主板,搭载了四核Cortex-A57处理器,GPU则是拥有128个NVIDIA CUDA核心的NVIDIA Maxwell架构显卡,内存为4GB的LPDDR4,存储则为16GB eMMC 5.1,支持4K…

python鸡兔同笼编程运行结果_Python少儿编程:鸡兔同笼

Python少儿编程:解决鸡兔同笼问题 一笼鸡和兔子,我们数了一下,咳咳,鸡和兔子的头一共有35个,但是鸡和兔子的脚一共有94只。 好的,那么吃货们我们来好好算一算,到底能做几只德州扒鸡和双流兔头呢…

linux fedora14 u盘运行,Fedora Linux系统下挂载U盘和Windows盘

前提是在mnt目录下,建立了F,D,U三个目录,还有就是sda,hda之分即串并口硬盘区别[rootlocalhost yan]# vi /etc/fstabLABEL/ / ext3 defaults 1 1tmpfs /dev/shm tmpfs defaults 0 0devpts /dev/pts devpts gid5,mode620 0 0sysfs /sys sysfs d…

linux下c语言绘图库_Linux 下的图形库介绍

在进行Linux下的图形系统编程时,我们常常会遇到以下这些概念:Framebuffer, X11, SDL,DFB, miniGUI, OpenGL,QT, GTK,KDE, GNOME等等。一、Linux 图形领域的基础设施1.1 X WindowX Window从逻辑上分为三层:X…

python解析二维码_Python二维码生成识别实例详解

前言 在 JavaWeb 开发中,一般使用 Zxing 来生成和识别二维码,但是,Zxing 的识别有点差强人意,不少相对模糊的二维码识别率很低。不过就最新版本的测试来说,识别率有了现显著提高。 对比 在没接触 Python 之前&#xff…

linux下 如何用信号signal 终止或者暂停子线程,linux下实现线程暂停

记得在windows下有一个SuspendThread使线程挂起的函数,却发现linux下没有类似的函数,于是想自己写个。。刚开始就想到用信号(没办法,正在看auep,只能想到这个)test1:用pthread_kill将SIGSTOP信号发送到要暂停的线程期望结果&#…

keil debug如何在watch直接修改变量值_python日志记录系列教程,内置logging模块(一),直接使用logging模块的基础日志记录

前言:成熟的软件开发不可避免的要进行日志记录,python内置模块logging提供了强大的日志记录能力,本文将从多个角度,由浅入深的介绍logging的常见使用方法和一些基本概念,本此系列文章分为两篇,本文为系列文…

linux进程管理子系统分析,linux进程管理子系统简要分析

Linux进程管理:进程与程序:程序:存放在磁盘上的一系列代码和数据的可执行映像,是一个静止的实体。进程:是一个执行中的程序,它是动态的实体进程四要素:1. 有一段程序供其执行,这段程…

基于python的分布式扫描器_基于python的服务器监测系统的设计

基于python的服务器监测系统的设计高正;徐浩;余曼【期刊名称】《电脑知识与技术》【年(卷),期】2017(013)002【摘要】本文介绍了一种基于Python的服务器监测系统的设计,系统部署在需要监测的服务器上能够实时监测服务器的CPU、内存、磁盘空间.每天定时(可人工设置)自动发邮件报…

c语言变量命名规则_带你学习C语言—变量

在编写程序时,常常需要将数据存储在内存中,以便于使用这个数据或者修改这个数据的值。我们通常使用变量来存储数据,而且使用变量可以引用存储在内存中的数据,并随时根据需要对数据进行处理。变量的概念在程序设计中,允…

linux某个线程信号唤醒,linux多线程编程--信号量和条件变量 唤醒丢失事件

PriorityQueue有一个特征需要特别注意,即:对于那些通过排序方法判定为“相等”的元素,在通过poll方法依次取出它们时,它们的顺序是不确定的,特别是不会维持插入的顺序。举例说明:假如一个对象Obj&#xff0…

qt布局嵌套_QDockWidget嵌套布局详解-实现Visual Studio布局

概述许多工程软件,如Qt Creator,VS,matlab等,都是使用dock布局窗口,这样用户可以自定义界面,自由组合窗口。Qt的嵌套布局由QDockWidget完成,用Qt Creator拖界面得到的dock布置形式比较固定&…

ios 贝塞尔曲线 颜色填充_iOS贝塞尔曲线(UIBezierPath)的基本使用方法

简介UIBezierPath是对Core Graphics框架的一个封装,使用UIBezierPath类我们可以画出圆形(弧线)或者多边形(比如:矩形)等形状,所以在画复杂图形的时候会经常用到。分析首先我们先看一下,UIBezierPath有哪些重要的属性:1…

html缩进快捷键_Windows IDEA 快捷键终极大全,果断收藏!

作者:JaJian出处:https://www.cnblogs.com/jajian/p/8012603.html话说IDEA对新手来说难,可能其中一个原因就是快捷键组合多而且复杂但是它也很全,基本所有功能都可以通过快捷键来完成,可以这么说,如果你掌握…