2012-02-06 5 views
3

이 질문은 의미가 중복되어 있으므로 분명히해야합니다. 오라클 설명서 특히 saysCREATE VIEW 절 (11g 워드 프로세서는 동일한 개념을가집니다)에 기본 키를 지정할 수 있습니다. 그러나 나는 이런 식으로 작업을 수행하려고하면oracle - 기본 키가있는보기를 생성하십시오.

create or replace view ABC(A, B, C, CONSTRAINT A_PK PRIMARY KEY (A)) .... 

나는 "기본 키"문구에서 ORA-00922: missing or invalid option 가리키는 얻을. 문제는 오라클 문서가 잘못 되었습니까?

답변

2

사용 안 함으로 제약 조건을 만들어야합니다. 이는 실제로 쿼리 계획에 영향을주는 힌트를 옵티 마이저에 제공하는 방법입니다.

데이터 무결성은 기본 테이블 수준에서 적용됩니다. 생각할 때 뷰 수준에서 기본 키 제약 조건을 적용한다고해서 많은 의미가 없습니다. 일반 OLE보기는 데이터를 저장하지 않으며 다른 테이블에서 제공하는 데이터의 "보기"일뿐입니다. 기본 키 제약 조건이 일부 기본 테이블의 뷰에만 배치되고 해당 테이블이 제약 조건 자체를 적용하지 않는 경우 뷰에서 제약 조건을 위반하는 데이터로 테이블을 직접 업데이트 한 상황을 어떻게 처리 할 수 ​​있습니까? (즉, 테이블은 어떤 제약 조건이 뷰를 통해 배치되는지 알지 못합니다)

+0

그것은 나를위한 문서화의 문제입니다. –

8

간단한 대답은 구문이 올바르지 않다는 것입니다. 이어야하며 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> 

documentation에서 :

보기 제약

오라클은보기 제약 조건을 적용하지 않습니다. 그러나 뷰 의 조작은 기본 기본 테이블에 정의 된 무결성 제한 조건의 영향을받습니다. 즉, 기본 테이블에 대한 제약 조건을 통해 뷰 에 제약 조건을 적용 할 수 있습니다.

만의 고유, 기본 키 및 외부 키 제한 조건 뷰에 대한 을 지정할 수 있습니다보기 제약에

참고 제약 조건 테이블 제약의 부분 집합이며 다음과 같은 제한 사항이 적용됩니다 볼 수 있습니다. 그러나 WITH CHECK OPTION 절을 사용하여 뷰를 정의 할 수 있습니다. 이는 뷰에 대한 점검 제한 조건을 지정하는 것과 같습니다.

뷰 제약 조건은 DISABLE NOVALIDATE 모드에서만 지원됩니다. 은 다른 모드를 지정할 수 없습니다.뷰 제한 조건을 선언 할 때 키워드 DISABLE 을 지정해야합니다. 기본값이므로 NOVALIDATE 을 명시 적으로 지정할 필요가 없습니다.

RELY 및 NORELY 매개 변수는 선택 사항입니다. 뷰 제약 조건은 이 적용되지 않았기 때문에 보통 RELY 매개 변수를 으로 지정하여 더 유용하게 만듭니다. RELY 또는 NORELY 키워드는 DISABLE 키워드 앞에 와야합니다. 자세한 내용은 "RELY Clause"를 참조하십시오.

보기 제한 조건이 직접 적용되지 않으므로 INITIALLY DEFERRED 또는 DEFERRABLE을 지정할 수 없습니다.

references_clause의 using_index_clause, exceptions_clause 절 또는 ON DELETE 절을 지정할 수 없습니다.

오브젝트 열의 속성에 대한보기 제한 조건을 정의 할 수 없습니다.

관련 문제