DEV Community

Fillipi | Programador
Fillipi | Programador

Posted on

CNPJ Alfanumérico | Oracle Database

A Receita Federal Brasileira, irá homologar neste ano de 2026, a alteração do formato do CNPJ numérico para o CNPJ alfanumérico.

Hoje, exploraremos um pouco o casamento das funções ALTER TABLE e UPDATE,
visando a alteração de uma coluna CNPJ do tipo number(14,0) para o tipo varchar2(14).

Vamos imaginar que nossa tabela possui 1.000 registros de CNPJs (numéricos). A estrutura atual da tabela é esta:

CREATE TABLE TB_EMPRESA (
    ID            NUMBER NOT NULL,
    CNPJ          NUMBER(14,0) NOT NULL,
    RZ_SOCIAL     VARCHAR2(200) NOT NULL,
    NOME_EMPRESA  VARCHAR2(200) NOT NULL,
    DATA_CRIACAO  DATE DEFAULT SYSDATE,
    CONSTRAINT PK_TB_EMPRESA PRIMARY KEY (ID)
);

Enter fullscreen mode Exit fullscreen mode

No cenário atual, a máscara da aplicação só aceita números, exemplo: '00"."000"."000"/"0000"-"00'.

Passo 1: criando uma nova coluna CNPJ_NOVO VARCHAR2(14)

ALTER TABLE TB_EMPRESA ADD CNPJ_NOVO VARCHAR2(14);

Enter fullscreen mode Exit fullscreen mode

Passo 2: realizar o update de todos os 1.000 registros para a nova tabela, garantindo o seu tamanho total, utilizando a função LPAD para preencher com zeros à esquerda a coluna CNPJ_NOVO, com os da coluna CNPJ (antigos) menores que 14 dígitos.

UPDATE TB_EMPRESA SET CNPJ_NOVO = LPAD(CNPJ, 14, '0');
COMMIT;
Enter fullscreen mode Exit fullscreen mode

Passo 3: conferir os dados

SELECT CNPJ, CNPJ_NOVO FROM TB_EMPRESA;

Enter fullscreen mode Exit fullscreen mode

Passo 4: se tudo ok, deletar a coluna antiga e renomear a nova com as características anteriores

-- 1. Remove a coluna antiga (e suas constraints/índices)
ALTER TABLE TB_EMPRESA DROP COLUMN CNPJ CASCADE CONSTRAINTS;

-- 2. Renomeia a coluna nova para o nome original
ALTER TABLE TB_EMPRESA RENAME COLUMN CNPJ_NOVO TO CNPJ;

-- 3. Adiciona a constraint de NOT NULL
ALTER TABLE TB_EMPRESA MODIFY CNPJ NOT NULL;

Enter fullscreen mode Exit fullscreen mode

Passo 5: conferir seus registros na tabela e nova estrutura será esta

CREATE TABLE TB_EMPRESA (
    ID            NUMBER NOT NULL,
    RZ_SOCIAL     VARCHAR2(200) NOT NULL,
    NOME_EMPRESA  VARCHAR2(200) NOT NULL,
    DATA_CRIACAO  DATE DEFAULT SYSDATE,
    -- no Oracle, a nova coluna muda de posição
    CNPJ          VARCHAR2(14) NOT NULL, 
    CONSTRAINT PK_TB_EMPRESA PRIMARY KEY (ID)
);

Enter fullscreen mode Exit fullscreen mode

Neste novo cenário, a máscara da aplicação aceita números e letras, exemplo: 'XX"."XXX"."XXX"/"XXXX"-"XX'.

A ideia deste artigo foi mostrar de maneira prática e scripts simples que é possível realizar essa mudança sem muitos problemas.

Porém, ressalvo que o Desenvolvedor deve conhecer bem sua base de dados e o quanto sua aplicação é sensível para este tipo de alteração.

Até a próxima!

Fillipi | Programador

YouTube | Instagram

Top comments (0)