1

少なくとも 3 つまたは 4 つの異なる場所から呼び出される Oracle プロシージャがある状況があります。一部のデータに応じてカスタムコードを呼び出せるようにする必要があります。カスタム コードは顧客固有のものです。そのため、顧客 A は ABC を実行したい場合がありますが、顧客 B は 6-7-8 を実行したいと考えており、顧客 C は特別なことをする必要はありません。顧客 D...Z が来ても、既存の手順を変更する必要はありません。

顧客固有の手順を表に入力できるようにしたいと考えています。この既存のプロシージャで、そのデータベース テーブルにカスタム コード プロシージャが存在するかどうかを確認し、存在する場合はそれを実行します。各顧客コード プロシージャには、同じパラメーターがあります。

例えば:

  1. 私のアプリケーション (3 つ以上の場所) は、この「削除」手順を呼び出します
  2. この削除手順では、呼び出す子手順の名前を検索します (存在する場合)。
  3. 存在する場合は、その削除手順を実行します (パラメーターを渡します)

ストアド プロシージャへの呼び出しを含む文字列を作成することで、これを実行できることはわかっています。しかし、Oracle 10g にこの種のことを行うための組み込み機能があるかどうか知りたいですか?

4

4 に答える 4

2

私たちが行った最終的な解決策は、プロシージャの名前をデータベース テーブルに格納することでした。次に、SQL 呼び出しを作成し、EXECUTE ステートメントを使用します。

于 2009-09-14T17:04:15.423 に答える
2

顧客はそれぞれ独自のデータベースを持っていますか? その場合、最良のオプションは条件付きコンパイルを使用することです。これには、動的 SQL を必要としないという利点があります。メイン プログラムが常にカスタム プロシージャを呼び出すようにし、CC フラグを使用して含まれるコードを変更します。

それ以外の場合、Oracle にはルール エンジンがありますが、実際に使用することを意図したものではありません。

于 2009-09-01T06:31:04.327 に答える
0

APCの回答に同意し、それを拡張するだけです。このホワイトペーパーで「コンポーネントベースのインストール」を探している場合、条件付きコンパイルを使用して解決される同様の問題について説明しています。

于 2009-09-01T06:59:06.297 に答える
0

要件を考えると、あなたのソリューションは合理的だと思われるので、投票しました。

もう 1 つのオプションは、テーブル ルックアップの結果をループして、プロシージャへの呼び出しを大きな case ステートメント内に配置することです。より多くのコードになりますが、依存関係チェーンを可視化できるという利点があるため、不足しているアクセス許可や無効なプロシージャをより簡単に見つけることができます。

于 2010-01-14T03:09:33.703 に答える