2013-04-19 4 views
2

오라클 질문 일 수 있지만 오라클이 다른 개체의 테이블을 만들 수 있으므로보기 테이블을 만드는 것이 가능할 수도 있습니다.오라클에 뷰의 테이블을 생성 할 수 있습니까?

많은 뷰를 생성해야합니다 (일부 테이블을 피벗 할 것입니다). 각보기에는 다른 열 이름이 있습니다. schema.xls_import_id_1234_sheet_0이라는 수백 또는 수천 개의보기로 네임 스페이스를 오염시키고 싶지 않습니다.

보기 테이블을 만들 수 있습니까? 그리고 어쩌면

select * from table(
    select a_view from xls_sheet_views where xls_id = 1234 and sheet_no = 0) 

또는 같은 VARCHAR2 형처럼 쿼리를 저장하는 방법,과를 automaticly 그것을 실행하는 몇 가지 방법을 쿼리?

답변

4

아니요,보기 테이블을 만들 수 없습니다.

해결하려는 정확한 비즈니스 문제에 따라 잠재적으로 수천 개의보기가 아니라 패키지의 파이프 라인 테이블 함수로 논리를 구현할 수 있습니다. 피벗 할 수있는 모든 속성 조합에 대해 별도의 오브젝트를 작성하므로 뷰가 너무 많으면 수백 개의 뷰가 아닌 일부 매개 변수를 허용하는 파이프 라인 테이블 함수를 사용하는 것이 좋습니다. 또는 패키지에 SYS_REFCURSOR을 반환하는 몇 가지 절차가있는 것이 좋습니다.

일반적으로 파이프 라인 테이블 함수를 사용하려면 결과의 구조를 알고 싶을 것입니다. 하지만 오라클 객체 유형에서 다형성을 사용하여 까다로울 수 있습니다. 단일 오브젝트 유형을 선언하고 여러 부속 유형을 파생시킨 다음, 상위 유형에 정의 된 파이프 라인 테이블 함수에서 부속 유형의 인스턴스를 리턴 할 수 있습니다. Adrian Billington은 flexible pipelined table function과 같은 훌륭한 사례를 가지고 있습니다. 그래도 데이터 카트리지 프레임 워크를 사용하면 더 큰 어려움을 겪을 수 있으며 pipelined table function that returns an arbitrarily structured result을 개발할 수 있습니다. 자, 단지 과 같은 일을 할 수 있기 때문에 실제로 신중하게 고려하지 않고 실제로 그렇게하지 않을 것입니다. 일부 데이터를 피벗하는 것과 같은 공통점을 위해이 수준의 동적 코드를 갖춰야 할 필요가 있기 때문에 시스템의 아키텍처를 한 걸음 물러서야합니다.

+0

explict return 행 유형을 지정하지 않고 파이프 라인 된 함수를 정의하는 방법을 자세히 설명해 주시겠습니까? – SWilk

+0

@SWilk - 링크 추가 –

관련 문제