2009-08-31 11 views
1

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

テーブルに顧客固有の手順を入力したいと考えています。この既存の手順では、カスタムコードプロシージャが存在する場合はそのデータベーステーブルをチェックし、カスタムコードプロシージャが存在する場合はそれを実行します。顧客コード手順のそれぞれは、同じパラメータを有する。例えば

  1. 私のアプリケーション(3+場所は)1がで存在する場合(コールする児童・プロシージャの名前を検索し、この削除の手順で手続き
  2. これは「削除」を呼び出しますすべての)
  3. 1が存在する場合、私は、ストアドプロシージャへの呼び出しを含む文字列を構築し、これを行うことができます知っている

)でパラメータを渡す(その削除の手順を実行します。しかし、Oracle 10gにこのようなことをするための何かが組み込まれているかどうかを知りたいですか?

答えて

2

最終的な解決策は、プロシージャの名前をデータベーステーブルに保存することでした。その後、SQL呼び出しを作成し、EXECUTE文を使用します。

2

各お客様には独自のデータベースがありますか?もしそうなら、最良の選択肢はconditional compilationです。これには、動的SQLを必要としないという利点があります。メインプログラムは常にカスタムプロシージャを呼び出し、CCフラグを使用してコードを変更します。

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

+0

申し訳ありませんが、私はこれが答えを持っていたことを認識しませんでした - いいえ、それはすべて単一のデータベースとストアドプロシージャの単一のセットです。 –

0

APCの答えに同意し、それを拡張するには、this白書で「コンポーネントベースインストール」を検索すると、条件付きコンパイルを使用して解決された同様の問題が説明されます。

0

あなたの解決策は要件を考えると妥当と思われるので、私はそれを投票しました。

もう1つの方法は、テーブルルックアップの結果をループして、ビッグケースステートメント内のプロシージャにコールすることです。より多くのコードを作成できますが、依存関係のチェーンを表示できるという利点があり、不足しているアクセス許可や無効な手順を簡単に見つけ出すことができます。

関連する問題