我尝试使用dbms_lob命令将clob数据类型转换为varchar2数据类型,但是我收到错误,如下所示
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"></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。
你能帮忙吗
答案 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.