2013-02-12 2 views
2

온라인이나 다른 자료에서 찾은 것이 없으며 다른보기와 다른 테이블을 결합하여보기를 구성 할 수 있는지 궁금합니다. 이것과 비슷한 뭔가가 Server_ref.part_notification_view 뷰에 합류하는 것으로 추측됩니다.다른보기에서보기 만들기

Create View "PART_NOTIFICATION_VIEW" ("NOTIFICATION_IX", "PART_NBR", "MFG_CD", "PART_CLASS_CD", "LEADTIME", "BILLTO_CUST_NBR", "BILL_TO_ACCT_NM", "CUST_PART_NBR", "LAST_CUST_PO", "LAST_REQ_DT", "QTY_OPEN", "YEAR_USAGE", "AVAILABLE_SALE_STANDARD_QT", "ISSUE_DATE", "EFFECTIVE_DATE", "BRIEF_DESCRIPTION", "NOTIFICATION_TYPE", "ACTUAL_DOCUMENT_LINK", "AFFECTED_PARTS_LIST_DOC_LINK", "EMAIL_LINK", "FILE_FOLDER", "RECOMMENDED_REPLACEMENT", "PCN_TYPE", "IMPACT", "MANUFACTURER_NM", "LAST_BUY_DT", "LAST_SHIP_DT", "SALES_MIN_BUY_QTY", "SALES_MIN_PKG_QTY", "PART_DESC", "BOND_QOH", "BOND_QIT", "BRANCH_QOH", "BRANCH_QIT", "BOND_QTY", "BOND_PIPELINE", "BOND_OP", "BRAND_CD", "STATUS", "COMMENTS") 
AS 
    SELECT 
    svr.notification_ix, 
    svr.part_nbr, 
    svr.mfg_cd, 
    svr.part_class_cd, 
    svr.leadtime, 
    svr.billto_cust_nbr, 
    svr.bill_to_acct_nm, 
    svr.cust_part_nbr, 
    svr.last_cust_po, 
    svr.last_req_dt, 
    svr.qty_open, 
    svr.year_usage, 
    svr.available_sale_standard_qt, 
    svr.issue_date, 
    svr.effective_date, 
    svr.brief_description, 
    svr.notification_type, 
    svr.actual_document_link, 
    svr.affected_parts_list_doc_link, 
    svr.email_link, 
    svr.file_folder, 
    svr.recommended_replacement, 
    svr.pcn_type, 
    svr.impact, 
    svr.manufacturer_nm, 
    svr.last_buy_dt, 
    svr.last_ship_dt, 
    svr.sales_min_buy_qty, 
    svr.sales_min_pkg_qty, 
    svr.part_desc, 
    NVL(svr.bond_qoh, 0)                 AS bond_qoh, 
    NVL(svr.bond_qit, 0)                 AS bond_qit, 
    NVL(svr.branch_qoh, 0)                 AS branch_qoh, 
    NVL(svr.branch_qit, 0)                 AS branch_qit, 
    NVL(svr.bond_qoh, 0)  + NVL(svr.bond_qit, 0) + NVL(svr.branch_qoh, 0) + NVL(svr.branch_qit, 0) AS bond_qty, 
    NVL(svr.bond_pipeline, 0) + NVL(svr.po_qt, 0)             AS bond_pipeline, 
    svr.bond_op, 
    svr.brand_cd, 
    cs.status, 
    cc.comments 
    FROM pours_ref.part_notification_view svr 
    JOIN css_status cs 
    ON svr.part_nbr = cs.part_nbr 
    AND svr.mfg_cd = cs.mfg_cd 
    AND svr.billto_cust_nbr = cs.account 
    JOIN css_comment cc 
    ON svr.part_nbr = cc.part_nbr 
    AND svr.mfg_cd = cc.mfg_cd 
    AND svr.billto_cust_nbr = cc.account; 
+4

시도해 보셨습니까? 당신이 할 수없는 이유가 없습니다 (당신이해서는 안되는 이유가있을지라도). 그러나 당신이 시도하고 오류가 있다면 그것을 보여주십시오. 그리고 두 번째 부분은 그렇습니다. 새로운 뷰에서는'svr.part_nbr' 만 참조 할 수 있습니다. 이전 뷰의 기본 테이블은 직접 참조 할 수 없습니다. –

+0

좋아,이게 내가 생각해 낸거야. (나는 원래 테이블을 생성 테이블로 편집했습니다) 실행하려고 시도했지만 SQL 오류가 발생했습니다 : ORA-00904 : "SVR". "PO_QT": 식별자가 잘못되었습니다. 나는 테이블을 점검했고 거기에있다. 그래서 여기에서 무슨 일이 일어나고 있는지 확실하지 않다.나는 그것들 앞의 모든 것들이 잘 작동한다고 가정 할 때 옳은가? –

+0

나는 오라클이 필드를 거꾸로 평가한다고 생각한다. 아마도 이후의 모든 것들은 괜찮을 것이다. –

답변

9

당신은 확실히 다른보기의 상단 기반으로 구축 볼 수 있습니다 :

create table my_table (id number, name varchar2(20), address varchar2(30)); 

table MY_TABLE created. 

create or replace view my_view_1 as 
select id, name 
from my_table; 

view MY_VIEW_1 created. 

create or replace view my_view_2 as 
select mv1.id, mv1.name, mt.address 
from my_view_1 mv1 
join my_table mt on mt.id = mv1.id; 

view MY_VIEW_2 created. 

그러나 당신이보기의 일부가 아닌 모든 필드를 포함, 기본 테이블에서 아무것도 참조 할 수 없습니다를 : 같은 열을 가진

create or replace view my_view_3 as 
select mv1.id, mv1.name, mv1.address 
from my_view_1 mv1 
join my_table mt on mt.id = mv1.id; 

SQL Error: ORA-00904: "MV1"."ADDRESS": invalid identifier 
00904. 00000 - "%s: invalid identifier" 

기본 테이블은 문제가되지 않습니다, 당신이보기에보다 자세한 내용을 포함하는 경우 당신은 어쨌든 별칭을해야 할 것이다.

가끔 성능 문제가 발생할 수 있으며, 동일한 기본 테이블에 대해 새보기를 작성하고 원하는 추가 데이터를 포함하도록 확장하면 더 빠르고 더 안정적 일 수 있습니다. .

+0

Ah gotcha. 예, 모든 라인에서 NVL (svr.bond_qit, 0) AS를 제거하고 작동했습니다. 감사. –

+0

명세서의 일부만 선택하십시오. ".. select * .."와 같은 오류가 나타납니다. 예 : ".. select mv1.id, mv1.name, mv1.address .."와 같이 완벽하게 작동합니다. – plaidcorp

5

긴 답변을 ...

그것은 테이블, 쿼리 결과 및 전망 (단순히 쿼리를 저장되는) 사이의 논리적 차이가 없어야하는 관계형 데이터베이스의 기본 특성 중 하나입니다. 실제로 "관계형"은 이들 중 하나를 통해 액세스 할 수있는 데이터 행을 의미합니다. http://en.wikipedia.org/wiki/Relation_%28database%29

다른 RDBMS에서는 DDL 명령 (업데이트, 삭제, 삽입)과 관련하여 여러 가지 차이점이 있으며, DDL을 적용 할 수있는 객체의 종류에 제한이 있습니다.

예를 들어, 시스템은 키 보존 뷰에서 업데이트 및 삭제가 가능하며 삽입은 가능하지만 거의 사용되지 않습니다 ("대신"트리거 유형을 사용하여 모든보기에 대해 DDL을 허용합니다).

그래서 모든 것을 주어, 당신은 실행할 수 있습니다에 대한 선택 :

  1. 테이블
  2. 조인 된 테이블 세트
  3. 전망
  4. 흔히 인 -로 언급 쿼리 (선보기)
  5. 쿼리는 뷰와 테이블
  6. 등에 가입

... 그 select는 뷰 정의에 캡슐화 될 수 있습니다.

짧은 대답 : 예

관련 문제