복붙노트

[SQL] 오라클 - 만드는 방법은 FAST의 REFRESH와보기를 구체화하고 JOINS

SQL

오라클 - 만드는 방법은 FAST의 REFRESH와보기를 구체화하고 JOINS

나는 오라클이 지원 확신 그래서, 그래서 내가 잘못 뭘하는지 모르겠어요. 이 코드는 작동합니다 :

CREATE MATERIALIZED VIEW MV_Test
  NOLOGGING
  CACHE
  BUILD IMMEDIATE 
  REFRESH FAST ON COMMIT 
  AS
    SELECT V.* FROM TPM_PROJECTVERSION V;

A는 가입에 내가 추가하면 나누기 :

CREATE MATERIALIZED VIEW MV_Test
  NOLOGGING
  CACHE
  BUILD IMMEDIATE 
  REFRESH FAST ON COMMIT 
  AS
    SELECT V.*, P.* FROM TPM_PROJECTVERSION V
    INNER JOIN TPM_PROJECT P ON P.PROJECTID = V.PROJECTID

지금은 오류가 발생합니다 :

ORA-12054는 다음 뷰를 구체화하기위한 ON을 설정할 수 없습니다 새로 고침 속성을 COMMIT

나는 TPM_PROJECT와 TPM_PROJECTVERSION 모두보기 로그를 구체화 만들었습니다. TPM_PROJECT는 PROJECTID의 기본 키를 가지고는 TPM_PROJECTVERSION (PROJECTID, VERSIONID)의 화합물의 기본 키를 갖는다. 이에 대한 트릭은 무엇입니까? 나는 아무 소용 오라클 매뉴얼을 통해 파고 있었어요. 감사!

해결법

  1. ==============================

    1.오라클 데이터베이스 데이터웨어 하우징 가이드에서 시작하려면 :

    오라클 데이터베이스 데이터웨어 하우징 가이드에서 시작하려면 :

    당신의 문은 다음과 같을 필요가 있음이 수단 :

    CREATE MATERIALIZED VIEW MV_Test
      NOLOGGING
      CACHE
      BUILD IMMEDIATE 
      REFRESH FAST ON COMMIT 
      AS
        SELECT V.*, P.*, V.ROWID as V_ROWID, P.ROWID as P_ROWID 
        FROM TPM_PROJECTVERSION V,
             TPM_PROJECT P 
        WHERE P.PROJECTID = V.PROJECTID
    

    노트의 또 다른 중요한 측면은 구체화 된 뷰 로그가 ROWID와 마찬가지로 생성해야한다는 것입니다.

    다음은 기능 테스트 시나리오는 다음과 같습니다

    CREATE TABLE foo(foo NUMBER, CONSTRAINT foo_pk PRIMARY KEY(foo));
    
    CREATE MATERIALIZED VIEW LOG ON foo WITH ROWID;
    
    CREATE TABLE bar(foo NUMBER, bar NUMBER, CONSTRAINT bar_pk PRIMARY KEY(foo, bar));
    
    CREATE MATERIALIZED VIEW LOG ON bar WITH ROWID;
    
    CREATE MATERIALIZED VIEW foo_bar
      NOLOGGING
      CACHE
      BUILD IMMEDIATE
      REFRESH FAST ON COMMIT  AS SELECT foo.foo, 
                                        bar.bar, 
                                        foo.ROWID AS foo_rowid, 
                                        bar.ROWID AS bar_rowid 
                                   FROM foo, bar
                                  WHERE foo.foo = bar.foo;
    
  2. ==============================

    2.당신은 ANSI에 가입하지 않고 그것을 시도?

    당신은 ANSI에 가입하지 않고 그것을 시도?

    CREATE MATERIALIZED VIEW MV_Test
      NOLOGGING
      CACHE
      BUILD IMMEDIATE 
      REFRESH FAST ON COMMIT 
      AS
    SELECT V.*, P.* FROM TPM_PROJECTVERSION V,TPM_PROJECT P 
    WHERE  P.PROJECTID = V.PROJECTID
    
  3. ==============================

    3.쿼리가 참조하는 마스터 테이블 (들)에 대한 구체화 된 뷰 로그를 생성하지 않는 경우, REFRESH_FAST에 오류가 발생합니다. 사람이 구체화 된 뷰에 익숙하거나 처음 사용하지 않을 경우, 더 좋은 방법은 사용 오라클 sqldeveloper에이고 그래픽 옵션에 넣어, 그리고 오류는 훨씬 더 감각을 제공한다.

    쿼리가 참조하는 마스터 테이블 (들)에 대한 구체화 된 뷰 로그를 생성하지 않는 경우, REFRESH_FAST에 오류가 발생합니다. 사람이 구체화 된 뷰에 익숙하거나 처음 사용하지 않을 경우, 더 좋은 방법은 사용 오라클 sqldeveloper에이고 그래픽 옵션에 넣어, 그리고 오류는 훨씬 더 감각을 제공한다.

  4. ==============================

    4.FAST REFRESH의 키 검사는 다음을 포함한다 :

    FAST REFRESH의 키 검사는 다음을 포함한다 :

    1) An Oracle materialized view log must be present for each base table.
    2) The RowIDs of all the base tables must appear in the SELECT list of the MVIEW query definition.
    3) If there are outer joins, unique constraints must be placed on the join columns of the inner table.
    

    아니 3 미스 가치가 여기에 강조가 용이하지

  5. from https://stackoverflow.com/questions/7505020/oracle-how-to-create-a-materialized-view-with-fast-refresh-and-joins by cc-by-sa and MIT license