Erstellen einer view aus einer anderen view

Ich habe nach der search weder online noch in einer anderen Ressource etwas gefunden, und ich habe mich gefragt, ob Sie eine View erstellen können, indem Sie einer anderen view und anderen Tabellen join. Etwas Ähnliches denke ich mit server_ref.part_notification_view, dass die view verbunden wird.

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; 

Solutions Collecting From Web of "Erstellen einer view aus einer anderen view"

Sie können sicherlich eine view haben, die auf einer anderen view aufgebaut ist:

 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. 

Sie können jedoch nichts in den zugrunde liegenden Tabellen referenzieren, einschließlich aller Felder, die nicht Teil der view sind:

 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" 

Die zugrunde liegenden Tabellen mit den gleichen Spalten sind kein Problem, und wenn Sie mehr als in der view enthalten, müssen Sie sie aliasieren.

Dies kann manchmal zu performancesproblemen führen und ist möglicherweise schneller und zuverlässiger – wenn auch möglicherweise schwieriger zu warten -, wenn Sie Ihre neue view für dieselben Basistabellen erstellen und sie so erweitern, dass sie die gewünschten zusätzlichen data enthält.

Lange Antwort …

Es ist eines der grundlegenden Merkmale einer relationalen database, dass zwischen Tabellen, Abfrageergebnissen und Sichten (die einfach gespeicherte Abfragen sind) kein logischer Unterschied besteht. In der Tat bezieht sich das "relational" auf die datazeilen, auf die durch eine dieser data zugegriffen werden kann. http://en.wikipedia.org/wiki/Relation_%28database%29

Es gibt natürlich Unterschiede, die von verschiedenen RDBMS unterschiedlich ausgeprägt sind, insbesondere wenn es um DDL-Befehle (Aktualisieren, Löschen, Einfügen) geht, und alle legen Beschränkungen für die Arten von objecten fest, auf die DDL angewendet werden kann.

Am Beispiel von Oracle erlaubt das System das Aktualisieren und Löschen von Schlüsselsichten, und Einfügungen sind möglich, werden aber in der Praxis nur selten verwendet (ein Triggertyp "statt" ist verfügbar, um DDL gegen jede view zuzulassen).

Wenn du das alles gegeben hast, kannst du eine Auswahl gegen folgende ausführen:

  1. Ein Tisch
  2. Eine Reihe von verbundenen Tabellen
  3. Eine Sicht
  4. Eine Abfrage (im Allgemeinen als Inline-view bezeichnet)
  5. Eine Abfrage, die mit einer view und einer Tabelle verknüpft ist
  6. etc

… und das select kann daher in einer View-Definition gekapselt werden.

Kurze Antwort: Ja