Kaip apriboti "Oracle" užklausos grąžinamų eilučių skaičių po užsakymo?
Ar yra būdas priversti Oracle
užklausą elgtis taip, tarsi joje būtų MySQL limit
sąlyga?
MySQL
galiu tai padaryti:
select *
from sometable
order by name
limit 20,10
norėdamas gauti 21-30 eilutes (praleiskite pirmąsias 20, pateikite kitas 10). Eilutės atrenkamos po order by
, todėl iš tikrųjų pradedama nuo 20-ojo vardo pagal abėcėlę.
Oracle
sistemoje žmonės mini tik rownum
pseudostulpelį, tačiau jis vertinamas *prieš order by
, o tai reiškia štai ką:
select *
from sometable
where rownum <= 10
order by name
grąžins atsitiktinį dešimties eilučių rinkinį, sutvarkytą pagal pavadinimą, o to paprastai nenoriu. Taip pat negalima nurodyti poslinkio.
963
3
Tam galite naudoti použduotį, pvz.
Analitinis sprendimas su tik viena įterpta užklausa:
Rank()
galima pakeistiRow_Number()
, tačiau gali būti grąžinta daugiau įrašų, nei tikėtasi, jei yra pasikartojančių vardo reikšmių.(nepatikrinta), kažkas panašaus gali atlikti šį darbą
Taip pat yra analitinė funkcija rangas, kurią galite naudoti tvarkai pagal.