2

特定の pl/sql オブジェクト (プロシージャなど) が開発環境、テスト環境、および本番環境の間で一致することを確認する必要がありました。コードが一致することを 100% 確実に比較して知るために、次のような単純な関数を作成しました。

function get_plsql_hash (p_owner varchar2, p_name varchar2, p_type varchar2) return number as
    v_hash number;
begin

select sum(ora_hash(line||'!'||text)) into v_hash
from dba_source
where owner = p_owner
  and name = p_name
  and type = p_type;

if v_hash is null then
    return 0;
else
    return v_hash;
end if;

exception
when others then
    return 0;
end get_plsql_hash;

それはうまくいきます。コードを 1 文字でも変更すると、別のハッシュ値 (チェックサムまたは任意の名前) が取得されます。Oracle ディクショナリ ビューを使用して、pl/sql コードだけでなく、参照/ルックアップ テーブル、テーブル構造、テーブル特権、インデックス、制約、シーケンスなどのデータも検証できます。上に貼り付けた関数は、ほんの一例です。

これが私の質問です.... Oracle データ ディクショナリには、各オブジェクトを表す一意の値を与える可能性のある、私が知らない何かが既に存在しますか? dba_objects に OBJ_CKSUM などの名前の列があれば最高です。オラクルがオブジェクトが変更されるたびにこれを内部的に保持できれば、私が書いたコードは完全に不要になります (数百行しかありませんが、維持するコードがないゼロ行の方がはるかに優れています)。そのような機能が存在しない場合、オラクルは将来のリリースでこれを追加することを検討する可能性がありますか? 非常に役立つと思いますが、他の開発者、テスター、またはリリース管理者が同意するかどうかはわかりません。オラクルに機能をリクエストする方法がわかりません。

4

0 に答える 0