1
resposta

NONEDITIONABLE

Durante as aulas, quando o professor copia suas procedures para fazer alteração, elas vem normalmente. Quando faço a mesma coisa, elas vem com NONEDITIONABLE após create or replace: * *create or replace NONEDITIONABLE procedure atualizarclisegmercado..... * *O que isto significa e porque não aparece esta mensagem nas aulas???


O Henrique Brasil Júnior postou essa dúvida há algum tempo e não foi respondido. Na verdade, houve uma resposta e resumindo era só que "ele não teria problemas e poderia continuar fazendo o curso". Ok! Mas gostaria de saber se existe alguma explicação, pois tenho interesse em entender - ele também comentou isso. Por que seguimos exatamente a mesma criação do professor e tivemos esse resultado, e ele não? É alguma configuração? É Algo relacionado à forma com que fazemos?

1 resposta

Olá Suyanne, tudo bem?

Peço desculpas pela demora no retorno.

NONEDITIONABLE e EDITIONABLE são cláusulas Oracle que são utilizadas para especificar se o objeto é um objeto editado ou não editado, ou seja, se podemos realizar alterações neste objeto enquanto ele está sendo utilizado. Como por exemplo, procedures, funções, Views

  • NONEDITIONABLE: O objeto não pode ser editado enquanto está em uso.
  • EDITIONABLE: O objeto pode ser editado enquanto está em uso.

Quando não especificamos se o objeto é editável ou não, o Oracle por padrão deve utilizar o EDITIONABLE, a menos que seja um public synonym , package body ou um type body:

Tracho da documentação do Oracle onde aborda sobre o valor padrão

Porém, segundo a documentação do Oracle, um objeto é definido como editável a partir do valor do parâmetro COMPATIBLE, que é um dos parâmetros de inicialização do banco de dados. Se o valor do parâmetro COMPATIBLE for igual ou maior que 12, os objetos podem ser editados e recebem a cláusula EDITIONABLE.

No meu ambiente estava aparecendo a cláusula NONEDITIONABLE ao realizar a alteração nas minhas procedures, ao verificar o parâmetro COMPATIBLE, o valor para procedure estava abaixo de 12, então mesmo não informando nada ao criar a procedure, devido ao valor do parâmetro COMPATIBLE, o procedimento recebeu a cláusula NONEDITIONABLE, automaticamente.

Você pode descobrir o valor do parâmetro COMPATIBLE, para os objetos do banco de dados, executando a seguinte query:

SELECT *
FROM v$editionable_types
ORDER BY editionable_type;

A título de curiosidade, caso queira ler um pouco mais a respeito do assunto, recomendo a leitura da documentação do Oracle 18c.

OBS: Infelizmente a documentação do Oracle é em inglês, então, caso tenha dificuldade em relação a este idioma, indico que tente utilizar o tradutor do navegador, para conseguir efetuar a leitura em português, mas qualquer dúvida ou dificuldade estarei a disposição.

Abraços e bons estudos!