如何在Oracle SQL Developer中编辑的BLOB(含JSON文本)?如何在Oracle SQL Developer中编辑BLOB(包含JSON)?
我可以打开并查看它们,但我需要一个外部编辑器编辑呢?任何关于使用什么的帮助,即使只是记事本,以及如何去做,在答案中将不胜感激。
编辑:BLOB的问题包含JSON文本。
如何在Oracle SQL Developer中编辑的BLOB(含JSON文本)?如何在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;
/
好吧,我编辑了BLOB,并有我希望它的文本。我如何使用这个文本文件执行'UPDATE'?连接我在这里,我会知道如何做到这一切! – Xonatron 2012-02-10 13:51:29
关于如何做更新的任何想法? – Xonatron 2012-03-16 14:33:48
@MatthewDoucette - 用'UPDATE'语句的例子更新了我的答案。 – 2012-03-16 18:22:03