Gravar número com dois dígitos sendo o da esquerda 0

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
Tinho
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 318
Registrado em: Seg, 16 Nov 2009 4:50 pm
Localização: São Paulo - SP

Estou tentando inserir um valor numérico de dois digitos em uma coluna com a definição do datatype como number, porém não está gravando com zeros a esquerda. Mesmo com o uso do LPAD. Pensei em forçar o formato do número com o to_char, mas implicitamente o oracle converterá para número.

Neste teste que eu fiz está dando certo no entanto ao gravar na tabela é gravado apena o número 2, segue:

Selecionar tudo


declare
 vn1 number;
 vn2 varchar2(2) := '02';
begin
 
 vn1 := vn2;
 dbms_output.put_line(lpad(vn1,2,0));
 dbms_output.put_line(replace(to_char(vn1,09),' ',0));
end;

Alguma sugestão?
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

Cara,
você não vai gravar número(NUMBER) com 0 a esquerda.
No máximo você vai poder alterar o formato de exibição.
Mas porque precisa gravar com 0 a mais?????
Tinho
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 318
Registrado em: Seg, 16 Nov 2009 4:50 pm
Localização: São Paulo - SP

Eis o dilema Noctifero é CPF cara!

O resultado da gravação dos dados nesta tabela serve para criar uma regra. A minha sugestão é a seguinte:

Como o digito do CPF é gravado separado do restante do corpo que compõe o número, então ele só pode ter no máximo dois digitos, caso tenha apenas um digito, no resultado do SELECT da regra eu trato isso para seja adicionado um zero apenas para equipar o dado a ser procurado do dado que foi gravado na tabela, algo assim:

Selecionar tudo


trim(cnpj || decode(length(cnpj_digito),1, replace(to_char(cnpj_digito,09),' ',0),cnpj_digito)) as cpf_form

Ou no WHERE:

Selecionar tudo


cnpj = lpad(999999999, 9, '0')
cnpj_digito = lpad(9,2,'0');

Neste caso resolveria.

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

Daniel N.N.

O que posso lhe aconselhar é gravar como número e fazer os LPAD depois.
A não ser que você possa já gravar como TEXTO.
Mas NUMBER com zero na frente você não vai ter.
Responder
  • Informação
  • Quem está online

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