Pular para o conteúdo

VALIDATE_CONVERSION

VALIDATE_CONVERSION

A função VALIDATE_CONVERSION foi introduzida no Oracle Database 12c Release 2, e possibilita detectar se o valor de entrada pode ser convertido para o tipo de dados especificado.

Algumas vezes nos deparamos com problemas de conversão de tipo de dados durante um processo de importação de dados por exemplo, nesse caso a função VALIDATE_CONVERSION pode ser extremamente útil como filtro, para ajudar a identificar dados que podem ou não serem convertidos para o tipo de dados especificado no destino.

A lógica da função é bastante simples, o primeiro parâmetro é o dado a ser convertido, o segundo parâmetro é o tipo de dado a ser convertido, também é possível especificar o formato.

A função retorna 1 se a conversão for bem sucedida, caso contrário, retornará 0.

VALIDATE_CONVERSION

Podemos usar a função VALIDATE_CONVERSION para testar as seguintes conversões de tipo de dados:

  •          NUMBER.
  •          DATE.
  •          TIMESTAMP.
  •          TIMESTAMP com Time Zone.
  •          BINARY_FLOAT.
  •          BINARY_DOUBLE.
  •          INTERVAL DAY TO SECOND.
  •          INTERVAL YEAR TO MONTH.

Vamos aos exemplos:

GPO@morpheus> select VALIDATE_CONVERSION('72497' as number), VALIDATE_CONVERSION('72497p' as number) from dual;

VALIDATE_CONVERSION('72497'ASNUMBER) VALIDATE_CONVERSION('72497P'ASNUMBER)
------------------------------------ -------------------------------------
                         1                                0

GPO@morpheus> select VALIDATE_CONVERSION('february 05, 2019' as date, 'month dd, yyyy', 'NLS_DATE_LANGUAGE = american') ENGLISH,

  2 VALIDATE_CONVERSION('febrero 05, 2019' as date, 'month dd, yyyy', 'NLS_DATE_LANGUAGE = spanish') SPANISH,

  3 VALIDATE_CONVERSION('febrero 05, 2019' as date, 'month dd, yyyy', 'NLS_DATE_LANGUAGE = portuguese') PORTUGUESE

  4 from dual;

   ENGLISH SPANISH PORTUGUESE
---------- ---------- ----------
      1      1       0

GPO@morpheus> create table TESTE (a varchar2(10));

Table created.

GPO@morpheus> insert into TESTE values (8273);

1 row created.

GPO@morpheus> insert into TESTE values ('acbd');

1 row created.

GPO@morpheus> insert into TESTE values (20190205);

1 row created.

GPO@morpheus> select * from TESTE;

A
----------
8273

acbd

20190205

GPO@morpheus> select * from TESTE where VALIDATE_CONVERSION (a as date, 'yyyymmdd') = 1;

A
----------
20190205

GPO@morpheus> select * from TESTE where VALIDATE_CONVERSION (a as number) = 0;

A
----------
acbd

Se a EXPR for avaliada como nulo, a função retornará 1.

GPO@morpheus> insert into TESTE values (null);

1 row created.

GPO@morpheus> insert into TESTE values (null);

1 row created.

GPO@morpheus> select nvl(a,'NULO') from TESTE where VALIDATE_CONVERSION (a as number) = 1;

NVL(A,'NUL
----------
8273

20190205

NULO

NULO

Referências

Rafael Milanez

Rafael Milanez

Formado em Administração com ênfase em Sistemas de Informação, trabalha com soluções Oracle há 15 anos, atua como arquiteto de TI com foco em integração/replicação de dados.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

plugins premium WordPress