程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 多表可更新視圖的實現

多表可更新視圖的實現

編輯:關於SqlServer

多表關聯後的數據能保證主鍵唯一的視圖是可直接做更新,不需要用觸發器實現

 

多表視圖的定義:當視圖的數據源只有一張數據表,則該視圖為單表視圖;當視圖的數據源是多張數據表,則該視圖為多表視圖。
可更新視圖的定義:在絕大多數人的概念中,視圖是只讀的,不允許修改。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,

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved