oracle: столбец первичного ключа в материализованном представлении - PullRequest
0 голосов
/ 14 сентября 2018

Задача состоит в том, чтобы создать материализованное представление с первичным ключом в некотором уникальном столбце, чтобы материализованное представление могло быть реплицировано в другую БД.Проблема в том, что нет уникальных столбцов, потому что мне пришлось объединить очень большое количество таблиц, поэтому я не могу использовать идентификаторы из соединенных таблиц, поскольку они больше не являются уникальными в моем материализованном представлении.

Прежде всего я должен создать представление, потому что в select есть подзапросы:

CREATE VIEW V_CONTRACTS
AS

SELECT 
     ID.NEXTVAL,
     C.*
FROM (SELECT <lots of columns>
      FROM CONTRACT
      <lots of joins>
      WHERE <some filters>) C
;

Но выдается ошибка:

ORA-02287: sequence number not allowed here

Затем я создам материализованное представление как:

CREATE MATERIALIZED VIEW CONTRACTS
AS
SELECT * FROM V_CONTRACTS;

1 Ответ

0 голосов
/ 17 сентября 2018

Вы можете использовать аналитическую функцию ROW_NUMBER, чтобы получить числовой столбец.

CREATE VIEW V_TEST
AS

SELECT 
     ROW_NUMBER() OVER ( ORDER BY col1 , col2 ) as idx,
     C.*
FROM ( SELECT 'A' as col1, 'B' as col2 FROM DUAL
       UNION
       SELECT 'C' as col1, 'D' as col2 FROM DUAL
       UNION
       SELECT 'E' as col1, 'F' as col2 FROM DUAL
     ) C ;

CREATE MATERIALIZED VIEW mv_test
AS     
SELECT * FROM V_TEST ;   

SELECT * FROM mv_test ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...