programing

Oracle SQL Developer에서 BLOB(JSON 포함)를 편집하려면 어떻게 해야 합니까?

muds 2023. 9. 8. 21:45
반응형

Oracle SQL Developer에서 BLOB(JSON 포함)를 편집하려면 어떻게 해야 합니까?

Oracle SQL Developer에서 BLOB(JSON 텍스트 포함)를 편집하려면 어떻게 해야 합니까?

열어서 볼 수 있는데 편집하려면 외부 편집기가 필요한가요?메모장만 사용하더라도 무엇을 사용할 것인지, 어떻게 사용할 것인지에 대한 도움은 답변에서 매우 감사할 것입니다.

편집: 해당 BLOB에 JSON 텍스트가 포함되어 있습니다.

SQL 개발자 3.1(아마도 이전 릴리스)에서 BLOB를 반환하는 쿼리를 실행하는 경우 원하는 특정 BLOB를 두 번 클릭하면 데이터를 외부 편집기로 보내거나 기본 제공 SQL 개발자가 데이터를 이미지 또는 텍스트로 해석하도록 표시하라는 메시지가 표시됩니다.텍스트 옵션을 선택하면 JSON 데이터가 올바르게 표시될 수 있습니다.

그러나 데이터를 변경하려면 다음 명령을 발행해야 합니다.UPDATE실제로 데이터를 설정할 수 있습니다.SQL 개발자는 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그리고 그것을 a로 변환합니다.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;
/

SQL을 작성할 필요 없이 개별 블롭을 변경하려는 경우 Oracle SQL Developer에서 다음 작업을 수행할 수 있습니다.

  1. 을 하면 과 됩니다 됩니다 과 을 하면 (BLOB) 버튼. 편집 버튼(아이콘용 연필)이 셀 오른쪽에 나타나야 합니다.클릭하세요.
  2. 클릭 Download, 저장된 데이터의 오른쪽으로 이동합니다.어딘가에 저장해 두세요.
  3. 원하는 프로그램에서 파일을 편집합니다.절약하다.
  4. Developer의 SQL Developer의 Edit Value(값 편집) 대화상자를 클릭합니다.Load, Local Data(로컬 데이터)의 오른쪽에 있습니다.편집 후 파일을 저장한 위치를 찾습니다.클릭OK지금 Edit Value(값 편집) 대화 상자에 있습니다.
  5. 합니다를 합니다.Commit Changes사항에 경에는우을다다을n우에f는경eur',s .Rollback Changes마음이 변하셨다면 버튼을 눌러주세요.

내 생각엔, 내 생각엔, 전체를 하는 것보다 훨씬 더 쉬운 것 같아요.dbms_lob.convertToBlob이것이 단지 빠른 단발적인 것이라면.

언급URL : https://stackoverflow.com/questions/9218474/how-do-i-edit-blobs-containing-json-in-oracle-sql-developer

반응형