Ho difficoltà a convertire le stored procedure da SQL Server a Oracle per avere il nostro prodotto compatibile con esso.Come utilizzare Oracle ORDER BY e ROWNUM correttamente?
devo query che restituisce il record più recente di alcune tabelle, sulla base di un timestamp:
SQL Server:
SELECT TOP 1 *
FROM RACEWAY_INPUT_LABO
ORDER BY t_stamp DESC
=> Quella volontà mi restituisce il record più recente
Ma Oracle:
SELECT *
FROM raceway_input_labo
WHERE rownum <= 1
ORDER BY t_stamp DESC
=> Ciò restituirà il record più vecchio (probabilmente in base all'indice), indipendentemente dall'istruzione ORDER BY
!
ho incapsulati la query di Oracle in questo modo per abbinare le mie esigenze:
SELECT *
FROM
(SELECT *
FROM raceway_input_labo
ORDER BY t_stamp DESC)
WHERE rownum <= 1
e funziona. Ma suona come un orribile scribacchino, specialmente se ho un sacco di dischi nelle tabelle coinvolte.
Qual è il modo migliore per raggiungere questo obiettivo?
[On ROWNUM e Limitando Risultati] (http://www.oracle.com/technetwork/issue-archive/2006/06-sep/o56asktom-086197. html) –
Quello che hai fatto nella tua ultima query è corretto. Si seleziona la prima riga di un elenco ordinato di record. Semplice incapsulamento delle query. – araknoid
Questo è chiaramente documentato nel manuale: http://docs.oracle.com/cd/E11882_01/server.112/e26088/pseudocolumns009.htm#i1006297 –