Portál AbcLinuxu, 12. května 2025 19:22

Dotaz: Oracle limit,offset s ROWNUM

2.11.2010 20:33 oracle
Oracle limit,offset s ROWNUM
Přečteno: 1200×
Odpovědět | Admin
Ahoj, mohl by mi prosím někdo, kdo pracuje s databází oracle napsat vzorový dotaz, jak bych zobrazil např. řádky 5 až 10? Našel jsem desítky diskusí, kde radí použití ROWNUM, každý jinak a spousta lidí se tam hádá, že takhle to nebude fungovat třeba s order apod. Nemám zkušenosti s oraclem, jen potřebuju převést dotaz z mysql pro oracle, všechno je mi jasné kromě toho limitování výpisu řádků.
Nástroje: Začni sledovat (2) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Blackhex avatar 2.11.2010 20:50 Blackhex | skóre: 16 | Brno, Frýdek-Místek
Rozbalit Rozbalit vše Re: Oracle limit,offset s ROWNUM
Odpovědět | | Sbalit | Link | Blokovat | Admin
SELECT * FROM table WHERE LINENUM BETWEEN 100 AND 200;

nefunguje?
المفتاح المستعمل ﻻ يصدأ
2.11.2010 21:16 oracle
Rozbalit Rozbalit vše Re: Oracle limit,offset s ROWNUM
To já nevím ale podle manuálů předpokládám že ne. LINENUM si dodefinovávají takto:
SELECT * FROM (
    SELECT ROW_NUMBER() OVER(ORDER BY column1) LINENUM, column1, column2
    FROM MyTable
    ORDER BY column1
)
WHERE LINENUM BETWEEN 100 AND 200;
Každopádně bych potřeboval nějaké co nejlehčí řešení, protože ten původní mysql dotaz obsahuje i spojování tabulek a tak bych nerad aby byl výsledný dotaz nějaký ohromný. Našel jsem také řešení vypsat N řádků a pak pomocí MINUS odečíst to co nepotřebuju, ale to asi nebude zrovna optimální.
2.11.2010 20:50 oracle
Rozbalit Rozbalit vše Re: Oracle limit,offset s ROWNUM
Odpovědět | | Sbalit | Link | Blokovat | Admin
Teď jsem našel něco co by mohlo fungovat jestli se rownum opravdu vyhodnocuje před order by ale po "select všechno".
SELECT a, b, c
FROM
( SELECT a, b, c, ROWNUM rn
  FROM
  ( SELECT a, b, c FROM RECORD
    WHERE AVAIL='Y"
    ORDER BY DATE DESC
  )
  WHERE ROWNUM <= 25
)
WHERE rn >= 21;
... nedá se nahradit WHERE ROWNUM <= 25 za WHERE rn <= 25?
2.11.2010 22:18 jekub
Rozbalit Rozbalit vše Re: Oracle limit,offset s ROWNUM
Odpovědět | | Sbalit | Link | Blokovat | Admin
http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:127412348064
3.11.2010 09:44 Ivan
Rozbalit Rozbalit vše Re: Oracle limit,offset s ROWNUM
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ahoj, asi mi do toho nic neni, ale na co presne to potrebujes? Mozna by se dal tvuj pozadavek vyresit i bez tech limitu.
5.11.2010 14:28 Bubak | skóre: 16 | blog: Čtvrtá cenová
Rozbalit Rozbalit vše Re: Oracle limit,offset s ROWNUM
Odpovědět | | Sbalit | Link | Blokovat | Admin
Takhle to funguje (sorry, neumim to tu moc zformatovat):

select * from
(
select id, jmeno, prijmeni, narozen, ulice, mesto,
row_number() over (order by narozen, prijmeni, jmeno) as rnum
from lidi where narozen > to_date('31121999', 'DDMMYYYY')
) where rnum between :rec_from and :rec_to;


kde :rec_from a :rec_to zastupuji cisla radku od a do ktereho vypis chces (pro testovani si je nahrad klidne konstantami). Pokud bys mel problem, ozvi se, muzeme se pripadne mrknout na konkretni struktury.
... máš jen mrtvou kočku a poškrábanýho jezevčíka ...
5.11.2010 14:32 Bubak | skóre: 16 | blog: Čtvrtá cenová
Rozbalit Rozbalit vše Re: Oracle limit,offset s ROWNUM
Jo, uz vidim, ze tohle znas, nekouknul jsem na odpovedi, mala obrazovka:-). Pouzivam to, jednodussi reseni jsem nenasel...
... máš jen mrtvou kočku a poškrábanýho jezevčíka ...

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.