将clob数据转换为varchar2时出错

时间:2017-09-06 09:35:52

标签: oracle plsql

我尝试使用dbms_lob命令将clob数据类型转换为varchar2数据类型,但是我收到错误,如下所示

ERROR:

Object.create

表结构:

desc test_default_settings

ORA-06502: PL/SQL: numeric or value error: character string buffer too small

表内容:

Name          Null Type          
------------- ---- ------------- 
DEFAULT_KEY        VARCHAR2(100) 
DEFAULT_VALUE      CLOB 

由于EMAIL_TEMPLATE_MSG的值太长而无法显示,因此我将其标记为" ...."

使用的查询:

Default_key                     Default_Value
======================        ==================
EMAIL_TEMPLATE_NAME             Invitation Email Template
EMAIL_TEMPLATE_FROM             admin@xxx.com
EMAIL_TEMPLATE_SUBJECT          Welcome to test company!!!
EMAIL_TEMPLATE_EXP_DAYS         2
EMAIL_TEMPLATE_MSG               <html><p>Dear  {First_Name}, {Last_Name}<span id="selectionBoundary_1496237162220_4685507087412435" class="rangySelectionBoundary">&#65279;</span></p><p>...
                                  ..................</html>

注意:

除了 EMAIL_TEMPLATE_MSG 数据

之外,我可以访问所有数据内容

例如:

SELECT e.default_key,
  TO_CHAR(DBMS_LOB.SUBSTR(e.default_value,5000, 1)) AS DEFAULT_VALUE
FROM test_default_settings e; 

但是当我这样做以提取html内容时,我得到了错误

SELECT e.default_key,
  TO_CHAR(DBMS_LOB.SUBSTR(e.default_value,5000, 1)) AS DEFAULT_VALUE
FROM test_default_settings e where default_key= 'EMAIL_TEMPLATE_NAME';



  DEFAULT_KEY     DEFAULT_VALUE
--------------   ----------------
EMAIL_TEMPLATE_NAME Invitation Email Template

输出:

SELECT e.default_key,
  TO_CHAR(DBMS_LOB.SUBSTR(e.default_value,5000, 1)) AS DEFAULT_VALUE
FROM test_default_settings e where default_key= 'EMAIL_TEMPLATE_MSG';

当我尝试将dbms_lob参数的值增加到80000时,我将该值设为null。

你能帮忙吗

1 个答案:

答案 0 :(得分:1)

DBMS_LOB.SUBSTR和SUBSTR的工作方式不同。 DBMS_LOB.SUBSTR(amount,offset)SUBSTR(offset,amount)

实施例

select DBMS_LOB.SUBSTR('1234567890',5,1),substr('1234567890',5,1), 
DBMS_LOB.SUBSTR('1234567890',1,5) 
from dw_mailing;

在查询dbms_lob.SUBSTR中,对于长CLOB,提取5000个字节并尝试将此字节转换为varchar2。但是sql中的varchar2 max size是4000.