Home >Database >Mysql Tutorial >Oracle数据库blob类型转换为varchar2

Oracle数据库blob类型转换为varchar2

WBOY
WBOYOriginal
2016-06-07 17:29:581749browse

据说没有数据的时候可以直接转换,试过了也可以,但是一般都是由数据了才会去修改,麻烦产生,直接修改不了,只能通过函数来解决

据说没有数据的时候可以直接转换,试过了也可以,但是一般都是由数据了才会去修改,麻烦产生,直接修改不了,只能通过函数来解决;

总的思路是:创建临时字段B→将要转换的字段A放在临时字段中(使用函数转换)→删除A→将B名称改为A

创建转换函数

create or replace FUNCTION blob_to_varchar (blob_in IN BLOB)
RETURN VARCHAR2
IS
v_varchar VARCHAR2(2000);
v_start PLS_INTEGER := 1;
v_buffer PLS_INTEGER := 2000;

BEGIN
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)));
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),'AMERICAN_THE NETHERLANDS.UTF8', 'AMERICAN_THE NETHERLANDS.UTF8'));
v_start := v_start + v_buffer;
END LOOP;
RETURN v_varchar;
end blob_to_varchar;

开始修改表数据:

ALTER TABLE requestion ADD INTRODUCE_TEMP VARCHAR2(2000);
UPDATE requestion SET INTRODUCE_TEMP=blob_to_varchar(INTRODUCE);

ALTER TABLE requestion DROP COLUMN INTRODUCE;
ALTER TABLE requestion RENAME COLUMN INTRODUCE_TEMP TO INTRODUCE;
Drop FUNCTION blob_to_varchar;

这个过程中可能会出现乱码问题,需要调整下编码,,也就是红色部分,所有建议先执行完绿色部分,看看编码是否对再执行蓝色部分代码

当然,如果blob转换成varchar的函数还需要的话就不要删除了

linux

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn