如何在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