Welcome 微信登录

首页 / 数据库 / MySQL / 数据块损坏后修复 ORA-01578

在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_imAUTHID 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_imIS  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) http://www.linuxidc.com/Linux/2013-08/88932.htmORA-01172、ORA-01151错误处理 http://www.linuxidc.com/Linux/2013-06/86529.htmORA-00600 [2662]错误解决 http://www.linuxidc.com/Linux/2013-06/86528.htm更多Oracle相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12针对于LVS分发MySQL的监控TNS-12547和TNS-12555错误解决相关资讯      ORA-01578 
  • bbed修改undo段状态(ORA-01578)  (11/11/2014 17:51:27)
  • ORA-01578 ORA-01110 坏块解决方法  (01/04/2014 09:00:35)
  • Oracle启动时提示ORA-01578错误解  (05/26/2014 19:56:05)
本文评论 查看全部评论 (0)
表情: 姓名: 字数