Ich habe Schwierigkeiten, gespeicherte Prozeduren von SQL Server in Oracle zu konvertieren, damit unser Produkt damit kompatibel ist.Wie Oracle ORDER BY und ROWNUM korrekt verwenden?
Ich habe Anfragen, die die jüngste Aufzeichnung einiger Tabellen zurückgibt, basierend auf einem Zeitstempel:
SQL Server:
SELECT TOP 1 *
FROM RACEWAY_INPUT_LABO
ORDER BY t_stamp DESC
=> Das wird kehrt mir den jüngsten Rekord
Aber Oracle:
SELECT *
FROM raceway_input_labo
WHERE rownum <= 1
ORDER BY t_stamp DESC
=> Das gibt mir den ältesten Datensatz (wahrscheinlich abhängig vom Index), unabhängig von der ORDER BY
Aussage!
I verkapselt die Abfrage Oracle auf diese Weise meine Anforderungen entsprechen:
SELECT *
FROM
(SELECT *
FROM raceway_input_labo
ORDER BY t_stamp DESC)
WHERE rownum <= 1
und es funktioniert. Aber es klingt wie ein schrecklicher Hack für mich, besonders wenn ich viele Platten in den beteiligten Tabellen habe.
Was ist der beste Weg, dies zu erreichen?
[On ROWNUM und Limiting Ergebnisse] (http://www.oracle.com/technetwork/issue-archive/2006/06-sep/o56asktom-086197 hilft. html) –
Was Sie in Ihrer letzten Abfrage getan haben, ist korrekt. Sie wählen die erste Zeile einer geordneten Liste von Datensätzen aus. Einfach Kapselung abfragen. – araknoid
Dies wird im Handbuch eindeutig dokumentiert: http://docs.oracle.com/cd/E11882_01/server.112/e26088/pseudocolumns009.htm#i1006297 –