source

BLOB를 CLOB로 변환하는 방법은?

nicesource 2023. 10. 21. 10:32
반응형

BLOB를 CLOB로 변환하는 방법은?

저는 오라클 11g을 사용하고 있고 텍스트 길이를 알아내려고 합니다.제가 평소에.select length(myvar) from table, 그럴 순 없어요

내가 문의하고 싶은 테이블은BLOB문자나 사진을 저장하는 열.나는 내가 몇자인지 알고 싶습니다.BLOB기둥이 있습니다.

저는 제 것을 변환하려고 했습니다.BLOB매력에 빠진UTL_RAW.CAST_TO_VARCHAR2(myblob) from table, 이 기능이 제대로 작동하지 않거나 실수를 한 것 같습니다.

예를 들어: 내BLOB언질이 나다Section, 이것을 데이터베이스에서 16진수 형태로 볼 때S.e.c.t.i.o.n.. 왜 각각의 글자 사이에 그런 점들이 있는지 모르겠어요.그런 다음 이 쿼리를 사용했습니다.

select UTL_RAW.CAST_TO_VARCHAR2(myblob) 
from table

이 쿼리의 결과는 다음과 같습니다.'S'그러니까 내 말은 완전한 말이 아닙니다.BLOB다음과 같은 질문을 할 때:

select length(UTL_RAW.CAST_TO_VARCHAR2(myblob))
from table

결과는18, 그러나 그 말은Sections18자가 없습니다.

저는 전환을 시도하고 있었습니다.BLOBVARCHAR, 내 최선의 선택은CLOB왜냐하면 그것이 저장할 수 있는 텍스트의 길이가 제한보다 더 길기 때문입니다.VARCHARhas. 나는 다음과 같은 질문을 함으로써 이를 시도했습니다. (이것이 맞는지는 확실하지 않지만 인터넷에서 찾은 것입니다.)

select UTL_RAW.CAST_TO_VARCHAR2(DBMS_LOB.SUBSTR(myblob, 32767, 1))
from table

이 쿼리는 또한 반환합니다.'S'

이 스레드에 와서 블롭을 클롭으로 변환하는 방법을 알고 싶은 모든 사람을 위해.여기 예가 있습니다.

create function clobfromblob(p_blob blob) return clob is
      l_clob         clob;
      l_dest_offsset integer := 1;
      l_src_offsset  integer := 1;
      l_lang_context integer := dbms_lob.default_lang_ctx;
      l_warning      integer;

   begin

      if p_blob is null then
         return null;
      end if;

      dbms_lob.createTemporary(lob_loc => l_clob
                              ,cache   => false);

      dbms_lob.converttoclob(dest_lob     => l_clob
                            ,src_blob     => p_blob
                            ,amount       => dbms_lob.lobmaxsize
                            ,dest_offset  => l_dest_offsset
                            ,src_offset   => l_src_offsset
                            ,blob_csid    => dbms_lob.default_csid
                            ,lang_context => l_lang_context
                            ,warning      => l_warning);

      return l_clob;

   end;

blob을 clob으로 변환하려면 다음을 시도합니다.

SELECT TO_CLOB(UTL_RAW.CAST_TO_VARCHAR2(DBMS_LOB.SUBSTR(MYBLOB,2000))) 
FROM MYTABLE;
SELECT DBMS_LOB.GetLength( myblob ) length_in_bytes
  FROM table

는 BLOB의 길이를 바이트 단위로 반환합니다.BLOB의 문자 데이터는 UTF-16 문자 집합을 사용하여 인코딩되어 바이트 수가 문자 수의 두 배가 될 수 있습니다(사용 중인 유니코드 버전과 저장 중인 특정 데이터에 따라).일부 문자의 경우 4바이트의 스토리지가 필요할 수 있지만 해당 문자를 처리할 가능성은 상대적으로 낮습니다.

사용할 수 있습니다.DBMS_LOB.ConvertToClobBLOB를 CLOB로 변환하는 프로시저(이 프로시저이기 때문에 PL/SQL 블록에서 호출해야 함).변환의 일환으로 데이터가 인코딩된 문자 집합을 지정해야 합니다. 애플리케이션에서 UTF-16 문자 집합을 사용하고 있다고 가정하지만 이는 단지 가정에 불과합니다.

CLOB로만 변환:

select TO_CLOB(UTL_RAW.CAST_TO_VARCHAR2(YOURCLOB)) from DUAL;

사이즈 제한 없이 크레이그에서 영감을 받아 제작되었습니다.

언급URL : https://stackoverflow.com/questions/12849025/how-to-convert-blob-to-clob

반응형