为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:DM8
【操作系统】:
【CPU】:
【问题描述】*:
达梦数据库BLOB二进制字符串转utl_raw.cast_to_varchar2json字符串不完成,有什么解决办法吗
转换的最大值是32767,最后的结果是截断的,还有什么更长的方法吗。
一般在数据库,varchar数据类型和BLOB数据类型 就是长度不一样的,要想在不截断的情况下,BLOB转varchar在处理,肯定是有问题,建议还是在代码层面处理。
咋弄个BLOB字段存json啊,当初直接设置字段类型为CLOB多好。。。
实在不行自己写个函数来作BLOB-CLOB转换吧,你测试一下下面这个函数,看看是否能够满足需求,但一定要反复测试验证转换结果是否正确,避免出现异常或丢字符的情况。
CREATE OR REPLACE FUNCTION F_BLOBTOCLOB(BLOB_IN BLOB)
RETURN CLOB
AS
V_CLOB CLOB;
V_BUFFER VARCHAR2(32767);
V_POS INTEGER := 1;
V_LOOPS INTEGER;
V_SOUTLEN INTEGER;
BEGIN
DBMS_LOB.CREATETEMPORARY(V_CLOB, TRUE);
V_SOUTLEN := LENGTHB(BLOB_IN);
WHILE (V_POS - 1) < V_SOUTLEN LOOP
V_BUFFER := BINTOCHAR(SUBSTRBLB(BLOB_IN, V_POS, 8000));
IF (V_POS + LENGTH(V_BUFFER) - 1) < V_SOUTLEN THEN
V_BUFFER := SUBSTR(V_BUFFER,1,LENGTH(V_BUFFER) - 1);
END IF;
DBMS_LOB.WRITEAPPEND(V_CLOB, LENGTH(V_BUFFER), V_BUFFER);
V_POS := V_POS + LENGTHB(V_BUFFER);
END LOOP;
RETURN V_CLOB;
END F_BLOBTOCLOB;
将BLOB转换为CLOB]因为CLOB类型通常支持更大的数据长度。不过,这要求你的应用程序能够处理CLOB类型的数据。