`
wattone
  • 浏览: 40514 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

ORACLE字符串的连接聚合函数可用于group by

 
阅读更多
1.新建type strcat_type

-- 定义类型 聚合函数的实质就是一个对象  
create or replace type strcat_type as object (  
    cat_string varchar2(4000),  
    --对象初始化  
    static function ODCIAggregateInitialize(cs_ctx In Out strcat_type)  
        return number,  
        --聚合函数的迭代方法(这是最重要的方法)  
    member function ODCIAggregateIterate(self In Out strcat_type,value in varchar2)  
        return number,  
        --当查询语句并行运行时,才会使用该方法,可将多个并行运行的查询结果聚合  
    member function ODCIAggregateMerge(self In Out strcat_type,ctx2 In Out strcat_type)  
        return number,  
        --终止聚集函数的处理,返回聚集函数处理的结果  
    member function ODCIAggregateTerminate(self In Out strcat_type,returnValue Out varchar2,flags in number)  
        return number  
)

2.建立type body strcat_type
create or replace type body strcat_type is 
  static function ODCIAggregateInitialize(cs_ctx IN OUT strcat_type) return number  
  is 
  begin 
      cs_ctx := strcat_type( null );  
      return ODCIConst.Success;  
  end;  
  member function ODCIAggregateIterate(self IN OUT strcat_type,  
                                      value IN varchar2 )  
  return number  
  is 
  begin 
        /*字符串已','分割 */  
      self.cat_string := self.cat_string || ','|| value;  
      return ODCIConst.Success;  
  end;  
  member function ODCIAggregateTerminate(self IN Out strcat_type,  
                                        returnValue OUT varchar2,  
                                        flags IN number)  
  return number  
  is 
  begin
        /*去除空(is null)*/  
      returnValue := ltrim(rtrim(self.cat_string,','),',');  
      return ODCIConst.Success;  
  end;  
  member function ODCIAggregateMerge(self IN OUT strcat_type,  
                                    ctx2 IN Out strcat_type)  
  return number  
  is 
  begin 
      self.cat_string := self.cat_string || ',' || ctx2.cat_string;  
      return ODCIConst.Success;  
  end;
end;

3.建立函数func_strcat

CREATE OR REPLACE FUNCTION func_strcat(input varchar2)  
RETURN varchar2 -- 返回值  
PARALLEL_ENABLE AGGREGATE USING strcat_type; --使平行累加

------以上函数的建立摘自网络--------
4.结果
select * from t_test t;

id      keyword synonyms
1 咖啡 咖啡厅
2 咖啡 咖啡屋
3 咖啡 咖啡店
4 音乐 流行音乐
5 音乐 古典音乐
6 生活 恬静的生活
7 生活 安逸的生活
_________________________________________
select  t.keyword,func_strcat(t.synonyms)
from t_test t group by t.keyword;

keyword func_strcat(t.synonyms)
咖啡 咖啡厅,咖啡屋,咖啡店
生活 恬静的生活,安逸的生活
音乐 流行音乐,古典音乐
分享到:
评论

相关推荐

    Oracle字段转字符串/多行记录合并/连接/聚合字符串的几种方法

    虽然主要设计用于XML处理,但`XMLAGG()`也可用于字符串连接。它返回一个XML串,可以进一步转换为纯文本: ```sql SELECT EXTRACTVALUE(xmltype(XMLAGG(XMLELEMENT(e, column2, ',') ORDER BY column2)), '/row') ...

    oracle日期函数字符函数聚合函数

    聚合函数用于对一组值进行计算,如COUNT(), SUM(), AVG(), MAX(), MIN()等,常用于GROUP BY语句中对分组数据进行统计分析。 以上就是Oracle日期函数、字符函数和部分聚合函数的详细介绍,理解并熟练运用这些函数...

    Oracle 多行记录合并_连接_聚合字符串的几种方法_oracle_脚本之家1

    Oracle数据库在处理多行记录合并、连接和聚合字符串时,有多种方法,下面将详细介绍其中的几种常见技术。 1. 被集合字段范围小且固定型 ...理解并掌握这些方法,有助于我们在实际工作中更有效地处理字符串聚合问题。

    解决Oracle没有WM_CONCAT函数.zip

    在Oracle数据库中,WM_CONCAT是一个非常实用的聚合函数,用于将一组字符串连接成一个单一的字符串,类似于SQL Server中的STRING_AGG或MySQL中的GROUP_CONCAT。然而,Oracle官方并没有提供这个函数,它是一个第三方...

    Oracle基本语句和基本函数

    5. 数据分组与聚合:GROUP BY和HAVING用于数据分组,聚合函数如COUNT(), SUM(), AVG(), MAX(), MIN()可对分组结果进行计算。 二、Oracle基本函数 1. 数学函数:如ABS()求绝对值,MOD()求余数,SQRT()求平方根。 2. ...

    Oracle 多行记录合并/连接/聚合字符串的几种方法

    什么是合并多行字符串(连接字符串)呢,例如: SQL> desc test; Name Type Nullable Default Comments ——- ———— ——– ——- ——– COUNTRY VARCHAR2(20) Y CITY VARCHAR2(20) Y SQL> select * from test; ...

    Oracle多行记录合并

    - **`LISTAGG()` 函数:** 这是Oracle 11g及以后版本引入的一个强大的聚合函数,专门用于将多行数据合并为单行字符串。它接受一个排序表达式和一个分隔符,返回所有行的合并结果。例如,假设我们有一个名为`orders`...

    oracle常用函数chm版

    还有`CONCAT`用于连接多个字符串,以及`REPLACE`用于替换字符串中的指定字符。 3. **日期型函数**:处理日期和时间数据时,Oracle提供了一系列的日期函数,如`SYSDATE`返回当前系统日期,`ADD_MONTHS`用于添加月份...

    oracle函数大全中文api文档

    LIKE和REGEXP_LIKE用于模式匹配,SUBSTR截取字符串,INSTR查找子串位置,CONCAT连接字符串,UPPER和LOWER转换大小写,REPLACE替换字符串中的特定字符。 4. **转换函数**: TO_NUMBER将字符串转换为数字,TO_CHAR...

    oracle日常函数文档

    `SUBSTR()`用于提取字符串的一部分,`INSTR()`用于查找子字符串在主字符串中的位置,而`UPPER()`和`LOWER()`则分别用于将字符串转换为大写或小写。 二、数学函数 Oracle提供了多种数学函数,如`ABS()`, `SQRT()`, `...

    oracle函数和分组

    1. **GROUP BY子句**:用于将数据按照一个或多个列进行分组,通常与聚合函数(如COUNT、SUM、AVG、MAX、MIN)一起使用,以便对每个组进行统计计算。 2. **HAVING子句**:在GROUP BY之后过滤结果,与WHERE子句类似,...

    Oracle函数列表速查

    5. CONCAT函数:用于连接两个或多个字符串,就像"||"操作符一样。 6. ASCII和CHR函数:ASCII函数返回字符的ASCII码值,而CHR函数根据ASCII码返回对应的字符。 7. INITCAP函数:将每个单词的首字母大写,其余字母...

    oracle函数大全(分类显示).zip_Oracle 函数分类_oracle_oracle函数分类_oracle函数查阅用文档

    LIKE在查询时用于模式匹配,INSTR返回子字符串在目标字符串中的位置,SUBSTR用于提取字符串的一部分,而UPPER和LOWER分别将文本转换为大写或小写。 3. **日期和时间函数**: SYSDATE、TO_DATE、ADD_MONTHS、...

    第三章 Oracle常用函数.pdf

    当在SELECT语句中使用聚合函数时,出现在SELECT后面但不在聚合函数内的字段必须出现在GROUP BY子句中,以确保语句的合法性。此外,如果使用了GROUP BY子句,那么出现在HAVING子句中的条件也必须与GROUP BY中使用的...

    oracle sql内置函数大全

    在Oracle数据库系统中,内置函数分为多种类型,包括数值函数、字符串函数、日期时间函数、转换函数、数学函数、聚合函数等。下面将详细介绍这些函数类别及其常见用法。 1. **数值函数**: - `ABS()`:返回一个数的...

    聚集函数(自定义分隔符拼接字符串)

    在Oracle数据库中,有时我们需要将多个字符串连接成一个单一的字符串,这在处理报告或聚合数据时非常常见。Oracle提供了一些内置的聚集函数,如`LISTAGG`,但它们可能无法满足所有需求,比如在特定场景下需要自定义...

    ORACLE单行函数和组函数

    - **CONCAT()**: 连接两个字符串。 ```sql SELECT CONCAT('slobo', 'Svoboda') AS username FROM dual; ``` - **INITCAP()**: 将字符串中的每个单词首字母大写。 ```sql SELECT INITCAP('veni, vedi, vici') ...

    存储过程拼接字符串

    `STRING_AGG()`函数用于聚合和连接一系列字符串,通常在处理分组数据时很有用。 ```sql SELECT STRING_AGG(ColName, ', ') AS ConcatenatedValues FROM TableName ``` 二、MySQL中的字符串拼接 1. 使用`CONCAT()`...

    oracle 函数文档

    2. **字符串函数**:如CONCAT用于连接两个或更多字符串,SUBSTR用于提取字符串的一部分,INSTR用于查找子串在字符串中的位置,UPPER和LOWER则用于将文本转换为大写或小写。 3. **日期时间函数**:TO_DATE和TO_CHAR...

Global site tag (gtag.js) - Google Analytics