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
...