`
afareg
  • 浏览: 7920 次
  • 来自: ...
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

oracle 行变列函数

阅读更多
--该sql生成了一个名为list的函数。功能是将多行的数据记录转换成一行的记录,各数据用“参数的第一位字符隔开”分隔。
--使用样例:select ColumnToRow(','||Tname) from tab where rownum<10;

create or replace type list_agg as object
(
total varchar2(4000),

static function
ODCIAggregateInitialize(sctx IN OUT list_agg )
return number,

member function
ODCIAggregateIterate(self IN OUT list_agg ,
value IN varchar2 )
return number,

member function
ODCIAggregateTerminate(self IN list_agg,
returnValue OUT varchar2,
flags IN number)
return number,

member function
ODCIAggregateMerge(self IN OUT list_agg,
ctx2 IN list_agg)
return number
);
/

create or replace type body list_agg
is

static function ODCIAggregateInitialize(sctx IN OUT list_agg)
return number
is
begin
sctx := list_agg(null);
return ODCIConst.Success;
end;

member function ODCIAggregateIterate(self IN OUT list_agg,
value IN varchar2 )
return number
is
begin
self.total := self.total||value;
return ODCIConst.Success;
end;

member function ODCIAggregateTerminate(self IN list_agg,
returnValue OUT varchar2,
flags IN number)
return number
is
begin
returnValue := substr(self.total,2);
return ODCIConst.Success;
end;

member function ODCIAggregateMerge(self IN OUT list_agg,
ctx2 IN list_agg)
return number
is
begin
self.total := self.total||ctx2.total;
return ODCIConst.Success;
end;


end;

/

CREATE OR REPLACE FUNCTION ColumnToRow(input varchar2 )
RETURN varchar2
PARALLEL_ENABLE AGGREGATE USING list_agg;

/

select ColumnToRow(','||Tname) from tab where rownum<10;

select * from users;

分享到:
评论
1 楼 ryanofanny 2009-03-19  
晕。写那么多..还以为找到了,你那么多其实只要一句话就可以实现
select wmsys.wm_concat(Tname) from tab

相关推荐

    oracle行转列oracle行转列

    在Oracle数据库中,将行数据转换为列数据是一种...总结来说,Oracle中的行转列操作主要依赖于`DECODE`函数和`GROUP BY`子句,以及动态SQL技术,这些工具可以帮助我们更有效地管理和展示数据,满足复杂的数据分析需求。

    Oracle行转列之pivot

    例如,如果有一个员工表(emp),其中包含部门号(deptno)、职位(job)和薪水(sal),行转列操作可以通过聚合函数(如SUM)对每个部门和职位的薪水进行求和,并将每个部门的求和结果转换为独立的列。 PIVOT操作...

    oracle行转列较精典的解决方案

    ### Oracle行转列的经典解决方案 在Oracle数据库管理与开发过程中,经常会遇到需要将数据表中的行数据转换为列数据的情况,这种操作被称为“行转列”或者“行列转换”。行列转换是数据分析、报表生成等场景中非常...

    Oracle行转列(不定列)

    本篇文章将详细探讨Oracle如何实现行转列为列的过程,以及在面对不确定列数时的解决方案。 在传统的SQL查询中,数据通常是以行的形式存储和展示。然而,在某些场景下,我们可能需要将同一类别的数据从多行转换为一...

    oracle行转列聚合函数WMSYS.WM_CONCAT

    ### Oracle行转列聚合函数WMSYS.WM_CONCAT详解 #### 一、概述 在进行数据处理时,经常会遇到需要将多行数据合并为单行的情况,这通常被称为“行转列”。Oracle数据库提供了多种方法来实现这一需求,其中`WMSYS.WM_...

    oracle动态行转列

    本文将深入探讨如何通过Oracle中的存储过程实现动态“行转列”,并结合给定文件的信息,详细解析其工作原理、优点及应用场景。 ### 核心知识点:Oracle动态行转列 #### 1. 存储过程与动态SQL 存储过程是预编译的...

    Oracle行变列-存储过程

    Oracle数据库中的"行变列"技术是指将数据库中原本存储为多行的数据转换为单行的列式展示,这在数据分析、报表制作等场景中非常常见。存储过程是Oracle数据库中预编译的PL/SQL代码块,可以执行一系列复杂的数据库操作...

    oracle 行转列

    ### Oracle 行转列知识点详解 #### 一、Oracle 行转列概念及应用场景 在数据库操作中,经常需要对数据进行格式上的调整以便更好地分析或展示数据。其中,“行转列”是一种常见的数据处理方式,它指的是将原本存储...

    Oracle行转列

    Oracle行转列是指在Oracle数据库中将行数据转换为列数据或将列数据转换为行数据的操作。这种操作在实际应用中非常有用,例如,在数据报表、数据分析和数据挖掘等领域都需要使用行转列操作。 1. 列转行 列转行是指...

    Oracle中的分析函数详解

    5. FIRST_VALUE() / LAST_VALUE():返回指定列的第一个或最后一个值,无论在哪个行位置。 6. AVG() / SUM() / MAX() / MIN():这些聚合函数在分析上下文中也可以用作分析函数,返回每个分区的平均值、总和、最大值或...

    oracle实现行转列功能,并使用逗号进行隔开拼接,成为一条数据.pdf

    Oracle 实现行转列功能并使用逗号...使用 WM_CONCAT 函数或 LISTAGG 函数可以实现 Oracle 中的行转列功能,并使用逗号进行隔开拼接,成为一条数据。然而,需要注意 WM_CONCAT 函数已经被弃用,建议使用 LISTAGG 函数。

    ORACLE 列转行 DECODE函数用法

    DECODE函数在处理列转行的问题时,尤其适用于将多列数据合并到一行中,使得数据展示更加简洁明了。下面我们将详细讲解DECODE函数的使用方法以及如何在列转行操作中应用它。 DECODE函数的基本语法如下: ```sql ...

    oracle数据仓库分析函数汇总

    Oracle数据仓库分析函数是数据库查询和分析中的重要工具,尤其对于商业智能(BI)和数据仓库项目来说,它们能够提供深度的数据洞察。本资源“oracle数据仓库分析函数汇总”聚焦于Oracle数据库中的分析函数,尤其是与...

    ORACLE操作XML函数

    ### ORACLE操作XML函数 #### 一、XMLTYPE_instance与XPath_string 在Oracle数据库中,`XMLTYPE`是一种专门用于存储XML数据的数据类型。通过使用`XMLTYPE`字段,可以有效地管理和查询XML文档。其中,`XPath_string`...

    oracle的列转行函数

    SELECT TRIM(',' FROM SYS.STRAGG(A_NAME||NVL2(A_NAME,',','')))as nams FROM A_TEMP

    oracle分析函数,窗口函数,报表函数

    Oracle 分析函数、窗口函数和报表函数是数据库查询和数据分析中的关键工具,尤其在复杂的OLAP(在线分析处理)系统中发挥着重要作用。在Oracle数据库中,这些功能提供了对大量数据进行高效处理的能力,帮助用户生成...

Global site tag (gtag.js) - Google Analytics