为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:8
【操作系统】:Linux
【CPU】:x86
【问题描述】*:我想拼接二进制数据,不要分割符号','该怎么操作,请给些建议,感谢!
select CONTENT,HTML,CONTENT || HTML from "ECO-WORKSHEET".WORK_ORDER_INFO;
select CONTENT,HTML,CONCAT(CONTENT,HTML) from "ECO-WORKSHEET".WORK_ORDER_INFO;
理论上这两种写法都可,但第二种测试可能引起-6108: 字符串截断
如果要拼接的是BLOB类型数据,测试一下下面这个自己创建聚合函数的办法,看看是否能够满足需要
DROP FUNCTION IF EXISTS BLOB_AGG;
/
CREATE OR REPLACE TYPE BLOB_AGG_TYPE AS OBJECT (
BIT_RESULT BLOB,
STATIC FUNCTION ODCIAGGREGATEINITIALIZE(SCTX IN OUT BLOB_AGG_TYPE) RETURN NUMBER,
MEMBER FUNCTION ODCIAGGREGATEITERATE(SELF IN OUT BLOB_AGG_TYPE, VALUE IN BLOB) RETURN NUMBER,
MEMBER FUNCTION ODCIAGGREGATETERMINATE(SELF IN BLOB_AGG_TYPE, RETURNVALUE OUT BLOB, FLAGS IN NUMBER) RETURN NUMBER,
MEMBER FUNCTION ODCIAGGREGATEMERGE(SELF IN OUT BLOB_AGG_TYPE, CTX2 IN BLOB_AGG_TYPE) RETURN NUMBER
);
/
CREATE OR REPLACE TYPE BODY BLOB_AGG_TYPE IS
STATIC FUNCTION ODCIAGGREGATEINITIALIZE(SCTX IN OUT BLOB_AGG_TYPE) RETURN NUMBER IS
BEGIN
SCTX := BLOB_AGG_TYPE(NULL);
RETURN ODCICONST.SUCCESS;
END;
MEMBER FUNCTION ODCIAGGREGATEITERATE(SELF IN OUT BLOB_AGG_TYPE, VALUE IN BLOB) RETURN NUMBER IS
BEGIN
IF SELF.BIT_RESULT IS NULL THEN
SELF.BIT_RESULT := VALUE;
ELSE
DBMS_LOB.APPEND(SELF.BIT_RESULT,VALUE);
END IF;
RETURN ODCICONST.SUCCESS;
END;
MEMBER FUNCTION ODCIAGGREGATETERMINATE(SELF IN BLOB_AGG_TYPE, RETURNVALUE OUT BLOB, FLAGS IN NUMBER) RETURN NUMBER IS
BEGIN
RETURNVALUE := SELF.BIT_RESULT;
RETURN ODCICONST.SUCCESS;
END;
MEMBER FUNCTION ODCIAGGREGATEMERGE(SELF IN OUT BLOB_AGG_TYPE, CTX2 IN BLOB_AGG_TYPE) RETURN NUMBER IS
BEGIN
IF SELF.BIT_RESULT IS NULL THEN
SELF.BIT_RESULT := CTX2.BIT_RESULT;
ELSE
DBMS_LOB.APPEND(SELF.BIT_RESULT,CTX2.BIT_RESULT);
END IF;
RETURN ODCICONST.SUCCESS;
END;
END;
/
CREATE OR REPLACE FUNCTION BLOB_AGG(INPUT BLOB) RETURN BLOB
PARALLEL_ENABLE AGGREGATE USING BLOB_AGG_TYPE;
/
--查询方式
SELECT ID,BLOB_AGG(MYBLOBDATA)
FROM MYTABLE
GROUP BY ID;
用listagg2(拼接字段, '') 第二参数分隔符写空串