2010-03-12 124 views
3

我們正在使用Java EE應用程序,我們現在正在使用Informix DB.我們的代碼點擊數據庫,查詢如 「select first 10 * from test」 現在據我所知,Oracle不支持'前10 *'種語句。我們有超過1000個像這樣的查詢。我們是否應該手動更改這個或者可以進行一些手動定製?遷移到Oracle

回答

2

這是或者只使用標準的SQL儘可能一個很好的理由,或用於隔離那些依賴關係到存儲過程(是的,我知道這並不能幫助你在這種特殊情況下,我只是想我會提及它以備將來參考)。

我懷疑你將不得不單獨更改每一個雖然對你的源代碼的簡單搜索「選擇」或「第一」將是一個良好的開端。

然後,您可以決定如何您想要更改它們,因爲您可能仍然希望它在Informix上工作。

對於它的價值,我覺得你得到同樣的效果Oracle的

select * from (select * from mytable) where rownum <= 10 

我會種地的動態構造查詢(基於模板)到另一個層面,因此可以返回工作根據您配置的數據庫進行不同的查詢。然後,當您還想支持DB2時(例如),只需更改該層即可。

例如,有這樣一個電話:

​​3210

這將使你任:

select first 10 * from test 
select * from test where rownum <= 10 

我還要提到,雖然我知道您的查詢只是一個例子,即SQL可以返回任意訂單如果您沒有指定order by那麼

select first 10 * from test 

變得毫無意義,尤其是如果你可以在不同的DBMS運行它。

+0

使用rownum時需要小心 - 它應該幾乎總是用在外部查詢中,例如。 'select * from(...)where rownum <= 10' – 2010-03-12 09:30:38

+0

+1 to ar ..答案已經更新。 – 2010-03-13 02:47:03

+0

正如@paxdiablo暗示的那樣,您需要在內部選擇一個ORDER BY以獲取任何明智的東西。 – 2010-03-17 12:18:22

1

你可以寫一個擴展到JDBC驅動程序,以動態修改查詢,但可能是矯枉過正,所以仔細的搜索和替換的源代碼修改所有的查詢會更合適。

0

甲骨文擁有ROWNUM限制結果的概念。你將不得不更新你的查詢。