>> Tecnologia Eletrônica >  >> Casa Inteligente >> Vida Inteligente

Como Converter de CLOB para VARCHAR2 no Oracle

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

CLOB e VARCHAR2 Explicados

CLOB (ou "clob" coloquialmente) é 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. CLOB é útil quando você precisa armazenar vastas quantidades de dados, mas o tamanho em si pode causar problemas em algumas situações. É por isso que conversão de um CLOB Oracle para formato string de tamanho mais gerenciável é frequentemente 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 tamanho máximo de string estendido, caso em que pode ir até 32.767 bytes. Para conjunto de caracteres de byte único, você geralmente consegue até 4.000 caracteres em uma coluna. A discrepância entre os tamanhos máximos destes dois formatos de dados é onde os problemas surgem durante conversão.

O Método dbms_lob substr

Para converter string clob para 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ê tem que mudar, bem como "table" no final. Estes correspondem à coluna ("clob_column") e a tabela com que você está trabalhando. O "for_how_many_bytes" dá a oportunidade de especificar quantos bytes de dados você quer converter, e o "from_which_byte" permite especificar ponto de partida.

Então, se você tem tabela chamada "taxes" e campo chamado "net_pay", e assumindo que quer 4.000 bytes começando do primeiro, você digitaria:

SELECT dbms_lob.substr(net_pay, 4000, 1) FROM taxes

Para converter a string em formato varchar2.

O Método TO_CHAR

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

​SELECT TO_CHAR(SUBSTR (clob_column,0,3999)) FROM table​

Aqui, os bytes inicial e final são especificados como 0 e 3999 (para string de 4.000 caracteres começando do início), mas os campos "clob_column" e "table" são usados exatamente da mesma forma que antes. Então, no mesmo exemplo, você poderia digitar:

SELECT TO_CHAR(SUBSTR (net_pay,0,3999)) FROM taxes

Basicamente, em vez de completar o processo em passo único, isso usa comando SUBSTR para extrair substring da string maior, e então usa "to_char" para lidar com a conversão. Se a coluna clob em questão tem menos de 4.000 bytes de informação, você pode inserir o nome da coluna nos parênteses após to_char em vez de especificar substring.