`

blob转clob和varchar2

SQL 
阅读更多
CREATE OR REPLACE FUNCTION blob_to_clob2 (blob_in IN BLOB)
RETURN CLOB
AS
	v_clob    CLOB;
	v_varchar VARCHAR2(32767);
	v_start	 PLS_INTEGER := 1;
	v_buffer  PLS_INTEGER := 32767;
BEGIN
	DBMS_LOB.CREATETEMPORARY(v_clob, TRUE);
 if DBMS_LOB.GETLENGTH(blob_in) is null then
        return empty_clob();
 end if;
	FOR i IN 1..CEIL(DBMS_LOB.GETLENGTH(blob_in) / v_buffer)
	LOOP

	   v_varchar := UTL_RAW.CAST_TO_VARCHAR2(DBMS_LOB.SUBSTR(blob_in, v_buffer, v_start));

           DBMS_LOB.WRITEAPPEND(v_clob, LENGTH(v_varchar), v_varchar);

		v_start := v_start + v_buffer;
	END LOOP;

   RETURN v_clob;

END blob_to_clob2;



create or replace FUNCTION blob_to_clob (blob_in IN BLOB) 
RETURN CLOB 
IS 
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; 

create or replace FUNCTION blob_to_varchar (blob_in IN BLOB) 
RETURN VARCHAR2 
IS 

v_varchar VARCHAR2(4000); 
v_start PLS_INTEGER := 1; 
v_buffer PLS_INTEGER := 4000; 
 
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_varchar; 
 
end blob_to_varchar; 
分享到:
评论

相关推荐

    oracle Blob转换Clob

    - 每次循环使用`DBMS_LOB.SUBSTR`读取一部分Blob数据,并将其转换为`VARCHAR2`类型。 - 使用`UTL_RAW.CAST_TO_VARCHAR2`进行类型转换。 - 通过`DBMS_LOB.WRITE_APPEND`方法将转换后的数据追加到临时Clob中。 4. ...

    oracle(blob转换为clob)

    通过使用`UTL_RAW.CAST_TO_VARCHAR2`,我们可以将BLOB数据转换为中间的VARCHAR2格式,然后进一步转换为CLOB。 #### 2. DBMS_LOB Package `DBMS_LOB`是Oracle提供的一个用于操作大对象(LOB)的包。它包含了多种...

    mybatis 对clob类型转换

    在使用MyBatis框架进行数据操作时,我们可能会遇到CLOB类型数据的读写问题,尤其是在转换和插入数据库时。本篇将详细探讨MyBatis中处理CLOB类型数据的转换以及解决可能出现的异常情况。 首先,MyBatis是Java中的一...

    数据库中clob类型转换的问题 数据库中clob类型转换的问题

    一种常见的解决方案是在执行此操作之前先备份原数据,并使用适当的逻辑将CLOB字段中的数据截断至VARCHAR2可接受的范围内,或者在必要时将较长的数据拆分为多个VARCHAR2字段。 #### 问题2:兼容性问题 不同的数据库...

    ORACLE中CLOB字段转String类型

    l_substring VARCHAR2(32767); BEGIN SELECT CLOB_COLUMN INTO l_clob FROM TABLE_NAME WHERE ID = 1; l_length := DBMS_LOB.GETLENGTH(l_clob); l_substring := DBMS_LOB.SUBSTR(l_clob, 32767); -- 处理l_...

    LOB2Table:将 Oracle CLOB、BLOB、BFILE 或 VARCHAR2 中的 CSV 数据作为表进行查询-开源

    LOB2Table 是一组 Oracle PL/SQL 流水线函数,允许您像普通表一样查询 CLOB、BLOB、BFILE 或 VARCHAR2 中的 CSV 或固定列数据存储。 有关详细说明,请参阅 Wiki。

    批量导出ORACLE数据库BLOB字段生成图片

    通常,文件名会存储在一个VARCHAR2类型的列中,而图片数据则存储在BLOB列中。 5. **编写SQL或PL/SQL脚本**:创建一个查询,选择需要导出的图片对应的BLOB数据,并可能包含文件名。可以使用DBMS_LOB子程序处理BLOB...

    Oracle如何对CLOB行字段来执行全文检索

    name varchar2(255), description CLOB ); ``` 使用 DBMS_LOB 包实现 CLOB 字段的 Like 查找 DBMS_LOB 包提供了多种函数和过程来操作 LOB 数据类型。其中,INSTR 函数可以用来查找 CLOB 字段中的字符串。下面是...

    Oracle与DB2数据类型的对应说明书

    二、VARCHAR2和CHAR类型 Oracle中的VARCHAR2类型可以对应DB2/400中的CHAR类型和VARCHAR类型。当n时,可以使用DB2/400中的CHAR类型或VARCHAR类型。当n>4000时,可以使用DB2/400中的VARCHARLONG类型或CLOB类型。 三...

    Oracle P/L SQL实现文件压缩、解压功能

    as_SubDir in VarChar2, as_FileName in VarChar2 )Return Blob; --获取压缩流的文件清单 Function f_GetFileList( as_ZippedBlob in Blob, as_Encoding in VarChar2 Default Null )...

    Oracle与DB2数据类型分类对应说明

    例如,在 DB2/400 中,我们可以使用定长的 CHAR(N)类型与 Oracle 的 VARCHAR2(n)相对应,这样可以提高效率和节省存储空间。 四、LOB 类型 DB2/400 提供 VARCHAR 和 CLOB 与 Oracle 中的 RAW 和 LONG RAW 相...

    java操作clob

    在实际开发中,需要注意的是,由于通过 JNDI 获得的数据库连接所提供的 `Blob` 和 `Clob` 实现可能与 JDBC 直接获取的不同,因此在入库时需要进行类型转换。而出库操作则无需特殊处理,因为它们都返回标准的 `java....

    oracle Blob

    name VARCHAR2(10), resume CLOB, photo BLOB, record BFILE ) Lob (resume,photo) Store As (Tablespace ts5_21 Chunk 6k Disable Storage In Row); ``` 2. 插入Blob数据: 插入Blob数据时,首先需要插入...

    oracle的数据类型_java中Clob型详细用法_struts中实现图片上传功能

    与 CHAR 不同,VARCHAR2 在存储时会自动去除前导和尾随的空格,并且根据实际数据长度调整存储空间。它是 SQL 中最常用的数据类型,最大索引长度为 3209 字节。 3. NUMBER(m,n): 可变长度数值类型,允许正负值,m ...

    Oracle和DB2的数据类型比较

    特别是当VARCHAR2类型的长度小于等于32766时,建议使用DB2/400中的CHAR类型以提高效率并节省存储空间。 #### 五、大对象类型 - **Oracle BLOB/CLOB**: 用于存储大二进制对象或文本对象,最大容量可达4GB。 - **DB2...

    学习Oracle数据库基本数据类型.pdf

    与Char和Varchar2不同,Raw保存的是原始二进制数据,不做任何字符编码转换。 7. **Long Raw**: 类似于Long,但专用于存储大块的二进制数据,最大长度2GB,通常用于大型图形或文档。 8. **Blob, Clob, NClob**: ...

    关于oracle中clob字段查询慢的问题及解决方法

    首先,尝试将CLOB字段直接转换为VARCHAR2类型进行查询,如以下语句所示: ```sql select * from table_name where utl_raw.cast_to_varchar2(column) like ‘%oracle%'; ``` 但这种做法会导致错误,因为CLOB字段可能...

    Oracle数据库基本数据类型.pdf

    Varchar2和Varchar用于存储可变长度的字符串,Varchar2在空间效率上有优势;Number用于数值型数据;Date处理日期和时间;Long和Long Raw已被弃用,应使用LOB类型替代;Blob、Clob和NClob用于存储大量文本或二进制...

Global site tag (gtag.js) - Google Analytics