다른 뷰에서 뷰 작성
검색 후 온라인이나 다른 리소스에서 아무것도 찾지 못했습니다. 다른 보기와 다른 테이블에 참여하여 보기를 구성할 수 있는지 궁금합니다.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 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;
다른 보기 위에 작성된 보기를 사용할 수 있습니다.
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"
같은 열이 있는 기본 테이블은 문제가 되지 않으며, 보기에 둘 이상을 포함하는 경우에는 어쨌든 별칭을 지정해야 합니다.
이 작업을 수행하면 성능 문제가 발생할 수 있으며, 동일한 기본 테이블에 대해 새 뷰를 생성하고 원하는 추가 데이터를 포함하도록 확장하면 유지 관리가 어려울 수 있지만 더 빠르고 안정적일 수 있습니다.
긴 대답...
테이블, 쿼리 결과 및 보기(단순히 저장된 쿼리) 간에 논리적 차이가 없어야 한다는 것이 관계형 데이터베이스의 기본 특성 중 하나입니다.실제로 "관계형"은 이러한 데이터 중 하나를 통해 액세스할 수 있는 데이터 행을 의미합니다.http://en.wikipedia.org/wiki/Relation_%28database%29
물론 DDL 명령(업데이트, 삭제, 삽입)과 관련하여 다양한 RDBMS에 의해 다른 정도로 부과되는 차이가 있으며, 이들은 모두 DDL이 적용될 수 있는 개체의 종류에 제한을 부과합니다.
Oracle을 예로 들면, 시스템은 키로 보존된 보기에 대한 업데이트 및 삭제를 허용하며, 삽입은 가능하지만 실제로는 거의 사용되지 않습니다("대신" 트리거 유형을 사용하여 모든 보기에 대해 DDL을 허용할 수 있습니다).
이 모든 것을 고려할 때 다음에 대해 선택을 실행할 수 있습니다.
- 테이블
- 결합된 테이블 집합
- 뷰
- 쿼리(일반적으로 인라인 뷰라고 함)
- 보기 및 테이블에 결합된 쿼리
- 기타
따라서 선택한 항목을 보기 정의에 캡슐화할 수 있습니다.
단답: 예
언급URL : https://stackoverflow.com/questions/14834113/creating-view-from-another-view
'programing' 카테고리의 다른 글
인스턴스 변수를 자동으로 초기화하시겠습니까? (0) | 2023.07.28 |
---|---|
기능별 패키지 접근 방식이 좋습니까? (0) | 2023.07.28 |
도커 컨테이너 및 mysql 워크벤치 내의 MariaDb에 대한 연결 (0) | 2023.07.28 |
배열 항목 대신 완전 배열 개체를 한 번에 하나씩 파이프로 연결하시겠습니까? (0) | 2023.07.28 |
Oracle 시간대가 있는 TIMESTAMP를 DATE로 변환 (0) | 2023.07.28 |