使用DBMS_LOB.CONVERTTOBLOB。
从oracle文档:
Oracle不鼓励在当前的Oracle数据库版本中使用CONVERT函数。 CONVERT的返回值具有字符数据类型,因此它应该在数据库字符集中或国家字符集中,具体取决于数据类型。 不支持任何不是这两个字符集之一的dest_char_set。 ...
如果在字符集中需要像CLOB这样的字符数据类型,而不是数据库的设置,则应将其转换为BLOB。 这是DBMS_LOB.CONVERTTOBLOB的用武之地。
如果需要一个返回BLOB的函数,则必须将CONVERTTOBLOB包装到您自己的函数中。 例如:
CREATE OR REPLACE FUNCTION clob_to_blob (p_clob CLOB, p_charsetname VARCHAR2)
RETURN BLOB
AS
l_lang_ctx INTEGER := DBMS_LOB.default_lang_ctx;
l_warning INTEGER;
l_dest_offset NUMBER := 1;
l_src_offset NUMBER := 1;
l_return BLOB;
BEGIN
DBMS_LOB.createtemporary (l_return, FALSE);
DBMS_LOB.converttoblob (
l_return,
p_clob,
DBMS_LOB.lobmaxsize,
l_dest_offset,
l_src_offset,
CASE WHEN p_charsetname IS NOT NULL THEN NLS_CHARSET_ID (p_charsetname) ELSE DBMS_LOB.default_csid END,
l_lang_ctx,
l_warning);
RETURN l_return;
END;
这允许查询如下:
SELECT clob_to_blob (field, 'UTF8') FROM t;
要获取字符集名称支持的值列表,请使用:
SELECT *
FROM v$nls_valid_values
WHERE parameter = 'CHARACTERSET'