これは、私がここに投稿した問題への別の突き刺しです。別の方向に進むため、重複して閉じないでください。
データベースの列を別の列の集計で自動的に更新したいと考えています。関連する 3 つのテーブルがあります。
T_RIDER
RIDER_ID
TMP_PONYLIST
...
T_RIDER_PONY
RIDER_ID
PONY_ID
T_PONY
PONY_ID
PONY_NAME
...
T_RIDER
を介しT_PONY
てn:m関係を持ちT_RIDER_PONY
ます。
T_RIDER
さらにT_PONY
いくつかの列がありますが、ここで関連するのはTMP_PONYLIST
andのみです。PONY_NAME
TMP_PONYLIST
のセミコロンで区切られたリストです。PONY_NAMES
次のようなものを想像してください"Twisty Tail;Candy Cane;Lucky Leaf"
。T_RIDER_PONY
またはに何が起こっても、このフィールドを最新の状態に保ちたいと思いT_PONY
ます。
すべてのアプリケーションはビューでのみ動作し、テーブルに直接アクセスすることはありません。マテリアライズド ビューでこの問題を解決する必要があります。マテリアライズドは、パフォーマンス上の理由から絶対的な要件であり、ビューがコミット時にそれ自体を更新する必要があります。
ビューは次のように作成する必要があります
CREATE MATERIALIZED VIEW
V_TMP_PONYLIST
BUILD IMMEDIATE
REFRESH COMPLETE ON COMMIT
AS SELECT
...
For ...この記事の次の集計手法を試しました。
- WM_CONCAT -> 私の Oracle では利用できません
- ユーザー定義集計 ->
ORA-12054
- ROW_NUMBER および SYS_CONNECT_BY_PATH ->
ORA-12054
私はまだ試していません:
- 特定の機能
- 関数 Ref Cursor を使用したジェネリック関数
- 収集機能
これらのいずれかを具体化されたビューで機能させる機会はありますか、それとも無意味ですか。具体化されたビューで機能する可能性のある他の手法を知っていますか?
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi を使用しています。