Как редактировать большие двоичные объекты (содержащие JSON) в Oracle SQL Developer? - PullRequest
9 голосов
/ 10 февраля 2012

Как редактировать большие двоичные объекты (содержащие текст JSON) в Oracle SQL Developer?

Я могу открыть и просмотреть их, но нужен ли мне внешний редактор для их редактирования? Любая помощь по поводу того, что использовать, даже если это просто блокнот, и как это сделать, будет очень признательна в ответе.

РЕДАКТИРОВАТЬ: рассматриваемые BLOB-объекты содержат текст JSON.

Ответы [ 2 ]

7 голосов
/ 10 февраля 2012

Если вы запускаете запрос в SQL Developer 3.1 (и, возможно, более ранних выпусках), который возвращает BLOB, вы можете дважды щелкнуть по нужному BLOB, где вас попросят, либо попытаться отправить данныево внешний редактор или попытаться использовать встроенный элемент управления дисплеем SQL Developer для интерпретации данных в виде изображения или текста.Ваши JSON-данные, вероятно, будут отображаться правильно, если вы выберете текстовую опцию.

Однако, если вы хотите изменить данные, вам нужно будет ввести UPDATE, чтобы фактически установить данные.У разработчика SQL нет возможности напрямую редактировать данные больших объектов.Например,

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;
/
2 голосов
/ 08 октября 2018

Если вы хотите изменить отдельные BLOB-объекты без необходимости написания SQL, вы можете сделать это в Oracle SQL Developer:

  1. Дважды щелкните ячейку с надписью (BLOB). Кнопка редактирования (карандаш для значка) должна появиться справа от ячейки. Нажмите на нее.
  2. Нажмите Download, справа от Сохраненные данные . Сохраните его где-нибудь.
  3. Отредактируйте файл в любой программе, которую вы хотите. Сохранить.
  4. Вернувшись в диалоговое окно «Изменить значение» Oracle SQL Developer, нажмите Load справа от Локальные данные . Найти файл, где вы сохранили его после редактирования. Нажмите OK в диалоговом окне «Изменить значение».
  5. Нажмите кнопку Commit Changes, если вас устраивают ваши изменения, или кнопку Rollback Changes, если вы передумали.

Я думаю, что намного проще, чем делать целые dbms_lob.convertToBlob, если это всего лишь быстрая разовая вещь.

...