Como converter de Clob para Varchar2 no Oracle

Converter dados em um formato de string entre diferentes tipos de dados geralmente é um processo direto no Oracle, mas alguns casos são um pouco mais desafiadores do que outros. Um deles ocorre quando você usa o Oracle para converter clob em varchar2, o que é difícil porque um A coluna varchar2 tem no máximo 4.000 caracteres, enquanto o clob pode armazenar grandes quantidades de caracteres dados. Você ainda pode atingir seu objetivo, porém, usando o método substr dbms_lob ou to_char e especificando um tamanho máximo.

CLOB e VARCHAR2 explicados

CLOB (ou "clob" coloquialmente) é um acrônimo para "objeto grande de caracteres" e pode armazenar até 4 GB de dados. É usado por vários sistemas de banco de dados, incluindo DB2 e Oracle. CLOB é útil quando você precisa armazenar grandes quantidades de dados, mas o próprio tamanho pode causar problemas em algumas situações. É por isso que a conversão de um Oracle CLOB em um formato de string de tamanho mais gerenciável costuma ser uma boa abordagem antes de executar as operações.

Vídeo do dia

O formato VARCHAR2 armazena quantidades menores de dados, geralmente até 4.000 bytes, a menos que você use um tamanho máximo de string estendido, caso em que pode ir até 32.767 bytes. Para um conjunto de caracteres de byte único, geralmente você pode obter até 4.000 caracteres em uma coluna. A discrepância entre os tamanhos máximos desses dois formatos de dados é onde surgem os problemas durante a conversão.

Método substr dbms_lob

Para converter uma string clob em varchar2, abra seu programa SQL * Plus. A sintaxe para a conversão que você precisa realizar é:

SELECT dbms_lob.substr (clob_column, for_how_many_bytes, from_which_byte) DA tabela

Aqui, os valores entre parênteses são aqueles que você deve alterar, assim como "tabela" no final. Eles correspondem à coluna ("clob_column") e à tabela com a qual você está trabalhando. O "for_how_many_bytes" dá a você a oportunidade de especificar quantos bytes de dados você deseja converter, e o "from_which_byte" permite que você especifique um ponto de partida.

Portanto, se você tiver uma tabela chamada "impostos" e um campo chamado "net_pay", e presumindo que deseja 4.000 bytes a partir do primeiro, você deve inserir:

SELECT dbms_lob.substr (net_pay, 4000, 1) DE impostos

Para converter a string no formato varchar2.

O método TO_CHAR

Você também pode usar o comando TO_CHAR com uma sintaxe muito semelhante para atingir o mesmo objetivo:

SELECT TO_CHAR (SUBSTR (clob_column, 0,3999)) DA tabela

Aqui, os bytes inicial e final são especificados como 0 e 3999 (para uma string de 4.000 caracteres começando desde o início), mas os campos "clob_column" e "table" são usados ​​exatamente da mesma maneira que antes de. Portanto, no mesmo exemplo, você pode inserir:

SELECIONE TO_CHAR (SUBSTR (net_pay, 0,3999)) FROM impostos

Basicamente, em vez de concluir o processo em uma única etapa, ele usa o comando SUBSTR para extrair uma substring da string maior e, em seguida, usa "to_char" para lidar com a conversão. Se a coluna clob em questão tiver menos de 4.000 bytes de informações, você poderá inserir o nome da coluna entre parênteses após to_char em vez de especificar uma substring.