2

2 つの異なる Oracle 11g2 システムで実行されるコード パッケージを維持しようとして、コードの行を変更するのを忘れてしまいました。特定のデータ セットを使用して 1 つのシステムで開発し、別のデータ セットを使用して別のシステムでテストします。

違いはそれほど大きくありませんが、パッケージを実行するには、2 つの異なるパッケージの 2 つの異なるクエリで 1 つのフィールド名を変更する必要があることが含まれます。あるシステムでは 1 つのフィールドを使用し、別のシステムでは... 別のフィールドを使用します。データベースのスキーマ名、オブジェクト名、およびフィールド名は同じですが、ホスティング システムのサーバー名は異なります。

変更は文字通り次のように簡単です

INSERT INTO PERSON_HISTORY 
  ( RECORD_NUMBER, 
    UNIQUE_ID, 
    SERVICE_INDEX, 
    [... 140 more fields... ] 
   ) 
 SELECT LOD.ID RECORD_NUMBER ,
      -- for Mgt System, use MD5 instead of FAKE_SSN
      -- Uncomment below, and comment out Dev system statement
      -- MD5 UNIQUE_ID ,
      -- for DEV system, use below
         '00000000000000000000' || LOD.FAKE_SSN  UNIQUE_ID , 
         null  SERVICE_INDEX ,
         [... 140 more fields... ] 
 FROM LEGACY_DATE LOD
 WHERE  (conditions follow)
 ;

クエリの 1 つでフィールド名の変更の 1 つを見逃しており、数日間の実行はくだらないものです。

ばかげた理由でここには触れませんが、開発者の変更をバージョン間で手動で変換および再処理し、必要な変更をシステム間で転送および更新するなど、すべてのコードを維持することになります。

コードを交換するために提供しなければならない反復入力を減らそうとしています。このステップを自動化して、再び見落とさないようにしたいと考えています。

Oracle からデータベース システムの名前を取得し、単一行を自動的にスワップする条件付きコンパイルを実装したかったのですが、Oracle の条件付きコンパイルにはパッケージの静的定数 (この場合はブール値) が必要です。sys_context 関数を使用して値を入力できません。または、ME が sys_context からデータを取得して条件付きで評価し、それを定数に割り当てることはできないようです。オラクルには何もありません。DB_DOMAIN、DB_NAME、または SERVER_HOST はシステムを区別するために機能する可能性がありますが、情報を使用する方法が見つかりません。

別のシステムにコードを移動するときに手動で設定するグローバル定数を作成するというオプションもありますが、この時点では、転送のために実行する手順が非常に多いため、それを台無しにしてしまうのではないかと心配しています。 . これを他のパッケージや自分のプロセスから独立させたいと思います。

これを行う良い方法はありますか?

-------- 編集 手順を試して、週末にビューを把握しようとします。最終的に、プロジェクトは「ただ実行する」ことを期待する顧客に引き渡されるため、スイッチの目的や、パッケージに「特別な」コードが含まれている理由を理解できません。そして、彼らはそうする必要はありません...彼らがコメントを見るかどうかさえわかりません。ありがとうございました

4

1 に答える 1