oracle多表可更新視圖的實現

來源:互聯網
上載者:User
多表視圖的定義:當視圖的資料來源只有一張資料表,則該視圖為單表視圖;當視圖的資料來源是多張資料表,則該視圖為多表視圖。
可更新視圖的定義:在絕大多數人的概念中,視圖是唯讀,不允許修改。ORACLE 8i以上版本,單表視圖如果沒有設定With Read Only,則該視圖是可以更新的,對視圖的操作將直接寫入的資料表中。
那麼,如果視圖的資料來源是多張資料表,而多表視圖如果實現可更新視圖,則可以大大提高編碼的效率。

1 前言
多表視圖的定義:當視圖的資料來源只有一張資料表,則該視圖為單表視圖;當視圖的資料來源是多張資料表,則該視圖為多表視圖。
可更新視圖的定義:在絕大多數人的概念中,視圖是唯讀,不允許修改。ORACLE 8i以上版本,單表視圖如果沒有設定With Read Only,則該視圖是可以更新的,對視圖的操作將直接寫入的資料表中。
那麼,如果視圖的資料來源是多張資料表,而多表視圖如果實現可更新視圖,則可以大大提高編碼的效率。

2 多表可更新視圖的應用範圍
在程式實現過程中,我們往往會將諸如產品編號、計量單位、客戶資訊等等儲存於獨立的資料表,在銷售單據、出入庫單據等處,引用其主鍵ID,就可以指向相關詳細資料。
在查詢檢視上,我們僅需要確定關聯關係即可,但在資料錄入介面,我們要實現多表資訊同步編輯功能時,往往會遇到困擾。需要應用各種各樣的編程方法,實現使用者需求。
多表可更新視圖大大簡化前台編程的工作量,對於前台FORM,可以認為該多表可更新視圖就是一張完整的業務資料表,而資料的儲存邏輯則建立於後台視圖的Instead of 觸發器中。

3 多表可更新視圖的後台實現
建立多表視圖的Instead Of Trigger,在Trigger中定義資料存放區邏輯,就實現了多表可更新視圖<複雜的技術痛點,解決的方法往往是無比簡單的>。執行個體如下:
3.1 建立測試資料表
--===================================================
--建立測試表
--===================================================
Drop Table t1;
Drop Table t2;
create table t1
( t11 numeric(28),t12 varchar2(20));
create table t2
( t11 numeric(28),t22 varchar2(20));
3.2 多表視圖範例
--===================================================
--建立測試檢視
--===================================================
create Or Replace view t as
    select T1.t11 f1 ,T1.t12 f2 ,T2.t22 f3
       from T1,T2  
       Where T1.t11=T2.t11;
3.3 多表視圖觸發器範例       
--===================================================
--建立視圖的替代觸發器
--===================================================
Create Or Replace Trigger Trg_InsUpdDel_t
   Instead Of Insert or update or delete
   on t
   for each row
Declare
begin
    If Inserting Then
       Insert Into t1 (t11,t12) Values (:New.f1,:New.f2);
       Insert Into t2 (t11,t22) Values (:New.f1,:New.f3);
    elsif Updating Then
       Update t1 set t11=:New.f1,t12=:New.f2 where t11=:New.f1;
       Update t2 set t11=:New.f1,t22=:New.f3 where t11=:New.f1;
    elsif Deleting then
       Delete from t1 where t11=:Old.f1;
       Delete from t2 where t11=:Old.f1;
    End if;
end;
如此即實現多表可更新視圖的定義工作,大家可以試著使用Insert或Delete或Update的SQL語句測試一下。
3.4 資料庫後台注意事項
當視圖使用Create Or Replace View...重新編譯後,該觸發器就會被覆蓋,找不到了。所以大家記得在重新編譯多表可更新視圖之後,要重新建立其觸發器。

4 多表可更新視圖的前台實現及注意事項
4.1 基本實現
在資料來源中,定義資料區塊的資料來源為多表可更新視圖,即可實現前台設定。
當然還有許多注意事項,否則大家在實際應用過程中就會覺得困難重重。
4.2 FORM前台注意事項
4.2.1 主鍵,如果多表可更新視圖中,包括外聯<如:Where t1.t11=t2.t11(+)>,則必須在FORM中定義主鍵,包括資料區塊的主鍵和資料項目的主鍵屬性。否則,FORM將會提示“視圖不允許更新”。
4.2.2 SQL,多表視圖如果使用Union或Distinct,則前台FORM可能無法實現更新功能。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.