1

Oracle テーブルの非表示列を含まない %RowType の回避策を探しています。移行中に従来のコードに影響を与えないように、非表示の列が必要であり、新しいコードで %RowType などを使用してすべての列にアクセスできるようにします。私が試したことの 1 つは、完全なテーブル構造を持つタイプ レコードを作成することですが、個々の列への %Type 参照を許可していないようです。

Type t_Inv_Test Is Record
(
  Test_Column_Vis Varchar2(20),
  Test_Column_Inv  Varchar2(20)
);

できないこと:

Function Qry(p_Test_Val In t_Inv_Test.Test_Column_Vis%Type)
Return t_Inv_Test.Test_Column_Inv%Type;

他の非表示列の質問を見た後、すべての列でビューを定義し、View%Rowtype を使用することも検討しています。これを行う最善の方法は何ですか?ありがとうジョー

4

1 に答える 1

0

「移行中にレガシー コードに影響を与えないように、非表示の列が必要です」

これは、Oracle Edition ベースの再定義の使用例のように思えます。EBR を使用すると、1 つのライブ データベースで 2 つの異なるバージョンのデータ モデルを維持できます。これは、オラクルが提供する非常に優れた機能であり、ライセンス コストを正当化します (議論してください)。

とにかく、独自の実装を手動で行う前に、必ず確認する必要があります。詳細を見る


「Oracle テーブルは編集不可能なオブジェクトです。」

はい、実際のテーブルのバージョンは 1 つだけです。EBR が可能にするのは、テーブルのさまざまなプロジェクションをさまざまなユーザーに提示することです。アイデアは、列をテーブルに追加する前にエディションを定義することです。古いエディションを使用して接続しているユーザーには、列のないバージョンのテーブルが表示されます。新しいエディションに切り替えると、列が表示されます。すべてのレガシー アプリを新しいモデルに移行したら、古いエディションを廃止できます。

この魔法は、あなたが提案するのとほとんど同じように、ビューとトリガーによって実現されますが、Oracle の組み込み機能を使用することによる堅牢性が保証されます。

于 2017-11-12T09:54:46.423 に答える