2013-08-01 31 views
0

所以我有一個查詢:可以對視圖查詢進行全面測試嗎?

select 
    c.STRING, 
    a.STRING, 
    b.STRING, 
    b.STRING3, 
    a.STRING2, 
from TABLE_A a, 
    VIEW_B b, 
    TABLE_C c 
where b.STRING2 = a.STRING2 
    and a.INT = #value# 
    and c.INT = a.INT 
    and c.STRING IN ('string1', 'string2') 

VIEW_B是一個視圖,TABLE_A和TABLE_C是普通表。我試圖單元測試這個查詢。我看到它的方式是因爲它是一個select,所以我需要創建一些虛擬數據,將它插入到表中,然後運行上面的查詢並確保它返回與我放入的數據相同的數據。但是,VIEW_B是查看,並且不能插入。所以我需要從VIEW_B中獲取一些真實的數據以及其他兩個表中的相應數據。但是,到那時,我只是運行相同的查詢,再加上我必須抓住一個a.INT。所以我的結論是,如果我有一個使用視圖的查詢,它不能被完全測試。

這是真的嗎?無論如何,測試此查詢的最佳方法是什麼?

請記住,這是一個工作項目,我不能更改表或查詢本身的模式,我必須針對實際數據庫運行我的測試。

+0

實際上你可能能夠插入進入視圖,取決於它是什麼,以及它依賴的表。 –

回答

3

爲什麼不只是提供任何表組成VIEW_B的示例數據?

或者,將「VIEW_B」與內嵌實體聲明:

(我用具體的Oracle-DUAL虛表,而是隨便用你的作品)

select 
    c.STRING, 
    a.STRING, 
    b.STRING, 
    b.STRING3, 
    a.STRING2 
from TABLE_A a, 
    (select 'blah' string, 123 INT from dual) b, 
    TABLE_C c 
where b.STRING2 = a.STRING2 
    and a.INT = #value# 
    and c.INT = a.INT 
    and c.STRING IN ('string1', 'string2') 
+0

查看來自其他4個表格的查詢,其中2個也是視圖:P,它非常複雜......但是我只記得我的老闆說他希望我們停止使用這些視圖,因爲我們正在離開它們,所以我只需要把它吸起來。但是,謝謝!這實際上是有幫助的,我不知道你甚至可以聲明內聯實體。 – jchitel

+0

注意確定你使用的是什麼版本的oracle,但是查找「WITH」聲明來爲那個查詢定義自定義實體......這對於測試查詢非常有用。 –

+0

儘管我們正在向Oracle遷移,但我的工作場所實際上使用的是Sybase ASE,而不是Oracle。 – jchitel

相關問題