Простой ответ: ваш синтаксис неверен. Вы должны указать DISABLE
.
NOVALIDATE
отключает проверку первичного ключа, в представлении это значение по умолчанию и поэтому включается автоматически; но гораздо понятнее, если вы используете его, так как в прекрасном двойном отрицании disable novalidate
отключает возможность отключить первичный ключ.
rely
является необязательным; он указывает, следует ли учитывать первичный ключ при создании представления. Антоним rely
- norely
.
Существует множество ограничений на создание ограничения представления, и, поскольку оно опирается на таблицу ниже, на самом деле оно того не стоит, как уже отмечалось @RC. Но если вам это нужно только для документации, тогда вы идете:
SQL> create table tmp_test ( a number(10), b varchar2(120) );
Table created.
SQL>
SQL> insert into tmp_test
2 select level, 'b'
3 from dual
4 connect by level <= 20
5 ;
20 rows created.
SQL> commit ;
Commit complete.
SQL>
SQL> alter table tmp_test
2 add constraint tmp_test_pk
3 primary key (a)
4 using index;
Table altered.
SQL>
SQL> create or replace view v_tmp_test (a, b
2 , constraint v_tmp_test_pk primary key (a) rely disable novalidate) as
3 select a, b
4 from tmp_test
5 ;
View created.
SQL>
Из документации :
Просмотр ограничений
Oracle не применяет ограничения представления. Однако операции над представлениями
подлежат ограничениям целостности, определенным на основе
базовые таблицы. Это означает, что вы можете наложить ограничения на представления
сквозные ограничения на базовые таблицы.
Примечания к ограничениям просмотра Ограничения просмотра - это подмножество таблиц
ограничения и подлежат следующим ограничениям:
Вы можете указать только ограничения уникальности, первичного ключа и внешнего ключа.
по просмотрам. Однако вы можете определить представление, используя опцию WITH CHECK
предложение, которое эквивалентно указанию проверочного ограничения для
вид.
Ограничения просмотра поддерживаются только в режиме DISABLE NOVALIDATE. Вы
не может указать любой другой режим. Вы должны указать ключевое слово DISABLE
когда вы объявляете ограничение вида. Вам не нужно указывать NOVALIDATE
явно, так как это по умолчанию.
Параметры RELY и NORELY являются необязательными. Посмотреть ограничения, потому что
они не применяются, обычно задаются параметром RELY для
сделать их более полезными. Ключевое слово RELY или NORELY должно предшествовать
ОТКЛЮЧИТЬ ключевое слово. Пожалуйста, обратитесь к «Положению РЕЛИ» для получения дополнительной информации.
Поскольку ограничения вида не применяются напрямую, вы не можете указать
ПЕРВОНАЧАЛЬНО ЗАДЕРЖАНО или ОТЛОЖЕНО.
Вы не можете указать using_index_clause, исключение_clause
предложение или предложение ON DELETE в файле reference_clause.
Нельзя определить ограничения вида для атрибутов столбца объекта.