Tempo aproximado para leitura: 00:01:50 min
Ocorrência
No módulo Controle Manutenção Industrial - MI, ao tentar excluir apontamento de inatividade o Sistema apresenta o erro na tela, mas porem não exclui o mesmo.
Ambiente
TOTVS Agro – TOTVS Agro – Bioenergia – Controle Manutenção Industrial - MI – Versão 12.1.2412
Causa
Esse incidente ocorre, pois ao tentar excluir apontamento de inatividade o Sistema apresenta o erro na tela, mas porem não exclui o mesmo.
Solução
Realize o passo a passo do Select. Oracle SQL:
1º - Primeiro * Select vai realizar o comando de retirar a chave.
BEGIN
FOR c IN (
SELECT constraint_name, constraint_type
FROM user_constraints
WHERE table_name = 'MCPMOINAT'
AND constraint_type IN ('P', 'R', 'U') -- P: Primary, R: Foreign, U: Unique
) LOOP
EXECUTE IMMEDIATE 'ALTER TABLE MCPMOINAT DROP CONSTRAINT ' || c.constraint_name;
END LOOP;
END;
/2º - Segundo * Select vai incluir novamente a chave.
alter table MCPMOINAT
add constraint PK_MCPMOINAT primary key (ID_MOINAT);
alter table MCPMOINAT
add constraint CFK_MOINAT__FUNCI foreign key (ID_FUNCI)
references MCPFUNCI (ID_FUNCI);
alter table MCPMOINAT
add constraint CFK_MOINAT__MOTINAT foreign key (MOT_CODIGO)
references MCPMOTINAT (MOT_CODIGO);
alter table MCPMOINAT
add constraint CFK_MOINAT__ORDEM foreign key (EMP_CODEMP, ORD_CODOS)
references MCPORDEM (EMP_CODEMP, ORD_CODOS);3º - Caso não permita a criação das PKs.
Esses comandos SQL têm como objetivo resetar e reatribuir novos valores únicos para a chave primária id_moinat da tabela mcpmoinat, utilizando uma sequência fnovasequencia para gerar novos valores.
1. Backup da tabela;
create table mcpmoinat_bck as select * from mcpmoinat;- Cria uma cópia de segurança da tabela mcpmoinat, chamada mcpmoinat_bck.
2. Remoção de restrições e índices existentes;
alter table mcpmoinat drop constraint pk_mcpmoinat;
drop index pk_mcpmoinat;
- Remove a constraint de chave primária da tabela.
- Remove o índice associado à chave primária (caso exista).
3. Criação de coluna auxiliar e cópia do ID atual;
alter table mcpmoinat add id_moinat_bck number(12);
update mcpmoinat set id_moinat_bck = id_moinat;- Cria uma nova coluna id_moinat_bck para guardar os valores antigos do ID.
- Copia os valores da chave primária antiga para essa nova coluna.
4. Zerar os valores atuais do ID;
update mcpmoinat set id_moinat = 0;- Zera os valores da coluna id_moinat para permitir a reatribuição de novos IDs.
5. Zerar a sequência associada ao ID;
delete sequencia where upper(seq_tabela) = 'MCPMOINAT';
commit;
- Remove o controle atual da sequência gerenciador de IDs automáticos.
- O commit salva todas as mudanças feitas até aqui no banco.
6. Criação da procedure para atualizar os Ids;
create or replace procedure updateid_moinat as
...
end updateid_moinat;- Cria uma procedure que:
- Percorre todos os registros ordenados por id_moinat_bck.
- Para cada registro, gera um novo valor de id_moinat usando a função fnovasequencia.
7. Execução da procedure;
call updateid_moinat();- Executa a procedure criada e reatribui os IDs únicos para cada registro na tabela.
8. Restauração da chave primária;
alter table mcpmoinat add constraint pk_mcpmoinat primary key(id_moinat);- Recria a constraint de chave primária com os novos valores de id_moinat.
9. Limpeza.
alter table mcpmoinat drop column id_moinat_bck;
drop procedure updateid_moinat;- Remove a coluna auxiliar que guardava os IDs antigos.
- Exclui a procedure que foi usada para atualizar os IDs.
Este script serve para:
- Resetar os IDs da tabela mcpmoinat.
- Atribuir novos IDs únicos, sem perder o histórico, pois ele é salvo em backup.
- Garantir que os novos IDs não colidam com os antigos.
0 Comentários