2012-02-09 74 views
8

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

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

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

回答

7

如果您在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; 
/
+0

好吧,我编辑了BLOB,并有我希望它的文本。我如何使用这个文本文件执行'UPDATE'?连接我在这里,我会知道如何做到这一切! – Xonatron 2012-02-10 13:51:29

+0

关于如何做更新的任何想法? – Xonatron 2012-03-16 14:33:48

+0

@MatthewDoucette - 用'UPDATE'语句的例子更新了我的答案。 – 2012-03-16 18:22:03