`
sbpya
  • 浏览: 618642 次
  • 性别: Icon_minigender_1
  • 来自: 杭州,长沙
社区版块
存档分类
最新评论

用一个实例讲解Oracle的自定义聚集函数

阅读更多
Oracle数据库的定制功能十分强大。Oracle不但允许用户定制自己的函数,还可以定制自己的聚集函数和分析函数。

本文将着重介绍使用自定义聚集函数建立一个字符串“sum”的示例:

 

SQL> CREATE OR REPLACE TYPE T_LINK AS OBJECT (

2 STR VARCHAR2(30000),

3 STATIC FUNCTION ODCIAGGREGATEINITIALIZE

(SCTX IN OUT T_LINK) RETURN NUMBER,

4 MEMBER FUNCTION ODCIAGGREGATEITERATE

(SELF IN OUT T_LINK, VALUE IN VARCHAR2) RETURN NUMBER,

5 MEMBER FUNCTION ODCIAGGREGATETERMINATE

(SELF IN T_LINK, RETURNVALUE OUT VARCHAR2, FLAGS IN NUMBE

R) RETURN NUMBER,

6 MEMBER FUNCTION ODCIAGGREGATEMERGE

(SELF IN OUT T_LINK, CTX2 IN T_LINK) RETURN NUMBER

7 )

8 /

类型已创建。

SQL> CREATE OR REPLACE TYPE BODY T_LINK IS

2 STATIC FUNCTION ODCIAGGREGATEINITIALIZE

(SCTX IN OUT T_LINK) RETURN NUMBER IS

3 BEGIN

4 SCTX := T_LINK(NULL);

5 RETURN ODCICONST.SUCCESS;

6 END;

7

8 MEMBER FUNCTION ODCIAGGREGATEITERATE

(SELF IN OUT T_LINK, VALUE IN VARCHAR2) RETURN NUMBER IS

9 BEGIN

10 SELF.STR := SELF.STR || VALUE;

11 RETURN ODCICONST.SUCCESS;

12 END;

13

14 MEMBER FUNCTION ODCIAGGREGATETERMINATE

(SELF IN T_LINK, RETURNVALUE OUT VARCHAR2, FLAGS IN NUMBE

R) RETURN NUMBER IS

15 BEGIN

16 RETURNVALUE := SELF.STR;

17 RETURN ODCICONST.SUCCESS;

18 END;

19

20 MEMBER FUNCTION ODCIAGGREGATEMERGE

(SELF IN OUT T_LINK, CTX2 IN T_LINK) RETURN NUMBER IS

21 BEGIN

22 NULL;

23 RETURN ODCICONST.SUCCESS;

24 END;

25 END;

26 /

类型主体已创建。

SQL> CREATE OR REPLACE FUNCTION F_LINK

(P_STR VARCHAR2) RETURN VARCHAR2

2 AGGREGATE USING T_LINK;

3 /

函数已创建。

SQL> CREATE TABLE TEST (ID NUMBER, NAME VARCHAR2(20));

表已创建。

SQL> INSERT INTO TEST VALUES (1, 'AAA');

已创建 1 行。

SQL> INSERT INTO TEST VALUES (2, 'BBB');

已创建 1 行。

SQL> INSERT INTO TEST VALUES (1, 'ABC');

已创建 1 行。

SQL> INSERT INTO TEST VALUES (3, 'CCC');

已创建 1 行。

SQL> INSERT INTO TEST VALUES (2, 'DDD');

已创建 1 行。

SQL> COMMIT;

提交完成。

SQL> COL NAME FORMAT A60

SQL> SELECT ID, F_LINK(NAME) NAME FROM TEST GROUP BY ID;

ID NAME

---------- ------------------------------------------------------

1 AAAABC

2 BBBDDD

3 CCC

分享到:
评论

相关推荐

    Oracle自定义聚集函数使用

    为了更具体地理解自定义聚集函数的实现,我们可以通过一个具体的例子来说明——创建一个用于处理权限位运算(如bitand)的聚集函数。首先,我们需要定义一个类型`permission_bitand`,其中包含上述四个关键的聚集...

    SqlServer自定义多参数聚合函数实例代码

    例如,你可以创建一个函数计算两个字段的乘积平均值。 `ClrAggregates.sln`是一个Visual Studio解决方案文件,它包含了整个项目的配置和引用信息。打开这个文件,我们可以看到项目的结构和依赖关系。通常,这个解决...

    Oracle经典自定义创建函数和存储过程

    自定义函数不能被直接在Java中调用,可以通过存储过程调用函数的方法。本文采用实例的方法,介绍如何在Oracle数据库客户端PL/SQL中创建自定义函数,然后创建相应的存储过程调用该函数,最终实现一个实例计算。

    一个oracle 用户下创建多个oracle 实例

    在一个 Oracle 用户下创建多个实例是指在同一个操作系统用户下面创建多个 Oracle 实例,每个实例都有其自己的参数文件、控制文件、归档路径和数据文件等。下面将详细介绍如何在一个 Oracle 用户下创建多个实例,包括...

    oracle删除和重建实例

    删除 Oracle 实例是一个复杂的过程,需要遵循一定的步骤,以免出现意外错误。下面是删除 Oracle 实例的步骤: 1. 删除实例记录:可以使用 dbca 工具或手动删除实例记录。使用 dbca 工具需要从图形界面运行 dbca,...

    鸿蒙+自定义组件+实例代码

    鸿蒙自定义组件实例鸿蒙自定义组件实例鸿蒙自定义组件实例鸿蒙自定义组件实例鸿蒙自定义组件实例鸿蒙自定义组件实例鸿蒙自定义组件实例鸿蒙自定义组件实例鸿蒙自定义组件实例鸿蒙自定义组件实例鸿蒙自定义组件实例...

    [回调函数讲解及应用实例]回调函数讲解及应用实例

    回调函数回调函数讲解及应用实例回调函数讲解及应用实例回调函数讲解及应用实例回调函数讲解及应用实例回调函数讲解及应用实例回调函数讲解及应用实例回调函数讲解及应用实例回调函数讲解及应用实例回调函数讲解及...

    oracle plsql开发代码实例讲解

    oracle plsql 代码入门到精通实例演示讲解,plsql编程入门教程

    Oracle 单一主机多个实例多个监听器配置

    在案例中给出的部分内容展示了如何在`SID_LIST_LISTENER`部分定义多个`SID_DESC`条目,每个条目对应一个实例的描述,包括实例名称、Oracle Home路径和实例的SID名称。 #### 结论 在Oracle单一主机上配置多个实例和...

    自定义EL函数

    在自定义EL函数时,我们需要创建一个TLD文件来声明我们的函数。 创建自定义EL函数的第一步是编写Java类,这个类将包含我们要暴露给EL的函数。例如,我们可以创建一个名为`Utils`的类,并在其中定义一个名为`...

    linux下oracle安装两个实例一个监听的配置

    在Linux环境下配置Oracle数据库时,有时我们需要在同一台服务器上安装多个Oracle实例,并通过一个监听器进行管理。这种配置可以提高资源利用率并简化网络管理。本文将详细介绍如何在Linux下为两个Oracle实例配置一个...

    linux下oracle手动建实例

    3. **SID (System Identifier)**:每个Oracle实例都有一个唯一的SID来标识它。 4. **数据库认证方式**:常见的认证方式包括密码文件认证、操作系统认证等。 5. **脚本编写**:创建数据库及执行数据库管理任务通常...

    [分享]不得不看的上百个vba“自定义函数”

    例如,我们可以创建一个函数,接受一个搜索字符串和一个数据范围,返回包含搜索字符串的所有单元格的引用。这样,除了Excel内置的查找功能,我们还能通过VBA自定义函数实现更灵活的搜索需求。 总结,VBA自定义函数...

    linux服务器上创建第二个ORACLE实例

    原创:在linux 服务器上创建第二个ORACLE数据的实例,手工启动或开机自启动的设置。

    一个oracle 用户下面创建多个实例

    本文将详细介绍如何在一个Oracle用户下创建多个Oracle实例,并提供了一个具体的实例创建过程。 #### 环境介绍 **系统**: RHEL 5.4 **Oracle版本**: 10.2.0.1 **原实例信息**: - **用户**: oracle - **Oracle ...

    【Python语法实例】-11自定义函数

    【Python语法实例】-11自定义函数

    oracle修改实例名

    实例名(也称作SID,即系统标识符)是数据库安装后在操作系统中唯一标识一个Oracle实例的名称。在Oracle数据库的管理中,正确地修改实例名是数据库维护的关键步骤之一,特别是在迁移或者整合数据库时。 修改Oracle...

    Excel-VBA宏编程实例源代码-快速输入月份名称的自定义数组函数.zip

    总之,这个实例提供了一个很好的学习VBA宏编程的机会,特别是关于自定义数组函数的使用,对于经常处理大量日期数据的用户来说,是提高效率的好工具。通过深入理解并实践此类代码,可以提升Excel办公自动化的能力。

    大牛出手Oracle SQL优化实例讲解

    1.Oracle如何得到一个很大的表 2.loop insert 实例 3.autotrace验证索引的性能到底有多大? 4.EXPLAIN验证SQL是否走索引 5.结合autotrace创建并验证函数索引 6.sql trace分析工具--TKPROF详细讲解 7.V$SQL视图详解加...

    Excel函数大全【实例讲解】.xls

    excle 函数学习资源,文档中包含了常用的excel函数的使用详解,供大家参考。是一组常用Excel函数公式的用法,学会这些套路,让工作效率再高一丢丢。

Global site tag (gtag.js) - Google Analytics