Data type, campo varchar2, ser somente number

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
Responder
priajf
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 297
Registrado em: Ter, 21 Dez 2010 8:45 am
Localização: Florianopolis

Boa Tarde
Tenho um campo que é varchar2.
Agora preciso fazer uma validação, que esse campo em certo caso. Não aceite, letras,pontos,virgulas, acentos, ETC. QUe seja comente números.
Como eu faço, isso só vai acontecer em casa especifico.

ATT
Avatar do usuário
stcoutinho
Moderador
Moderador
Mensagens: 850
Registrado em: Qua, 11 Mai 2011 5:15 pm
Localização: são Paulo - SP

Olá priajf,

Acho que no seu caso você poderia usar uma CHECK CONSTRAINT que utilizasse EXPRESSÕES REGULARES. Com isso você poderia fazer com que o campo aceitasse somente números. Procure na internet por este tema. Creio que você deve encontrar algo de acordo com as suas necessidades.

Att.

Sergio Coutinho
priajf
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 297
Registrado em: Ter, 21 Dez 2010 8:45 am
Localização: Florianopolis

STCOUTINHO,
Value pela ajuda, ai vem mais uma dúvida
COmo faço isso em forms, só achei exemplos em select
precisava algo assim campo like ('ABC').
Mais não encontro nada, achei algo [:alpha:]
Mais não achei como implementar. você sabe algo?
Obrigada
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Dá uma pesquisada por REGEXP aqui no fórum mesmo.

Você vai achar exemplos interessantes.

Segue abaixo um dos links que encontrei aqui, procurando por REGEXP,na parte de pesquisa:

Expressões Regulares

qualquer coisa, manda pra gente.
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

Para algo como Javascript, acredito que não tenha.
Agora usando num when-validate da vida o regexp, dá para usar. Tenta algo assim:

Selecionar tudo

IF REGEXP_LIKE(teste, '^[0-9]*$') THEN .... 
END IF;
priajf
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 297
Registrado em: Ter, 21 Dez 2010 8:45 am
Localização: Florianopolis

Lá vai mais dúvidas.
Fiz o select

Selecionar tudo

SELECT * into v_retorno
FROM dual 
WHERE regexp_like(campo, '^.*[[:upper:]].*$') 
AND regexp_like(campo, '^.*[[:lower:]].*$') 
AND regexp_like(campo, '^.*[0-9].*$') 
AND regexp_like(campo, '^.*[^A-Z,0-9].*$') ;
Porém pede para declarar o regexp_like ou diz que não existe essa função
Fiz da seguinte maneira também

Selecionar tudo

SELECT TRANSLATE(campo, '^.*[[:alpha:]].*$')
INTO V_RETORNO FROM DUAL
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

Qual versão do banco esta usando?
priajf
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 297
Registrado em: Ter, 21 Dez 2010 8:45 am
Localização: Florianopolis

O Banco - 8.0.4.1514.
Forms - 6.0.8.22.1.
Se eu coloco direto no banco funciona
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

Teu banco é o 8 e funciona?? Estranho. Até onde sei, só apartir do 10 que a Oracle trouxe implementado.

De qualquer forma, dá uma olhada aqui:
http://phil-sqltips.blogspot.com/2009/0 ... le-9i.html
Ele tem a criação destas funções de REGEXP. Tenta com elas, não esquece o owner da função.
Em ÚLTIMO, último caso, podes colocar uma função dessa no forms. Mas não espero ser necessário isso.
Avatar do usuário
stcoutinho
Moderador
Moderador
Mensagens: 850
Registrado em: Qua, 11 Mai 2011 5:15 pm
Localização: são Paulo - SP

Olá Priajaf,

Então sua base de dados é Oracle 8i? Dê uma olhada neste artigo do TOM KYTE, que explica como criar uma check constraint mais "rebuscada":

http://asktom.oracle.com/pls/apex/f?p=1 ... 4419760368

No link acima, o TOM usou a função TRANSLATE para fazer a consistência de um campo alfanumérico. O bom nos artigos dele é que você consegue reproduzir o exemplo em seu ambiente.

Abraços,

Sergio Coutinho
priajf
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 297
Registrado em: Ter, 21 Dez 2010 8:45 am
Localização: Florianopolis

PO gente, brigadão pela ajuda.
Consegui fazer dessa forma.

Selecionar tudo

SELECT replace(TRANSLATE((:cd_plano),'0123456789,     !@#$%¨&*()_+=-´[]~Ç,.;<>''?ªº|\"./-ABCDEFGHIJKLMNOPQRSTUVWXYZÇ','0123456789'),' ') 
into :cd_plano
FROM DUAL;
E deu tudo certo, brigada mesmo pessoal.
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

Que bom,
porém tem o furo das letras minúsculas.
priajf
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 297
Registrado em: Ter, 21 Dez 2010 8:45 am
Localização: Florianopolis

O Campo só permite maiúscula, menos um trabalho. RS
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

Imaginei isso, mas não custa lembrar para reforçar o sistema. :).
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 15 visitantes