我很難將存儲過程從SQL Server轉換爲Oracle,以使我們的產品與其兼容。如何正確使用Oracle ORDER BY和ROWNUM?
我有一個基於時間戳的查詢返回最近的一些表的記錄,:
SQL服務器:
SELECT TOP 1 *
FROM RACEWAY_INPUT_LABO
ORDER BY t_stamp DESC
=>將返回我最近的記錄
但是Oracle:
SELECT *
FROM raceway_input_labo
WHERE rownum <= 1
ORDER BY t_stamp DESC
=>無論ORDER BY
聲明如何,這將返回最舊的記錄(可能取決於索引)!
我封裝的Oracle查詢這種方式來滿足我的要求:
SELECT *
FROM
(SELECT *
FROM raceway_input_labo
ORDER BY t_stamp DESC)
WHERE rownum <= 1
和它的作品。但是對我來說這聽起來像是一個可怕的黑客攻擊,特別是如果我在涉及的表中有很多記錄。
達到此目的的最佳方法是什麼?
[開ROWNUM和限制結果](http://www.oracle.com/technetwork/issue-archive/2006/06-sep/o56asktom-086197。 html) – 2013-02-26 14:41:24
您在上次查詢中所做的操作是正確的。您選擇記錄的有序列表的第一行。簡單查詢封裝。 – araknoid 2013-02-26 14:49:03
在手冊中明確記錄了這一點:http://docs.oracle.com/cd/E11882_01/server.112/e26088/pseudocolumns009.htm#i1006297 – 2013-02-26 15:06:42