Tempo aproximado para leitura: 00:01:40 min
Dúvida
Ao tentar excluir apontamento de inatividade o Sistema apresenta erro e não exclui o mesmo.
Ambiente
TOTVS Agro - TOTVS Agro - Bioenergia - Controle Manutenção Industrial - MI – 12.1.2412
Solução
Realize o passo a passo dos scripts. Oracle SQL:
1º - Primeiro script 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 script vai incluir novamente a chave;
alter table MCPMOINATadd constraint PK_MCPMOINAT primary key (ID_MOINAT);alter table MCPMOINATadd constraint CFK_MOINAT__FUNCI foreign key (ID_FUNCI)references MCPFUNCI (ID_FUNCI);alter table MCPMOINATadd constraint CFK_MOINAT__MOTINAT foreign key (MOT_CODIGO)references MCPMOTINAT (MOT_CODIGO);alter table MCPMOINATadd 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