Это еще одна проблема, которую я разместил здесь . Пожалуйста, не закрывайте как дубликат,
потому что это идет в другом направлении.
Я хочу автоматически обновить столбец базы данных с помощью совокупности другого столбца.
Здесь задействованы три таблицы:
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
и 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
...
Для ... Я попробовал следующие методы агрегирования из этой статьи .
- WM_CONCAT -> недоступно в моем Oracle
- Определяемый пользователем агрегат ->
ORA-12054
- ROW_NUMBER и SYS_CONNECT_BY_PATH ->
ORA-12054
Я еще не пробовал:
- Специальная функция
- Функция Общая функция с использованием Ref Cursor
- Функция COLLECT
Видите ли вы какой-либо шанс заставить что-либо из этого работать с материализованным представлением, или это бессмысленно? Знаете ли вы о других методах, которые могут работать с материализованным представлением?
Я использую Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi.