Мне сложно преобразовать хранимые процедуры из SQL Server в Oracle, чтобы наш продукт совместим с ним.Как правильно использовать Oracle ORDER BY и ROWNUM?
У меня есть вопросы, которые возвращает самую последнюю запись некоторых таблиц, на основе временной метки:
SQL Server:
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) –
Что вы сделали в своем последнем запросе правильно. Вы выбираете первую строку упорядоченного списка записей. Просто инкапсуляция запроса. – araknoid
Это явно задокументировано в руководстве: http://docs.oracle.com/cd/E11882_01/server.112/e26088/pseudocolumns009.htm#i1006297 –