数据块损坏后修复 ORA-01578

php中文网
发布: 2016-06-07 17:31:49
原创
1538人浏览过

在oracle数据库中,进行字段合并,可以使用wm_concat(column)函数,但是在这种方法不被Oracle所推荐,因为WMSYS用户用于Workspac

在oracle数据库中,进行字段合并,可以使用wm_concat(column)函数,但是在这种方法不被oracle所推荐,因为wmsys用户用于workspace manager,其函数对象可能因版本而不同而出现异常,这种变化在11.2.0.3及10.2.0.5中体现出来。原本wm_concat函数返回值为varchar2,但在一些版本下就会变更为clob。这一变化导致了很多程序的异常。

Oracle建议用户使用自定义函数来实现该功能,而不是使用WorkSpace的这个内部函数。这个函数包含一个Type、Type Body、Function,可以参考Oracle的实现方式来实现这个函数。

下面分别介绍oracle中wm_concat(column)函数的使用和多行记录合并自定义函数 zh_concat

一、oracle中wm_concat(column)函数的使用

t_student表:

SNAME        SDREE        SAGE        SEX

李坤        天融信        26        男

曹贵生        中银        26        男

柳波        买卖宝        27        男

纪争光        IBM        23        女

李学宇        微软        25        女

李雪琪        文思        25        女

陈绪        中海油        26        男

韩正阳        中海油        24        男

陈伟东        中核        24        男

刘兵        优酷        24        男

丁成云        联想        25        女

王鹏        中兴        25        男

 

想要的结果为:

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

男        李坤,曹贵生,柳波,陈伟东,韩正阳,陈绪,刘兵,王鹏

女        纪争光,李学宇,丁成云,李雪琪

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

SQL语句为:

select t.sex,wmsys.wm_concat(t.sname)from t_student tgroup by t.sex

二、自定义函数zh_concat(从网上摘,直接可用)

wm_concat出现在oracle10g版本中,不仅是加密的,而且是在一个单独的用户中,不方便使用。并且10g以前的版本也用不上。经过破解移植,可以方便大家使用

将下边的一个type,,一个函数的创建脚本执行,就可以构建自己的wm_concat(这里叫zh_concat)。使用方法同wm_concat:

type:

 

create or replace TYPE zh_concat_im

AUTHID CURRENT_USER AS OBJECT

(

  CURR_STR VARCHAR2(32767),

  STATIC FUNCTION ODCIAGGREGATEINITIALIZE(SCTX IN OUT zh_concat_im) RETURN NUMBER,

  MEMBER FUNCTION ODCIAGGREGATEITERATE(SELF IN OUT zh_concat_im,

              P1 IN VARCHAR2) RETURN NUMBER,

  MEMBER FUNCTION ODCIAGGREGATETERMINATE(SELF IN zh_concat_im,

                                RETURNVALUE OUT VARCHAR2,

                                FLAGS IN NUMBER)

                    RETURN NUMBER,

  MEMBER FUNCTION ODCIAGGREGATEMERGE(SELF IN OUT zh_concat_im,

                    SCTX2 IN  zh_concat_im) RETURN NUMBER

);

/

 

create or replace TYPE BODY zh_concat_im

IS

寻鲸AI
寻鲸AI

寻鲸AI是一款功能强大的人工智能写作工具,支持对话提问、内置多场景写作模板如写作辅助类、营销推广类等,更能一键写作各类策划方案。

寻鲸AI 68
查看详情 寻鲸AI

  STATIC FUNCTION ODCIAGGREGATEINITIALIZE(SCTX IN OUT zh_concat_im)

  RETURN NUMBER

  IS

  BEGIN

    SCTX := zh_concat_im(NULL) ;

    RETURN ODCICONST.SUCCESS;

  END;

  MEMBER FUNCTION ODCIAGGREGATEITERATE(SELF IN OUT zh_concat_im,

          P1 IN VARCHAR2)

  RETURN NUMBER

  IS

  BEGIN

    IF(CURR_STR IS NOT NULL) THEN

      CURR_STR := CURR_STR || ':' || P1;

    ELSE

      CURR_STR := P1;

    END IF;

    RETURN ODCICONST.SUCCESS;

  END;

  MEMBER FUNCTION ODCIAGGREGATETERMINATE(SELF IN zh_concat_im,

                                RETURNVALUE OUT VARCHAR2,

                                FLAGS IN NUMBER)

    RETURN NUMBER

  IS

  BEGIN

    RETURNVALUE := CURR_STR ;

    RETURN ODCICONST.SUCCESS;

  END;

  MEMBER FUNCTION ODCIAGGREGATEMERGE(SELF IN OUT zh_concat_im,

                                  SCTX2 IN zh_concat_im)

  RETURN NUMBER

  IS

  BEGIN

    IF(SCTX2.CURR_STR IS NOT NULL) THEN

      SELF.CURR_STR := SELF.CURR_STR || ':' || SCTX2.CURR_STR ;

    END IF;

    RETURN ODCICONST.SUCCESS;

  END;

END;

/

函数:

create or replace FUNCTION zh_concat(P1 VARCHAR2)

RETURN VARCHAR2 AGGREGATE USING zh_concat_im ;

相关阅读:

SPFILE 错误导致数据库无法启动(ORA-01565)

ORA-01172、ORA-01151错误处理

ORA-00600 [2662]错误解决

linux

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号