>> Tecnologia eletrônica >  >> Lar inteligente >> Vida Inteligente

Como converter de Clob para Varchar2 no Oracle


A conversão de 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. Uma delas ocorre quando você usa o Oracle para converter clob em varchar2, o que é difícil porque uma coluna varchar2 tem no máximo 4.000 caracteres, enquanto clob pode armazenar grandes quantidades de dados de caracteres. Você ainda pode atingir seu objetivo, porém, usando o método dbms_lob substr ou to_char e especificando um tamanho máximo.

CLOB e VARCHAR2 explicados


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

O formato VARCHAR2 armazena quantidades menores de dados, geralmente até 4.000 bytes, a menos que você use um tamanho de string máximo estendido, caso em que pode ir até 32.767 bytes. Para um conjunto de caracteres de byte único, normalmente 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.

O método dbms_lob substr


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 ) FROM table

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" lhe dá 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 "taxes" e um campo chamado "net_pay", e supondo que deseja 4.000 bytes a partir do primeiro, digite:

SELECT dbms_lob.substr(net_pay, 4000, 1) FROM 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)) FROM table

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

SELECT 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.