Quais são os benefícios dos pacotes sobre procedimentos e funções independentes?


13

Procurando uma resposta canônica para a pergunta sobre por que os pacotes devem ser preferidos em um banco de dados Oracle em vez de procedimentos e funções independentes.

Respostas:


12

Benefícios dos Pacotes

Agrupamento lógico - Os métodos que trabalham juntos podem ser colocados em uma unidade coesa, em vez de apenas acoplados logicamente, mas fisicamente separados.

Métodos privados seguros - Funções e procedimentos podem ser tornados privados para o pacote e somente ser usados ​​nele. Isso torna a superfície pública mais simples e mais segura.

Gerenciamento de privilégios - As permissões podem ser concedidas uma vez para um grupo de procedimentos que trabalham juntos, em vez de separadamente, para cada procedimento / função necessária.

Invólucro seguro - Pacotes embrulhados são mais difíceis de desembrulhar do que funções / procedimentos embrulhados.

Nomenclatura simplificada - Um espaço para nome maior permite nomes mais simples e que podem ser reutilizados em outros pacotes.

Melhor desempenho - Os pacotes podem ser compilados e carregados na memória por inteiro, em vez de fragmentados como outros métodos. Esse benefício, se existir, é mínimo comparado aos outros benefícios.

Invalidação reduzida - A alteração do corpo de um pacote não invalida dependências, como a alteração de uma função ou procedimento.

Recursos exclusivos - Variáveis ​​do pacote, constantes do pacote, inicialização, estado da sessão, comentários do pacote e métodos sobrecarregados.

Referências:
11.2 Guia de conceitos Faça uma
pergunta a Tom
StackOverflow.com Pergunta sobre o desempenho do pacote
Desempacotando a apresentação PL / SQL (pdf)


2
Eu tenho que discordar do benefício de desempenho. Se o carregamento de código na memória é um evento de espera apreciável, algo muito ruim aconteceu. E existe uma forte possibilidade de o fato de os pacotes diminuirem o desempenho, porque você precisa ler mais código ao carregar o pacote inteiro, quando realmente só precisava de um único método. Em nenhum dos casos, porém, a diferença de desempenho será mensurável.
— Justin Caverna

@ Justin - Esse ponto é do Guia de conceitos 11.2. Aqui está o que diz: "Melhor desempenho - Um pacote inteiro é carregado na memória em pequenos blocos quando um procedimento no pacote é chamado pela primeira vez. Esse carregamento é concluído em uma operação, em oposição às cargas separadas necessárias para o standalone. Quando ocorrem chamadas para procedimentos empacotados relacionados, nenhuma E / S de disco é necessária para executar o código compilado na memória. "
— Leigh Riffel

4
Concordo que a documentação alega que há um benefício de desempenho. A documentação está incorreta ou, no mínimo, insuficiente. Na melhor das hipóteses, a magnitude do "benefício" é minúscula. E o sinal do benefício é desconhecido. Assim como uma varredura de tabela é mais eficiente se você estiver lendo a maioria das linhas e um acesso ao índice for mais eficiente se você estiver lendo uma única linha, a leitura de um pacote inteiro na memória de uma só vez é benéfica se você quiser use todos os métodos e desvantajosos se você realmente quiser apenas o único método.
— Justin Caverna

1
@ Justin - Sua avaliação parece lógica. Não encontrei nada definitivo de uma maneira ou de outra, então adicionei uma ressalva ao ponto da resposta. Obrigado pela sua contribuição.
— precisa

Eu acho que esse benefício de desempenho é semelhante ao cache. Se você usar apenas esse procedimento e usá-lo com menos frequência, não obterá nenhum benefício de desempenho. Mas se você o usar com freqüência e qualquer outro procedimento for usado neste pacote, você obterá benefícios. O desenvolvedor ao redor está usando o cache, pois o desempenho não é real, mas o desempenho percebido é aprimorado. Como os procedimentos relacionados são colocados no mesmo pacote, é lógico que outros procedimentos também sejam chamados. Isso significa probabilidade de chamar dois procedimentos no mesmo pacote. E normalmente, leia com alta probabilidade, isso ocorre.
— Atilla Ozgur
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.