栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在VARCHAR2 Oracle 10g中使用COLLECT

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在VARCHAR2 Oracle 10g中使用COLLECT

该收集功能创建一个嵌套表,你的情况的字符串,你会再转换为特定类型的表-
也就是定义为VARCHAR2的表型。您不能将其转换为单个字符串。

有一些众所周知的字符串聚合技术列表,例如清单1。有一个使用collect的函数,但是您仍然需要表类型和一个函数来将生成的表转换为定界字符串。

逐字复制该示例:

CREATE OR REPLACe TYPE t_varchar2_tab AS TABLE OF VARCHAr2(4000);/CREATE OR REPLACE FUNCTION tab_to_string (p_varchar2_tab  IN  t_varchar2_tab,         p_delimiter     IN  VARCHAR2 DEFAULT ',') RETURN VARCHAR2 IS  l_string     VARCHAr2(32767);BEGIN  FOR i IN p_varchar2_tab.FIRST .. p_varchar2_tab.LAST LOOP    IF i != p_varchar2_tab.FIRST THEN      l_string := l_string || p_delimiter;    END IF;    l_string := l_string || p_varchar2_tab(i);  END LOOP;  RETURN l_string;END tab_to_string;/

使用该类型和功能,您可以执行以下操作:

SELECT tab_to_string(CAST(COLLECT(DISTINCT lot) AS t_varchar2_tab)) AS lot FROM ...

有趣的是,collect的10g版本不支持

DISTINCT
;它不会抱怨(!?),但是会重复。

您可以通过set函数传递集合以删除重复项:

SELECt tab_to_string(SET(CAST(COLLECT(DISTINCT lot) AS t_varchar2_tab))) AS lot FROM ...

快速演示在10.2.0.5中运行:

create table table1(order_no number, lot varchar2(10));insert into table1 values (590288, '2016538');insert into table1 values (590288, '2016535');insert into table1 values (590288, '6016535');insert into table1 values (590288, '2016535');insert into table1 values (590288, '2016538');SELECt order_no, tab_to_string(SET(CAST(COLLECT(DISTINCT lot) AS t_varchar2_tab))) AS LOTFROM table1 WHERe order_no = 590288 GROUP BY order_no;  ORDER_NO LOT  ---------- --------------------------------------------------    590288 2016538,2016535,6016535


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/420000.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号