相关文章推荐
爽快的镜子  ·  Oracle日期时间操作大全 - ...·  2 小时前    · 
另类的路灯  ·  C++ ...·  1 月前    · 
聪明的领结  ·  Workflow | ...·  1 年前    · 

4000 ,32767

所以反回用 clob类型。

create or replace Function Blob_To_Varchar (Blob_In In Blob) Return clob

V_Varchar Varchar2(32767);

V_Varchar1 Varchar2(32767);

V_Start Pls_Integer := 1;

V_Buffer Pls_Integer := 4000;

Begin

If Dbms_Lob.Getlength(Blob_In) Is Null Then

Return '';

End If;

V_Varchar1 := '';

--return to_char(Ceil(Dbms_Lob.Getlength(Blob_In) / V_Buffer));

For I In 1..Ceil(Dbms_Lob.Getlength(Blob_In) / V_Buffer) Loop

--当转换出来的字符串乱码时,可尝试用注释掉的函数

--V_Varchar := Utl_Raw.Cast_To_Varchar2(Utl_Raw.Convert(Dbms_Lob.Substr(Blob_In, V_Buffer, V_Start),'SIMPLIFIED CHINESE_CHINA.ZHS16GBK', 'AMERICAN_THE NETHERLANDS.UTF8'));

V_Varchar :=  Utl_Raw.Cast_To_Varchar2(Dbms_Lob.Substr(Blob_In, V_Buffer, V_Start));

V_Varchar1 := V_Varchar1 || V_Varchar;

V_Start := V_Start + V_Buffer;

End Loop;

Return V_Varchar1;

End Blob_To_Varchar;

同类函数:

create or replace function get_blobvar(tempblob in Blob) return varchar2 is

ret_buf       varchar2(32767);

l_blob        BLOB;

l_blob_length NUMBER;

l_amount      BINARY_INTEGER := 10000; -- must be <= ~32765.

l_offset      INTEGER := 1;

l_buffer      RAW(20000);

l_text_buffer VARCHAR2(32767);

l_break_at    PLS_INTEGER := 250;

BEGIN

l_blob := tempblob;

IF (l_blob IS NULL ) THEN

return '';

end if;

l_blob_length := DBMS_LOB.GETLENGTH(l_blob);

ret_buf:='';

--return to_char(l_blob_length);

FOR i IN 1 .. CEIL(l_blob_length / l_amount) LOOP

DBMS_LOB.READ(l_blob, l_amount, l_offset, l_buffer);

l_text_buffer := UTL_RAW.CAST_TO_VARCHAR2(l_buffer);

return l_text_buffer;

FOR j IN 1 .. CEIL(LENGTH(l_text_buffer) / l_break_at) LOOP

--ret_buf := SUBSTR(CONVERT(l_text_buffer, 'ZHS16GBK', 'AL16UTF16'),

ret_buf := ret_buf || SUBSTR(l_text_buffer,

(((j - 1) * l_break_at) + 1),

LEAST(LENGTH(l_text_buffer) - ((j - 1) * l_break_at),

l_break_at));

END LOOP;

l_offset := l_offset + l_amount;

END LOOP;

return ret_buf;

EXCEPTION

WHEN OTHERS THEN

DBMS_OUTPUT.PUT_LINE('!ERROR: ' || SUBSTR(SQLERRM, 1, 247));

RAISE;

END get_blobvar;

转 clob

Create Or Replace Function Blob_To_Clob (Blob_In In Blob) Return Clob

V_Clob Clob;

V_Varchar Varchar2(4000);

V_Start Pls_Integer := 1;

V_Buffer Pls_Integer := 4000;

G_Nls_Db_Char Varchar2(60);

Begin

Select Userenv('LANGUAGE') Into G_Nls_Db_Char From Dual;

If Dbms_Lob.Getlength(Blob_In) Is Null Then

Return Empty_Clob();

End If;

Dbms_Output.Put_Line('TEST:' || Ceil(Dbms_Lob.Getlength(Blob_In)));

Dbms_Lob.Createtemporary(V_Clob, True);

For I In 1..Ceil(Dbms_Lob.Getlength(Blob_In) / V_Buffer) Loop

V_Varchar := Utl_Raw.Cast_To_Varchar2(Utl_Raw.Convert(Dbms_Lob.Substr(Blob_In, V_Buffer, V_Start),'SIMPLIFIED CHINESE_CHINA.ZHS16GBK', 'AMERICAN_THE NETHERLANDS.UTF8'));

Dbms_Lob.Writeappend(V_Clob, Length(V_Varchar), V_Varchar);

V_Start := V_Start + V_Buffer;

End Loop;

--Dbms_Output.Put_Line(V_Varchar);

Return V_Clob;

End Blob_To_Clob;

SELECT A.PF_ID ,B.CRE_ENH_MEA FROM TC_HP_PB_DOM_INFO A --持仓表 LEFT JOIN TC_SE_PB_DOM_INFO B ON REGEXP_... CERT_1以前是 varchar (3000),现在的类型是 blob 类型,做数据库迁移时,使用导入工具不能直接导入,所以使用SQL,下面是SQLdeclaredirections BLOB ;amount BINARY_INTEGER;offset INTEGER;first_direction VARCHAR 2(3000);more_directions... export function download(url, params) { return request({ url: url + '?' + qs.stringify(params, { indices: false }), method: 'get', responseType: ' blob ' 后端下载模板: @ApiOperation(value 1、clob 字段 varchar 字段 主要用到dbms_lob.substr方法,该方法有三个参数,分别是截取的clob 字段 、截取长度以及起始位置,其中 字段 名为必须的,截取长度以及其实位置可以根据需要使用。首先创建测试表,表中包含三个字典,标识码、clob测试 字段 varchar 测试 字段 。在表中插入一条测试数据,其中clob和 varchar 字段 默认都为空。dbms_lob.substr( 字段 名,长度,起始位置)设置clob 字段 的值为f_str 字段 的值。设置f_str的值为clob 字段 的值。 J2EE操作 Oracle 的clob类型 字段 关键字: java Oracle 中, Varchar 2支持的最大字节数为4KB,所以对于某些长字符串的处理,我们需要用CLOB类型的 字段 ,CLOB 字段 最大支持4GB。还有其他几种类型: blob :二进制,如果exe,zipclob:单字节码,比如一般的文本文件.nlob:多字节码,如UTF格式的文件.以下就是对CLOG 字段 的操作方法,在我们的项目中帮助文档部分用... 项目中最近遇到个比较头疼的问题,因为使用了Liferay平台,使用封装后的hql查询导致取不出来数据库中的 blob 字段 ,无奈之下只好换个思路:直接在数据库这边先把 blob 字段 转成字符串但脚本执行后发现,转出来的竟然是乱码。。最头疼的就是各种编码不同导致的乱码问题了,搜了搜,刚好看到一篇帖子讨论这个问题,研究了下之后终于能转成正常的中文了,可以用两种写法:select convert(UTL_RAW... CREATE OR REPLACE FUNCTION C2B (b IN CLOB defaultempty_clob())RETURN BLOB --typecasts BLOB to CLOB (binary conversion)ISres BLOB ;b_len number :=dbms_lob.getlength(b) ;dest_offset1 ... <br />Asc()<br />功能得到字符串第一个字符的ASCII码整数值。<br />语法Asc ( string )<br />参数string:要得到第一个字符ASCII值的字符串返回值Integer。函数执行成功时返回string参数第一个字符的ASCII值,如果string参数的值为NULL,则Asc()函数返回NULL。 Char ()<br />功能将字符串的第一个字符、 Blob 变量的第一个值、或一个整数 转换成 字符。<br />语法 Char ( )<br />参数n: 据说没有数据的时候可以直接转换,试过了也可以,但是一般都是由数据了才会去修改,麻烦产生,直接修改不了,只能通过函数来解决; 总的思路是:创建临时 字段 B→将要转换的 字段 A放在临时 字段 中(使用函数转换)→删除A→将B名称改为A 创建转换函数 create or replace FUNCTION blob _to_ varchar ( blob _in IN BLOB ) RETURN VARCHAR ...