Roman
Jaworski
Manager/Team
Leader/Web
Developer/Programist
a
Irek
Słonina
programowanie, bazy
danych i linuksy
Temat: Oracle - Limit Offset
Uzasadnić chyba się nie da ;-)Tak samo jak brak nieupośledzonego interpretera poleceń z CLI.
LIMIT 10:
select * from
(
select costam from tabela order by twoj_order
) where rownum <= 10
coś a'la offset:
select * from
(
select costam from tabela order by twoj_order
) where rownum between 11 and 20
Łukasz Kurowski Usque Ad Finem
Temat: Oracle - Limit Offset
Irek Słonina:
coś a'la offset:
select * from
(
select costam from tabela order by twoj_order
) where rownum between 11 and 20
To raczej nie zadziała tak jak powinno. Przy takich ograniczeniach potrzebne jest trochę więcej gimnastyki i wprost z rownum się nie da skorzystać...
http://www.adp-gmbh.ch/ora/sql/rownum.html
Irek
Słonina
programowanie, bazy
danych i linuksy
Temat: Oracle - Limit Offset
Łukasz Kurowski:
To raczej nie zadziała tak jak powinno. Przy takich ograniczeniach potrzebne jest trochę więcej gimnastyki i wprost z rownum się nie da skorzystać...
http://www.adp-gmbh.ch/ora/sql/rownum.html
?
Łukasz Kurowski Usque Ad Finem
Temat: Oracle - Limit Offset
Irek Słonina:
?
Czy mam wykonać wtórną robotę i przepisywać to co jest na stronie do której podałem link? Ok, lekkie streszczenie...
Jakiekolwiek ograniczenie od dołu bezpośrednio na pseudo-kolumnie rownum większe niż 1 powoduje, że zapytanie zwróci 0 rekordów. W związku z tym trzeba do select dodać rownum, opakować to w podzapytanie i dopiero na tym zakładać warunki.
Dopiero takie zapytanie zadziała jak trzeba...
select costam from
(
select costam, rownum r_ from
(
select costam from tabela order by twoj_order
)
)
where r_ between 11 and 20
Roman
Jaworski
Manager/Team
Leader/Web
Developer/Programist
a
Temat: Oracle - Limit Offset
Działającym rozwiązaniem dla mnie jest:select * from ( select a.*, ROWNUM rnum from
( SELECT * FROM "BAZA"."TABELA") a where ROWNUM < 100)
where rnum >= 10
ale bardziej mnie interesuje czy da się to uprościć w kolejnych wersjach?
konto usunięte
Temat: Oracle - Limit Offset
Roman Jaworski:
ale bardziej mnie interesuje czy da się to uprościć w kolejnych wersjach?
Spoko, uproscimy :)
Irek
Słonina
programowanie, bazy
danych i linuksy
Temat: Oracle - Limit Offset
Łukasz Kurowski:
Irek Słonina:
?
Czy mam wykonać wtórną robotę i przepisywać to co jest na stronie do której podałem link? Ok, lekkie streszczenie...
Dzięki, nie załapałem tego.
Łukasz Kurowski Usque Ad Finem
Temat: Oracle - Limit Offset
Roman Jaworski:
Działającym rozwiązaniem dla mnie jest:
Zapytanie jest ok, ale pod warunkiem, że dopuszczasz losowe wyniki (czyli jak się nawinie bazie). Równie dobrze mógłbyś od razu napisać warunek "ROWNUM <= 90".
Oracle najpierw wybierze pierwsze 99 rekordów które się nawinęły, a później z tych 99 nawiniętych odrzuci 9, które się nawinęły na początku. Domyślam się, że nie o to Ci chodzi, więc trzeba odpowiednio użyć ORDER BY.
P.S. Ogólnie ROWNUM nie jest miły w użyciu, więc trzeba bardzo uważać jak się go stosuje, żeby nie było na opak.
Chyba najlepszym rozwiązaniem jest wykorzystanie funkcji analitycznej ROW_NUMBER.
http://www.adp-gmbh.ch/ora/sql/analytical/row_number.html
Tutaj nie ma takich pułapek, ale i tak trzeba to opakować w podzapytanie.Łukasz Kurowski edytował(a) ten post dnia 20.01.11 o godzinie 17:32
konto usunięte
Temat: Oracle - Limit Offset
Jak się nie opakuje w podzapytanie to przekłamuje np. przy agregacji. Pozostaje liczyć na to, że Oracle wyciągnie wnioski z ostatnich zakupów.
Roman
Jaworski
Manager/Team
Leader/Web
Developer/Programist
a
Temat: Oracle - Limit Offset
Ireneusz Ptak:
Spoko, uproscimy :)
Nie wydaje mi się. Wersja 10g pojawiła się na przełomie 2003/2004. Już kilka lat to upraszczacie.
Andrzej
P.
Oracle Database
Consultant
Temat: Oracle - Limit Offset
Tylko, że to już było oficjalnie opisane przez Oracle. A wersja 10g też nie jest wersją ostateczną.Przykład stronicowania jest np. opisany w:
Oracle Database 2 Day + PHP Developer's Guide
Dział 4 Querying Data - Navigating Through Database Records.
konto usunięte
Temat: Oracle - Limit Offset
Roman Jaworski:Pewnie tak samo jak brak indeksów funkcyjnych w DB2?
Pracując z ORACLE 10G na potrzeby aplikacji webowych zauważyłem brak instrukcji LIMIT i OFFSET. Jak wygląda sytuacja w kolejnych wersjach? Jak uzasadnić brak takich prostych i często używanych instrukcji?
Może takie coś ze względu na architekturę wewnętrzną nie jest takie proste i oczywiste?
Grzegorz D. PL/SQL Developer
Temat: Oracle - Limit Offset
Roman Jaworski:
Ireneusz Ptak:
Spoko, uproscimy :)
Nie wydaje mi się. Wersja 10g pojawiła się na przełomie 2003/2004. Już kilka lat to upraszczacie.
No sorry no.... Staramy się jak możemy...
konto usunięte
Temat: Oracle - Limit Offset
Trochę rozwiązań zostało już podanych. Oprócz tego polecam dyskusję na grupie Oracle. Oto link:http://www.goldenline.pl/forum/599786/jak-wyswietlic-p...
konto usunięte
Temat: Oracle - Limit Offset
Co do uzasadnienia to pewnie takie jak zwykle : dodadzą jeszcze kilka nowych "ficzerów" które zasadniczo powinny być już od wersji 1.0.0.0.0 i nazwą to Oracle 12g :D Oczywiście masa firm zmigruje, zapłaci szmalec i biznes się kręci.Podobne tematy
-
Bazy Danych » jdbc ORA-02395: exceeded call limit on IO usage -
-
Bazy Danych » Fyracle (Firebird -> Oracle) Czy to w ogóle działa? -
-
Bazy Danych » [Oracle] Odczyt danych z tabeli typu XMLType -
-
Bazy Danych » Oracle 10G - dostępność oprogramowania -
-
Bazy Danych » Pilnie potrzebna pomoc dot. all_dependencies w Oracle'u -
-
Bazy Danych » Kursy, szkolenia Oracle -
-
Bazy Danych » Oracle dynamiczny widok -
-
Bazy Danych » ORACLE - konsekwencje zmiany długości kolumny. -
-
Bazy Danych » Wirtualna maszyna i dostęp zdalny do Oracle DB 11g -
-
Bazy Danych » Oracle Middleware - Serwery Aplikacji -
Następna dyskusja: