2009-02-04 80 views
1

我在SQL環境中有一個需求,在特定情況下,過程中對錶(或視圖)A的所有引用實際上都使用表(或視圖)B.在iSeries上,我將使用OVRDBF命令來覆蓋對錶A與表B:OVRDBF文件(A)文件(B)。在SQL中等同於什麼?有一個嗎?是否存在與SQL中的iSeries OVRDBF命令等效的內容?

我的目標是結束一個無視覆蓋的過程。我不希望在滿足某些條件時指導表B中的處理的過程中使用條件邏輯。願景:

典型的情況下:只要調用程序

在特定的替代情況:執行OVRDBF當量,然後調用程序

回答

1

不知道該SQL環境支持的選項:

我相信DB2有一個CREATE ALIAS語句。將SQL寫入別名。

另一種可能性:在視圖上運行查詢:在哪裏執行OVRDBF,放下視圖並將其重建到所需的表格上。

+1

我不喜歡這個答案的唯一的事情是,這兩個選項涉及臨時覆蓋每個人的參考。假設你想讓其他進程在'普通'對象上運行,可能涉及到一個額外的模式或類似的東西是合適的? – JBell6 2009-02-04 23:32:24

1

愛德提到,如果你可以修改你的程序:

1)創建文件的別名(A)

CREATE ALIAS XYZ FOR A 

2)修改程序引用,而不是A. XYZ

3)運行程序時使用文件B執行

DROP ALIAS XYZ; 
CREATE ALIAS XYZ FOR B; 
CALL PROCEDURE; 
DROP ALIAS XYZ; 
CREATE ALIAS XYZ FOR A; 

如果你不能不同的程序,你不擔心同時訪問表A,你可以使用:

RENAME TABLE A TO C; 
CREATE ALIAS A FOR B; 
CALL PROCEDURE; 
DROP ALIAS A; 
RENAME TABLE C TO A; 
+0

在我對Ed的評論中,我表達了對使用別名時影響所有用戶和進程的擔憂。並非所有事情都最終指向別名正在指向的什麼?無論如何要讓這種方法更具體到單個用戶和/或過程? – JBell6 2009-02-06 15:01:08

相關問題