您当前的位置: AG亚游集团 > 数据库教程 > Oracle教程 > 关于oracle字符串汇总

关于oracle字符串汇总

作者:不详 来源:网络 发布时间: 2014-09-01 11:48 点击: 次
使用的代码 代码如下 -- sample data drop table t_collect purge; create table t_collect as select mod(rownum,30) as flag, lpad(dbms_random.string('l',3),4,' ') as val from dual connect by rownum=10000; collect函数(Oracle10g) -- 1: use collect funtion

AG亚游集团,  据说这位田绍龙高中学历,成立六宝基金之前在北京郊区靠为超市送办公用纸为生,后来机缘巧合遇到霍文芳,在他的指点下成立了六宝基金,从而改变命运。

  英媒表示,与此同时,中国也在加速扩展其刚起步的无人机计划。去年年底,中国宣布试飞一架国产无人机,中国官媒《中国日报》表示,“将会测试关键的技术”。加拿大《汉和防务评论》指出,中国可能正研制出一款能抵达关岛进行侦察的无人机,而关岛正是美国构建“重返亚太”战略的关键点之一。2012年,美国五角大楼报告确认了一则为时已久的传言:中国正在研制新一代隐形无人机“暗剑”,该无人机的作战能力将超过美军舰队的无人机。有什么好的发展项目  许勤:我们在互联网中已经有过成功的VC案例,我们是SOHU.COM第一轮最大的机构投资者,也一度是它最大的投资者,搜狐是一个很优秀的公司,我们很有幸在它早期的发展阶段扮演一个重要的角色。

关于oracle字符串汇总

  使用的代码

  代码如下

  -- sample data

  drop table t_collect purge;

  create table t_collect as

  select mod(rownum,30) as flag, lpad(dbms_random.string('l',3),4,' ') as val

  from dual connect by rownum<=10000;

  collect函数(Oracle10g)

  -- 1: use collect funtion

  select flag,

      my_tk.f_list2str(cast(collect(trim(val)) as my_tk_str_tab_type)) as ename

  from t_collect sample(10)

  group by flag

  order by 1;

  sys_connect_by_path

  -- 2: use sys_connect_by_path and row_number function

  select t1.flag, substr(max(sys_connect_by_path(t1.val, ',')), 2) q

  from (select a.flag,

              trim(a.val) as val,

              row_number() over(partition by a.flag order by a.val) rn

         from t_collect sample(10) a) t1

  start with t1.rn = 1

  connect by t1.flag = prior t1.flag

      and t1.rn - 1 = prior t1.rn

  group by t1.flag

  order by 1;

  user-defined-function

  -- 3: use user-defined-function

  select flag,

      string_agg(trim(val)) as ename

  from t_collect sample(10)

  group by flag

  order by 1;

  辅助用的my_tk包代码片段

  代码如下

  create or replace type my_tk_str_tab_type is table of varchar2(100);

  ---------------------------------------------------------------------

  function f_list2str

  (

  p_list   my_tk_str_tab_type,

  p_separator varchar2 default ',',

  p_sort   integer default 1

  ) return varchar2 is

  l_idx pls_integer := 0;

  l_str varchar2(32767) := null;

  l_spt varchar2(10) := null;

  l_list my_tk_str_tab_type := p_list;

  begin

  if p_sort = 1 then

     l_list := f_sort_list(p_list);

  end if;

  l_idx := l_list.first;

  while l_idx is not null loop

     l_str := l_str || l_spt || l_list(l_idx);

     l_spt := p_separator;

     l_idx := l_list.next(l_idx);

  end loop;

  return l_str;

  end;

  自定义聚合函数

  ------------------------------------------------------------------

  代码如下

  -- user-defined-function

  CREATE OR REPLACE TYPE t_string_agg AS OBJECT

  (

  g_string VARCHAR2(32767),

  STATIC FUNCTION ODCIAggregateInitialize(sctx IN OUT t_string_agg)

  RETURN NUMBER,

  MEMBER FUNCTION ODCIAggregateIterate(self IN OUT t_string_agg,

                                      value IN   VARCHAR2 )

    RETURN NUMBER,

  MEMBER FUNCTION ODCIAggregateTerminate(self      IN t_string_agg,

                                        returnValue OUT VARCHAR2,

                                        flags     IN NUMBER)

  RETURN NUMBER,

  MEMBER FUNCTION ODCIAggregateMerge(self IN OUT t_string_agg,

                                    ctx2 IN   t_string_agg)

  RETURN NUMBER

  );

  /

  CREATE OR REPLACE TYPE BODY t_string_agg IS

  STATIC FUNCTION ODCIAggregateInitialize(sctx IN OUT t_string_agg)

  RETURN NUMBER IS

  BEGIN

  sctx := t_string_agg(NULL);

  RETURN ODCIConst.Success;

  END;

  MEMBER FUNCTION ODCIAggregateIterate(self IN OUT t_string_agg,

                                      value IN   VARCHAR2 )

  RETURN NUMBER IS

  BEGIN

  SELF.g_string := self.g_string || ',' || value;

  RETURN ODCIConst.Success;

  END;

  MEMBER FUNCTION ODCIAggregateTerminate(self      IN t_string_agg,

                                        returnValue OUT VARCHAR2,

                                        flags     IN NUMBER)

  RETURN NUMBER IS

  BEGIN

  returnValue := RTRIM(LTRIM(SELF.g_string, ','), ',');

  RETURN ODCIConst.Success;

  END;

  MEMBER FUNCTION ODCIAggregateMerge(self IN OUT t_string_agg,

                                    ctx2 IN   t_string_agg)

  RETURN NUMBER IS

  BEGIN

  SELF.g_string := SELF.g_string || ',' || ctx2.g_string;

  RETURN ODCIConst.Success;

  END;

  END;

  /

  CREATE OR REPLACE FUNCTION string_agg (p_input VARCHAR2)

  RETURN VARCHAR2

  PARALLEL_ENABLE AGGREGATE USING t_string_agg;

  /

  最后给个参考表

  在数据量10000的表上进行三种方法的测试,运行时间单位秒

  数据量PCT Collect   SYS_Connect    UDF

        1%         0.017          0.018         0.017

        10%      0.026         0.050         0.029

        50%       0.057           2.45          0.065

       100%      0.090          5.00           1.06
分享到:
本文"关于oracle字符串汇总"由远航站长收集整理而来,仅供大家学习与参考使用。更多AG亚游集团尽在远航站长站。
顶一下
(0)
0%
踩一下
(0)
0%
[点击 次] [返回上一页] [打印]
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
关于本站 - 联系我们 - 广告合作 - 网站声明 - 友情连接- 网站地图 - 站点地图 - 返回顶部
Copyright © 2007-2013 www.yhzhan.com(AG亚游集团). All Rights Reserved .
远航站长:为中小站长提供最佳的学习与交流平台,提供网页制作与网站编程等各类AG亚游集团.
官方QQ:445490277 网站群:26680406 网站备案号:豫ICP备07500620号-4
U18男篮慰问特殊学校儿童 上一趟有趣的篮球课 金正恩祭扫志愿军烈士陵园 在毛岸英墓前肃立默哀 中国将建156颗卫星天基互联网 WiFi信号覆盖全球 斯里兰卡进紧急状态 中使馆:中国公民勿外出逗留 备案审查为何未行使过撤销权?法工委副主任回应 第4座城立牌招募詹姆斯!40年无冠饥荒只能靠他 安徽回应“征迁宣传车半夜扰民”:已批评教育 千亿市场或迎升级 多部委释放电子政务政策红利 日本央行让人参不透 贝莱德和Vanguard各持己见 巴菲特公司因美税改法案受益 年度净利润创纪录 美国国会完成通俄门调查:普京没有助选特朗普 英媒:中国将参与新的红海角逐 在中东打造桥头堡
国元期货简一交易05.18交易策略 Facebook回应在中国成立子公司:为当地人才提供支… 前骑士GM建议马刺今夏追詹姆斯 这样能留少主? 两传奇给AC米兰新星门将打气:犯错很正常 他才19 依田纪基:婚姻的不幸源于我愚蠢的浪费行为 韩官员:美方表明驻韩美军规模和性质将不变 夫妻俩强行闯关 掌掴交警称“打的就是你”被拘 特朗普总爱威胁“不满意就退群” 这次却变了(图) 狂热粉丝追星添“机闹”隐患 民航“黑名单”难产 一场朴实的胜利 莫里纳利夺冠意料之外情理之中 即使你拥有梅西 胜利有时候也是那么遥远 我国南极考察完成史上最长海上断面观测:1420公里
人民网腾讯歌华有线将成立合资公司 发力直播短视频 高通并购恩智浦进入最后关卡 产业竞逐战却刚刚开始 奇牛国际:美联储官员众说纷纭 对于加息问题论调不一 柯文哲称两岸一家亲 “独派”反对其连任台北市长 京东增资安联财险获批 保险“棋局”落下重要一子 A股174家上市公司董事长为女性 手握2.1万亿市值 自助餐厅要求交浪费保证金 剩餐超200克不退 虚拟偶像分羹千亿二次元市场 入局者何止腾讯 收官!周琦创俩生涯新高 优劣明显他仍需努力 白手起家怎样创业 怎么样白手起家 如何利用微信挣钱 适合农村办厂的项目 AG亚游集团