[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.오라클 데이터베이스 데이터웨어 하우징 가이드에서 시작하려면 :
오라클 데이터베이스 데이터웨어 하우징 가이드에서 시작하려면 :
당신의 문은 다음과 같을 필요가 있음이 수단 :
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.당신은 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.쿼리가 참조하는 마스터 테이블 (들)에 대한 구체화 된 뷰 로그를 생성하지 않는 경우, REFRESH_FAST에 오류가 발생합니다. 사람이 구체화 된 뷰에 익숙하거나 처음 사용하지 않을 경우, 더 좋은 방법은 사용 오라클 sqldeveloper에이고 그래픽 옵션에 넣어, 그리고 오류는 훨씬 더 감각을 제공한다.
쿼리가 참조하는 마스터 테이블 (들)에 대한 구체화 된 뷰 로그를 생성하지 않는 경우, REFRESH_FAST에 오류가 발생합니다. 사람이 구체화 된 뷰에 익숙하거나 처음 사용하지 않을 경우, 더 좋은 방법은 사용 오라클 sqldeveloper에이고 그래픽 옵션에 넣어, 그리고 오류는 훨씬 더 감각을 제공한다.
-
==============================
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 미스 가치가 여기에 강조가 용이하지
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
'SQL' 카테고리의 다른 글
[SQL] 오라클에서 ROWNUM처럼 MySQL의에서 행 번호를 얻을 수있는 방법이 있나요 [중복] (0) | 2020.05.10 |
---|---|
[SQL] 오라클 행의 여러 열에서 피벗을 사용하여 (0) | 2020.05.10 |
[SQL] 어떻게 SqlAlchem y의에서 "왼쪽 외부 조인"를 실행합니다 (0) | 2020.05.10 |
[SQL] 나는 테이블의 열을 계산하려면 어떻게 (0) | 2020.05.10 |
[SQL] 오라클에서 OVER 절 (0) | 2020.05.10 |