oracle 数据库单子段多条记录合并一条记录函数
2014-01-25 23:11
453 查看
---- ================================================================
-- 1. 创建oracle TYPE
-- ================================================================
CREATE OR REPLACE TYPE COLUMNSTRCAT as object
(
str VARCHAR2(4000),
static function ODCIAggregateInitialize(sctx IN OUT ColumnStrCat) return number,
member function ODCIAggregateIterate(self IN OUT ColumnStrCat, value IN VARCHAR2) return number,
member function ODCIAggregateTerminate(self IN ColumnStrCat, returnValue OUT VARCHAR2, flags IN number) return number,
member function ODCIAggregateMerge(self IN OUT ColumnStrCat,ctx2 IN ColumnStrCat) return number
);
-- ================================================================
-- 2. 创建 oracle TYPE BODIES
-- ================================================================
CREATE OR REPLACE TYPE BODY COLUMNSTRCAT is
-- Member procedures and functions
static function ODCIAggregateInitialize(sctx IN OUT ColumnStrCat)
return number
is
begin
sctx := ColumnStrCat('');
return ODCIConst.Success;
end;
member function ODCIAggregateIterate(self IN OUT ColumnStrCat, value IN varchar2) return number is
counter integer;
begin
self.str := self.str||value||',';
return ODCIConst.Success;
end;
member function ODCIAggregateTerminate(self IN ColumnStrCat, returnValue OUT varchar2, flags IN number) return number is
begin
returnValue := substr(self.str,1,length(self.str)-1);
return ODCIConst.Success;
end;
member function ODCIAggregateMerge(self IN OUT ColumnStrCat, ctx2 IN ColumnStrCat) return number is
begin
self.str := self.str||ctx2.str;
return ODCIConst.Success;
end;
end;
-- -- ================================================================
-- 3. 创建 oracle function
-- -- ================================================================
CREATE OR REPLACE FUNCTION COLUMNSTRJOIN (input varchar2) RETURN varchar2
PARALLEL_ENABLE AGGREGATE USING ColumnStrCat;
-- -- ================================================================
-- 4. 使用示例
-- -- ================================================================
select COLUMNSTRJOIN(a.name) from table_name a where a.type > 1
-- 1. 创建oracle TYPE
-- ================================================================
CREATE OR REPLACE TYPE COLUMNSTRCAT as object
(
str VARCHAR2(4000),
static function ODCIAggregateInitialize(sctx IN OUT ColumnStrCat) return number,
member function ODCIAggregateIterate(self IN OUT ColumnStrCat, value IN VARCHAR2) return number,
member function ODCIAggregateTerminate(self IN ColumnStrCat, returnValue OUT VARCHAR2, flags IN number) return number,
member function ODCIAggregateMerge(self IN OUT ColumnStrCat,ctx2 IN ColumnStrCat) return number
);
-- ================================================================
-- 2. 创建 oracle TYPE BODIES
-- ================================================================
CREATE OR REPLACE TYPE BODY COLUMNSTRCAT is
-- Member procedures and functions
static function ODCIAggregateInitialize(sctx IN OUT ColumnStrCat)
return number
is
begin
sctx := ColumnStrCat('');
return ODCIConst.Success;
end;
member function ODCIAggregateIterate(self IN OUT ColumnStrCat, value IN varchar2) return number is
counter integer;
begin
self.str := self.str||value||',';
return ODCIConst.Success;
end;
member function ODCIAggregateTerminate(self IN ColumnStrCat, returnValue OUT varchar2, flags IN number) return number is
begin
returnValue := substr(self.str,1,length(self.str)-1);
return ODCIConst.Success;
end;
member function ODCIAggregateMerge(self IN OUT ColumnStrCat, ctx2 IN ColumnStrCat) return number is
begin
self.str := self.str||ctx2.str;
return ODCIConst.Success;
end;
end;
-- -- ================================================================
-- 3. 创建 oracle function
-- -- ================================================================
CREATE OR REPLACE FUNCTION COLUMNSTRJOIN (input varchar2) RETURN varchar2
PARALLEL_ENABLE AGGREGATE USING ColumnStrCat;
-- -- ================================================================
-- 4. 使用示例
-- -- ================================================================
select COLUMNSTRJOIN(a.name) from table_name a where a.type > 1
相关文章推荐
- Oracle中将一条记录(某字段中为合并的信息)拆分成多条记录
- 数据库中多条记录有相同数据,可以用函数筛选只查询相同记录中的一条
- MYSQL#将多条无关的数据库记录合并成一条记录,并取值
- 利用数据库表转置将多条记录合并成一条记录
- 多条记录变成一条记录 合并列值
- 用一条SQL语句实现向数据库中插入多条记录的方法
- 多条记录合并一条返回string,非clob
- Oracle 利用lead、lag函数查询已有记录的下一条、上一条记录
- Mysql之一对多查询,如何将多条记录合并成一条记录
- MySQL数据库将多条记录的单个字段合并成一条记录
- MySQL数据库将多条记录的单个字段合并成一条记录
- oracle 一个表里有多条记录引用另一个表的主键 并获取此表的最后一条记录
- SQL 合并多条记录为一条
- Oracle分析函数系列之first_value/last_value:在记录集中查找第一条记录和最后一条记录
- Oracle获取上一条记录或上一条记录函数
- oracle合并多条数据为一条 wmsys.wm_concat
- Oracle多行记录合并自定义函数
- SQLSERVER中合并多条记录为一条
- mysql多条记录判断相加减合并一条