Alguém manja como colocar mascara no retorno de um SELECT para colunas de CNPJ e CPF no Oracle?
Infelizmente não posso fazer isso na aplicação…
Alguém manja como colocar mascara no retorno de um SELECT para colunas de CNPJ e CPF no Oracle?
Infelizmente não posso fazer isso na aplicação…
Você pode fazer utilizando o REGEX, é uma possível solução!
--FORMATANDO CNPJ COM REGEX
SELECT regexp_replace(LPAD('00000000000191', 14),'([0-9]{2})([0-9]{3})([0-9]{3})([0-9]{4})','\1.\2.\3/\4-')as CNPJ FROM dual;
--FORMATANDO CPF COM REGEX
SELECT regexp_replace(LPAD('00000000191', 11),'([0-9]{3})([0-9]{3})([0-9]{3})','\1.\2.\3-') as CPF from dual;
Mano serviu direitinho… Vlw muito obrigado!
Complementando a resposta do @Jonathan_Medeiros, caso você precise desta formatação em mais de um ponto da sua aplicação, poderia criar suas funções de formatação. Ex:
CREATE OR REPLACE FUNCTION formata_cpf(
p_cpf IN VARCHAR2
) RETURN VARCHAR2
IS
BEGIN
RETURN regexp_replace(LPAD(p_cpf, 11),'([0-9]{3})([0-9]{3})([0-9]{3})','\1.\2.\3-');
END;
E realizar a chamada em seus procedimentos:
SELECT formata_cpf('31581057059') FROM dual;
Nossa show de bola @Bruno_Almeida vou fazer o esquema aqui, porque preciso formatar pra mais coisas…
Só pra sanar possíveis curiosidades, estou criando um arquivo csv apartir do select, sei que é uma gambi sair concatenando as coisas, mas foi a solução mais rápida que encontramos aqui pra resolver a entrega em tempo, agora vamos tratando alguns bug mas acho que no futuro vamos mudar isso ai…
No mysql tem um esquema pra exportar direto pra csv, no oracle deve ter tbm né?
Na opinião de vocês quao pior (em questão de performance) é tratar essas mascaras no banco em relação a tratar na aplicação?
Bom, referente a exportação em CSV, se você estiver utilizando o SQL Developer da Oracle, faça assim:
SELECT /*csv*/ * FROM nome_da_sua_tabela
E execute o comando como script (F5) ao invés de executar como instrução SQL (Ctrl-Enter). Não sei dizer se isso funciona executando este comando a partir da sua aplicação, teria que testar.
Referente a realizar o mascaramento por funções do banco de dados, em relação a performance, se suas funções forem bem escritas, não teria problemas, pelo menos eu nunca tive esse tipo de problema, mesmo em um sistema de grande porte, o Oracle aguenta bem sem impacto na performance.
Na verdade a exportação do csv é feito pela aplicação, então assim, eu monto o sql com os || e ; pra poder no retorno pegar as linhas e montar um arquivo .csv
O que digo é que o mysql tem um comando que gera um csv em um diretorio que voce apontar na maquina/servidor no oracle não sei se tem…
Eu sempre utilizei a formatação de informações no banco e trago tudo pronto para a aplicação, o maior problema de performance que eu vejo no caso é o código mal escrito/estruturado, agora se o código é feito da melhor maneira possível, isso nunca vai ser um problema, até mesmo porque, queira ou não queira oracle é oracle né kkkkk
Da pra usar o format com o caractere de escape \
assim: FORMAT(12345678000100,'##\.###\.###/####-##')
o resultado fica 12.345.678/0001-00