gpt4 book ai didi

sql - 如何在 Oracle SQL Developer 中编辑 BLOB(包含 JSON)?

转载 作者:行者123 更新时间:2023-12-04 03:59:49 25 4
gpt4 key购买 nike

如何在 Oracle SQL Developer 中编辑 BLOB(包含 JSON 文本)?

我可以打开和查看它们,但是我需要外部编辑器来编辑它们吗?任何关于使用什么的帮助,即使只是记事本,以及如何去做,答案将不胜感激。

编辑:有问题的 BLOB 包含 JSON 文本。

最佳答案

如果您在 SQL Developer 3.1(可能还有更早的版本)中运行返回 BLOB 的查询,您可以双击您感兴趣的特定 BLOB,系统会提示您尝试将数据发送到外部编辑器或尝试使用内置的 SQL Developer 显示控件尝试将数据解释为图像或文本。如果您选择文本选项,您的 JSON 数据可能会正确显示。

但是,如果您想更改数据,则必须发出 UPDATE实际设置数据。 SQL Developer 没有直接编辑 LOB 数据的功能。例如

UPDATE table_name
SET column_with_json_data =
utl_i18n.string_to_raw( '{"foo": {"id": "1", "value": "2"}}' )
WHERE primary_key = <<some value>>

将使用使用数据库字符集编码的新 JSON 数据更新指定的行。如果你想用其他字符集存储数据, string_to_raw采用可选的第二个参数来指定字符集。所以如果你想使用 UTF-8 字符集存储数据,你会做这样的事情
UPDATE table_name
SET column_with_json_data =
utl_i18n.string_to_raw( '{"foo": {"id": "1", "value": "2"}}', 'AL32UTF8' )
WHERE primary_key = <<some value>>

当然,由于 JSON 数据是文本数据,因此最好将数据存储在旨在存储字符大对象的 CLOB 中。然后 SQL Developer(和其他工具)可以只显示文本,而不需要您选择结果,然后采取其他操作将其转换为文本。而且您不必将数据转换为 RAW以便更新数据库中的数据。

如果数据太长 string_to_raw要处理(这取决于字符集和数据,但会在 RAW 数据超过 2000 字节时发生),您可以将数据存储在 CLOB 中。然后将其转换为 BLOB用于更新表。这有点复杂,但它更灵活。在此示例中,我将 JSON 数据填充为 3200 个字符,并带有“*”——显然测试数据不再是有效的 JSON,但这对于本问题而言并不重要。
declare
l_blob blob;
l_clob clob := rpad('{"foo": {"id": "1", "value": "2", "name": "bob"}}',3200,'*');
l_amt integer := dbms_lob.lobmaxsize;
l_dest_offset integer := 1;
l_src_offset integer := 1;
l_csid integer := dbms_lob.default_csid;
l_ctx integer := dbms_lob.default_lang_ctx;
l_warn integer;
begin
dbms_lob.createTemporary( l_blob, false );
dbms_lob.convertToBlob( l_blob,
l_clob,
l_amt,
l_dest_offset,
l_src_offset,
l_csid,
l_ctx,
l_warn );

-- You'll want to add a WHERE clause as well
update json_data
set data = l_blob;

dbms_lob.freeTemporary( l_blob );
end;
/

关于sql - 如何在 Oracle SQL Developer 中编辑 BLOB(包含 JSON)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9218474/

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