oracle中,行转列函数wm_concat()结果有长度限制,重写该函数解决
2013-10-08 17:19
399 查看
--Type
CREATE OR REPLACE TYPE dict_maint.zh_concat_im AUTHID CURRENT_USER AS OBJECT
(
CURR_STR clob,
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 clob,
FLAGS IN NUMBER)
RETURN NUMBER,
MEMBER FUNCTION ODCIAGGREGATEMERGE(SELF IN OUT zh_concat_im,
SCTX2 IN zh_concat_im) RETURN NUMBER
);
/
--TYPE BODY
CREATE OR REPLACE TYPE BODY dict_maint.zh_concat_im IS
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 clob,
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;
/
--FUNCTION
create or replace FUNCTION dict_maint.zh_concat(P1 VARCHAR2) RETURN clob AGGREGATE USING dict_maint.zh_concat_im;
CREATE OR REPLACE TYPE dict_maint.zh_concat_im AUTHID CURRENT_USER AS OBJECT
(
CURR_STR clob,
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 clob,
FLAGS IN NUMBER)
RETURN NUMBER,
MEMBER FUNCTION ODCIAGGREGATEMERGE(SELF IN OUT zh_concat_im,
SCTX2 IN zh_concat_im) RETURN NUMBER
);
/
--TYPE BODY
CREATE OR REPLACE TYPE BODY dict_maint.zh_concat_im IS
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 clob,
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;
/
--FUNCTION
create or replace FUNCTION dict_maint.zh_concat(P1 VARCHAR2) RETURN clob AGGREGATE USING dict_maint.zh_concat_im;
相关文章推荐
- oracle中,行转列函数wm_concat()结果有长度限制,重写该函数解决
- wmsys.wm_concat结果长度限制的问题
- wmsys.wm_concat结果长度限制的问题
- wmsys.wm_concat结果长度限制的问题
- Oracle 自定义wmsys.wm_concat 避免长度限制
- wmsys.wm_concat结果长度限制的问题
- oracle 函数WMSYS.WM_CONCAT()的用法(让查询结果行转列)
- Oracle的wm_concat()函数与Mysql的group_concat()函数
- oracle 11g wm_concat 、 listagg 函数的使用(合并数据)
- oracle 函数 WMSYS.WM_CONCAT 的用法 与 mysql 函数GROUP_CONCAT的用法
- oracle合并列的函数wm_concat的使用详解
- oracle wm_concat(column)函数的使用
- mysql GROUP_CONCAT 用法;修改数据库中group_concat的返回结果的长度限制
- 解决oracle 10g sql *plus 用dbms_output.put_line()输出时的长度限制问题 ORA-20000: ORU-10028: line le
- Oracle wmsys.wm_concat()函数 顺序问题 分隔符问题
- Oracle 函数 wmsys.wm_concat 的几个用法
- oracle wm_concat(column)函数的使用
- oracle wm_concat(column)函数的使用
- oracle 列转行函数 WMSYS.WM_CONCAT 排序不规则处理
- Oracle的行转列的函数wm_concat的db2实现