3
respostas

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 atualizar_cli_seg_mercado.....

O que isto significa e porque não aparece esta mensagem nas aulas???

3 respostas

Olá Henrique, tudo bem?

NONEDITIONABLE é mais uma cláusula que pode ser utilizada ao criar procedimentos no Oracle, ela é utilizada para especificar se o procedimento é um objeto editado ou não editado, o NONEDITIONABLE significa que o procedimento é um objeto não editado. Também existe a outra cláusula o EDITIONABLE, significa que o procedimento é um objeto editado, quando não especificamos ela é utilizada como padrão, por este motivo para o instrutor não apareceu.

Aparentemente Henrique, está cláusula é utilizada para que seja possível ou não atualizar o procedimento enquanto ele está disponivel para os úsuarios e em utilização. Durante o curso também apareceu para mim, mas consegui finalizar sem problemas, então você pode dar continuidade ao curso que nao terá problemas Henrique.

Espero ter ajudado e bons estudos!

Entendi mas não sanou minha dúvida.

Criei da mesma forma que o professor, mas quando ele abre o que foi criado, para ela não aparece isso e para mim sim. Eu copio e retiro isso para compilar o código, mas gostaria de saber o que ele faz para não aparecer, é uma pre-configuração,? Por que quando ele clica para aparecer o código não aparece nada e no meu aparece NONEDITIONABLE?

Essa é a dúvida, pois o código dele já permite a edição e no meu aparece que a edição não é permitida. Alguma coisa foi configurada no programa dele?

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:

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.

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!