スタンドアロンの手順と機能に対するパッケージの利点は何ですか?


13

パッケージがスタンドアロンの手順や機能よりもOracleデータベースで優先されるべきである理由の質問に対する標準的な答えを探しています。

回答:


12

パッケージの利点

論理的なグループ化 –一緒に機能するメソッドは、単に論理的に結合されているが物理的に分離されているのではなく、まとまりのあるユニットにまとめることができます。

セキュアなプライベートメソッド -関数とプロシージャはパッケージに対してプライベートにでき、パッケージ内でのみ使用できます。これにより、パブリックサーフェスがよりシンプルで安全になります。

権限管理 -必要な各手順/機能に個別にではなく、連携して機能する手順のグループに1度だけ権限を付与できます。

安全なラップ -ラップされたパッケージは、ラップされた関数/プロシージャよりもラップを解除するのが困難です。

簡略化された命名 –より大きな名前空間では、より単純な名前を使用でき、他のパッケージで再利用できます。

パフォーマンスの向上 –パッケージをコンパイルして、他のメソッドとして断片的にではなく、メモリ全体にロードできます。存在する場合のこの利点は、他の利点に比べて最小限です。

無効化の削減 –パッケージ本体を変更しても、関数またはプロシージャを変更しても依存関係は無効になりません。

固有の機能 -パッケージ変数、パッケージ定数、初期化、セッション状態、パッケージコメント、オーバーロードメソッド。

リファレンス:
11.2コンセプトガイド
質問をする
StackOverflow.comパッケージパフォーマンス アンラッピングPL / SQLプレゼンテーションに関する質問
(pdf)


2
パフォーマンスの利点に同意する必要があります。コードをメモリにロードするのがかなりの待機イベントである場合、非常に悪いことが起こっています。そして、単一のメソッドだけが本当に必要なときに、パッケージ全体をロードするときに、より多くのコードを読み込む必要があるため、パッケージのパフォーマンスが低下する可能性があります。ただし、どちらの場合でも、パフォーマンスの差は測定可能です。
ジャスティン洞窟

@Justin-そのポイントは11.2コンセプトガイドからです。「パフォーマンスの向上-パッケージ内のプロシージャが初めて呼び出されると、パッケージ全体が小さなチャンクでメモリにロードされます。このロードは、スタンドアロンに必要な個別のロードとは対照的に、1回の操作で完了します。プロシージャ。関連するパッケージプロシージャの呼び出しが発生した場合、メモリでコンパイルされたコードを実行するためにディスクI / Oは必要ありません。
リーリッフェル

4
私は、ドキュメントがパフォーマンス上の利点があると主張していることに同意します。ドキュメントが間違っているか、少なくとも不十分です。最良の場合、「利点」の大きさはごくわずかです。そして、利益の兆候は不明です。ほとんどの行を読み取る場合はテーブルスキャンがより効率的であり、単一の行を読み取る場合はインデックスアクセスがより効率的であるように、パッケージ全体を一度にメモリに読み取ることは、すべての方法を使用します。本当に1つの方法だけが必要な場合は不利です。
ジャスティン洞窟

1
@Justin-あなたの評価は論理的に聞こえます。いずれにせよ決定的なものを見つけていないので、答えのポイントに注意を追加しました。ご意見ありがとうございます。
リーリッフェル

このパフォーマンス上の利点は、キャッシングに似ていると思います。その手順のみを使用し、使用頻度を低くすると、パフォーマンス上の利点は得られません。しかし、頻繁に使用し、このパッケージで他の手順を使用すると、メリットが得られます。実際のパフォーマンスではなく、認識されるパフォーマンスが改善されるため、開発者はすべてキャッシュを使用しています。関連するプロシージャは同じパッケージに格納されるため、他のプロシージャも呼び出されるのは当然です。これは、同じパッケージ内の2つのプロシージャを呼び出す確率に関するものです。そして、通常、高い確率で読むと、それが起こります。
アティラオズグル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.