gpt4 book ai didi

oracle - 如何在 Oracle 查询中将 CLOB 转换为 UTF8?

转载 作者:行者123 更新时间:2023-12-05 08:41:52 24 4
gpt4 key购买 nike

我有一个带有 CLOB 字段的查询,我想以 UTF8 格式返回她的值。例如,如果字段是 varchar,则下一个查询工作正常,但如果它是 CLOB,则不会返回正确的 UTF8 字符串。

select convert(field, 'AL32UTF8', 'WE8ISO8859P15') from table;

如何从查询中的 CLOB 返回 UTF8 字符串?

最佳答案

使用 DBMS_LOB.CONVERTTOBLOB。

来自 oracle 文档:

Oracle discourages the use of the CONVERT function in the current Oracle Database release. The return value of CONVERT has a character datatype, so it should be either in the database character set or in the national character set, depending on the datatype. Any dest_char_set that is not one of these two character sets is unsupported. …

如果您需要像 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'

关于oracle - 如何在 Oracle 查询中将 CLOB 转换为 UTF8?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46915028/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com