Quali sono i vantaggi dei pacchetti rispetto alle procedure e funzioni autonome?


13

Alla ricerca di una risposta canonica alla domanda sul perché i pacchetti dovrebbero essere preferiti in un database Oracle rispetto a procedure e funzioni indipendenti.

Risposte:


12

Vantaggi dei pacchetti

Raggruppamento logico - I metodi che lavorano insieme possono essere messi in un'unità coesiva piuttosto che accoppiati logicamente ma separati fisicamente.

Metodi privati ​​sicuri : funzioni e procedure possono essere rese private per il pacchetto e utilizzate solo al suo interno. Ciò rende la superficie pubblica più semplice e sicura.

Gestione dei privilegi : le autorizzazioni possono essere concesse una volta per un gruppo di procedure che lavorano insieme anziché separatamente per ciascuna procedura / funzione richiesta.

Avvolgimento sicuro : i pacchetti avvolti sono più difficili da scartare rispetto alle funzioni / procedure avvolte.

Denominazione semplificata : uno spazio dei nomi più ampio consente nomi più semplici e che possono essere riutilizzati in altri pacchetti.

Prestazioni migliori : i pacchetti possono essere compilati e caricati nella memoria per intero piuttosto che frammentariamente come altri metodi. Questo vantaggio, se esiste, è minimo rispetto agli altri vantaggi.

Invalidazione ridotta : la modifica di un corpo del pacchetto non invalida le dipendenze come la modifica di una funzione o procedura.

Funzionalità uniche : variabili pacchetto, costanti pacchetto, inizializzazione, stato sessione, commenti pacchetto e metodi sovraccarichi.

Riferimenti:
11.2 Guida ai concetti
Poni una domanda a Tom
StackOverflow.com Domanda sulle prestazioni del pacchetto
Unwrapping Presentazione PL / SQL (pdf)


2
Non sono d'accordo con il vantaggio in termini di prestazioni. Se il caricamento del codice in memoria è un evento di attesa apprezzabile, è successo qualcosa di molto brutto. E c'è una forte possibilità che il fatto che i pacchetti riducano le prestazioni perché devi leggere più codice quando carichi l'intero pacchetto quando hai davvero bisogno di un solo metodo. In nessun caso, tuttavia, la differenza di prestazione sarà misurabile.
Grotta di Giustino,

@Justin - Questo punto è tratto dalla Guida ai concetti 11.2. Ecco cosa dice: "Prestazioni migliori: un intero pacchetto viene caricato in memoria in piccoli blocchi quando viene chiamata per la prima volta una procedura nel pacchetto. Questo carico viene completato in una sola operazione, a differenza dei carichi separati richiesti per standalone procedure. Quando si verificano chiamate a procedure impacchettate correlate, non è necessario alcun I / O su disco per eseguire il codice compilato in memoria. "
Leigh Riffel,

4
Sono d'accordo che la documentazione afferma che vi è un vantaggio in termini di prestazioni. La documentazione non è corretta o, almeno, insufficiente. Nel migliore dei casi, l'entità del "beneficio" è minuscola. E il segno del beneficio non è noto. Proprio come una scansione della tabella è più efficiente se stai leggendo la maggior parte delle righe e un accesso all'indice è più efficiente se stai leggendo una singola riga, leggere un intero pacchetto in memoria in una sola volta è utile se stai per usa ogni metodo e svantaggioso se davvero volevi l'unico metodo.
Grotta di Giustino,

1
@Justin - La tua valutazione sembra logica. Non ho trovato nulla di definitivo in un modo o nell'altro, quindi ho aggiunto un avvertimento al punto nella risposta. Grazie per il tuo contributo.
Leigh Riffel,

Penso che questo vantaggio prestazionale sia simile alla memorizzazione nella cache. Se si utilizza solo quella procedura e la si utilizza meno frequentemente, non si ottiene alcun vantaggio in termini di prestazioni. Ma se lo usi frequentemente e qualsiasi altra procedura viene utilizzata in questo pacchetto, otterrai vantaggi. Lo sviluppatore tutt'intorno sta utilizzando la memorizzazione nella cache, poiché non le prestazioni reali ma le prestazioni percepite sono migliorate. Poiché le procedure correlate vengono messe nello stesso pacchetto, è logico che vengano chiamate anche altre procedure. Si tratta della probabilità di chiamare due procedure nello stesso pacchetto. E normalmente, letto con alta probabilità, si verifica.
Atilla Ozgur,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.