2017-01-08 60 views
-1

对于ETL目的,我需要将DB记录转换为平面文件。为此,我必须将所有记录转换为CHAR。在那张表中,它有几列CLOB数据类型。所以,我尝试了以下功能:如何在Oracle中将CLOB转换为CHAR数据类型?

DBMS.LOBS_SUBSTR(column_name, Length(column_name)) 

Error: ORA-06502 Pl/sql: numeric value error: character string buffer too small ORA-06512: at line 1 06502. 00000 - "PL/SQL: numeric or value error ℅s"

+0

请澄清你的问题。首先,你确定要转换为CHAR而不是VARCHAR2吗?你所有的价值都是一样的吗?然后,你的意思是“它不应该受限于字符长度......” - 没有长度限制的唯一数据类型是CLOB,这是它首先被引入的唯一原因。 – mathguy

+0

我将编辑我的答案。感谢您的建议 –

+0

另外:如果你已经尝试了DBMS.LOBS_SUBSTR,那应该会给你一个不同的错误(比如没有这样的函数)。如果您难以复制GurV写的内容,请使用“复制”和“粘贴”编辑。如果实际上你使用了正确的函数DBMS_LOB.SUBSTR,并且你得到了一个错误,那么肯定不是**,因为列中存在'null';那些会很好地工作。 – mathguy

回答

0

您可以使用DBMS_LOB.substr()

select DBMS_LOB.substr(col, 4000) from table; 

此外,从docs,限制如下:

For fixed-width n-byte CLOBs, if the input amount for SUBSTR is greater than (32767/n), then SUBSTR returns a character buffer of length (32767/n), or the length of the CLOB, whichever is lesser. For CLOBs in a varying-width character set, n is the maximum byte-width used for characters in the CLOB

+0

我编辑了我的描述。我已经使用了你在这里提到的。该错误是由于空值.. –

+0

@VigneshKiswanth - 不,它不是。 – mathguy

+0

为了供您参考,我已经编辑了描述,并附上了我得到的错误类型。 –

相关问题