2012-02-09 64 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