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)
咖啡 咖啡厅,咖啡屋,咖啡店
生活 恬静的生活,安逸的生活
音乐 流行音乐,古典音乐
分享到:
相关推荐
虽然主要设计用于XML处理,但`XMLAGG()`也可用于字符串连接。它返回一个XML串,可以进一步转换为纯文本: ```sql SELECT EXTRACTVALUE(xmltype(XMLAGG(XMLELEMENT(e, column2, ',') ORDER BY column2)), '/row') ...
聚合函数用于对一组值进行计算,如COUNT(), SUM(), AVG(), MAX(), MIN()等,常用于GROUP BY语句中对分组数据进行统计分析。 以上就是Oracle日期函数、字符函数和部分聚合函数的详细介绍,理解并熟练运用这些函数...
Oracle数据库在处理多行记录合并、连接和聚合字符串时,有多种方法,下面将详细介绍其中的几种常见技术。 1. 被集合字段范围小且固定型 ...理解并掌握这些方法,有助于我们在实际工作中更有效地处理字符串聚合问题。
在Oracle数据库中,WM_CONCAT是一个非常实用的聚合函数,用于将一组字符串连接成一个单一的字符串,类似于SQL Server中的STRING_AGG或MySQL中的GROUP_CONCAT。然而,Oracle官方并没有提供这个函数,它是一个第三方...
5. 数据分组与聚合:GROUP BY和HAVING用于数据分组,聚合函数如COUNT(), SUM(), AVG(), MAX(), MIN()可对分组结果进行计算。 二、Oracle基本函数 1. 数学函数:如ABS()求绝对值,MOD()求余数,SQRT()求平方根。 2. ...
什么是合并多行字符串(连接字符串)呢,例如: SQL> desc test; Name Type Nullable Default Comments ——- ———— ——– ——- ——– COUNTRY VARCHAR2(20) Y CITY VARCHAR2(20) Y SQL> select * from test; ...
- **`LISTAGG()` 函数:** 这是Oracle 11g及以后版本引入的一个强大的聚合函数,专门用于将多行数据合并为单行字符串。它接受一个排序表达式和一个分隔符,返回所有行的合并结果。例如,假设我们有一个名为`orders`...
还有`CONCAT`用于连接多个字符串,以及`REPLACE`用于替换字符串中的指定字符。 3. **日期型函数**:处理日期和时间数据时,Oracle提供了一系列的日期函数,如`SYSDATE`返回当前系统日期,`ADD_MONTHS`用于添加月份...
LIKE和REGEXP_LIKE用于模式匹配,SUBSTR截取字符串,INSTR查找子串位置,CONCAT连接字符串,UPPER和LOWER转换大小写,REPLACE替换字符串中的特定字符。 4. **转换函数**: TO_NUMBER将字符串转换为数字,TO_CHAR...
`SUBSTR()`用于提取字符串的一部分,`INSTR()`用于查找子字符串在主字符串中的位置,而`UPPER()`和`LOWER()`则分别用于将字符串转换为大写或小写。 二、数学函数 Oracle提供了多种数学函数,如`ABS()`, `SQRT()`, `...
1. **GROUP BY子句**:用于将数据按照一个或多个列进行分组,通常与聚合函数(如COUNT、SUM、AVG、MAX、MIN)一起使用,以便对每个组进行统计计算。 2. **HAVING子句**:在GROUP BY之后过滤结果,与WHERE子句类似,...
5. CONCAT函数:用于连接两个或多个字符串,就像"||"操作符一样。 6. ASCII和CHR函数:ASCII函数返回字符的ASCII码值,而CHR函数根据ASCII码返回对应的字符。 7. INITCAP函数:将每个单词的首字母大写,其余字母...
LIKE在查询时用于模式匹配,INSTR返回子字符串在目标字符串中的位置,SUBSTR用于提取字符串的一部分,而UPPER和LOWER分别将文本转换为大写或小写。 3. **日期和时间函数**: SYSDATE、TO_DATE、ADD_MONTHS、...
当在SELECT语句中使用聚合函数时,出现在SELECT后面但不在聚合函数内的字段必须出现在GROUP BY子句中,以确保语句的合法性。此外,如果使用了GROUP BY子句,那么出现在HAVING子句中的条件也必须与GROUP BY中使用的...
在Oracle数据库系统中,内置函数分为多种类型,包括数值函数、字符串函数、日期时间函数、转换函数、数学函数、聚合函数等。下面将详细介绍这些函数类别及其常见用法。 1. **数值函数**: - `ABS()`:返回一个数的...
在Oracle数据库中,有时我们需要将多个字符串连接成一个单一的字符串,这在处理报告或聚合数据时非常常见。Oracle提供了一些内置的聚集函数,如`LISTAGG`,但它们可能无法满足所有需求,比如在特定场景下需要自定义...
- **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()`...
2. **字符串函数**:如CONCAT用于连接两个或更多字符串,SUBSTR用于提取字符串的一部分,INSTR用于查找子串在字符串中的位置,UPPER和LOWER则用于将文本转换为大写或小写。 3. **日期时间函数**:TO_DATE和TO_CHAR...