2
respostas

Erro em executar ultimo comando UPDATE

Bom dia,

Quando tempo exectar o comando:

UPDATE PRODUTOS SET PRECO_LISTA = PRECO_LISTA * 1.10 WHERE SABOR = 'Maracuja';

Aparece o seguinte erro:

UPDATE PRODUTOS SET PRECO_LISTA = PRECO_LISTA * 1.10 WHERE SABOR = 'Maracuja'
    Relatório de erros -
    ORA-12839: não é possível modificar um objeto em paralelo depois de modificá-lo

Tentando entender o erro realizei a operaçao alterando apenas 1 produtos e o upgrade funcionou:

update produtos set preco_lista = preco_lista * 1.10 where codigo = '723457';

Entao acredito que o erro esta acontecendo por tentar alterar 2 produtos ou mais... sabem me dizer se é isso e porque pode estar acontecendo?

Obs. Estou usando o SQL Developer, porém o banco de dados na nuvem, ja que utilizo mac.

2 respostas

Tentei fazer tambem outros scripts como:

update TABELA_DE_VENDEDORES_FONTE set de_ferias = 0 where Matricula = '00236';
update TABELA_DE_VENDEDORES_FONTE set de_ferias = 0 where Matricula in ('00237');
update TABELA_DE_VENDEDORES_FONTE set de_ferias = 1 where Matricula in ('00238', '00235');

Mas estao dando o mesmo erro, mesmo sendo apenas 1 item:

Erro a partir da linha : 28 no comando -
update TABELA_DE_VENDEDORES_FONTE set de_ferias = 0 where Matricula in ('00237')
Erro na Linha de Comandos : 28 Coluna : 8
Relatório de erros -
Erro de SQL: ORA-12839: não é possível modificar um objeto em paralelo depois de modificá-lo
12839. 00000 -  "cannot modify an object in parallel after modifying it"
*Cause:    Within the same transaction, an attempt was made to perform
           parallel modification operations on a table after it had been modified.
           This is not permitted.
*Action:   Rewrite the transaction or break it up into two transactions
           one containing the parallel modification and the second containing the
           initial modification operation.

Oii, Philippe! Tudo bem?

O erro ORA-12839 nos indica que não é possível modificar um objeto em paralelo depois de modificá-lo, porque o Oracle Database não permite que múltiplas operações de modificação paralela ocorram na mesma tabela dentro da mesma transação.

Como sugestão, você pode desabilitar o paralelismo para a tabela PRODUTOS antes de executar o comando UPDATE, com o comando:

ALTER TABLE PRODUTOS NOPARALLEL;

Neste comando, é como se pedíssemos a alteração da configuração da tabela PRODUTOS para desativar a execução paralela de operações.

Depois, execute seu comando UPDATE novamente:

UPDATE PRODUTOS SET PRECO_LISTA = PRECO_LISTA * 1.10 WHERE SABOR = 'Maracuja';

Outra alternativa é para caso precise executar as operações em paralelo por causa do desempenho, use o PARALLEL para rever a tabela para estado paralelo:

ALTER TABLE PRODUTOS PARALLEL;

Espero que as sugestões te ajude. Qualquer dúvida, conte conosco.

Bons estudos, Philippe!!