Olá Henrque! Peço desculpas pela demora no retorno em relação a sua dúvida.
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
:
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.
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!