Abban kérem a segítségeteket, hogy hogyan lehet Oracle-ben olyan lekérdezést előállítani, amiben a számok szerepelnek egy megadott értékig? (Ezt az értéket egy másik lekérdezésből kapom meg.)
Tehát pl megkapom, egy lekérdezéssel, hogy 4, akkor egy olyan lekérdezést szeretnék utána, amiben a rekordok rendre: 1, 2, 3, 4.
(Ha lehet, PL/SQL nélkül, egy szál lekérdezéssel szeretném.)
Előre is köszönöm!
- 1579 megtekintés
Hozzászólások
Egy ilyet szeretnél?
S ELECT * FROM komplextabla
W HERE rowid <= (
S ELECT szam FROM szamtabla
W HERE akarmilyenadat = 'janika'
)
A ROWID egy pszeudooszlop a sok közül, ami a táblában az adat BEÉRKEZÉSE szerint szigorúan monotonan nő és sűrű egyész számhalmaz.
Cserébe az Oracle nem garantálja, hogy a rowid mindíg így fog működni :)
Pszeudooszlopokkal kapcsolatban hasznos lehet ez a link
--
God bless IQ
- A hozzászóláshoz be kell jelentkezni
Miert nem tudok hozzaszolni?
- A hozzászóláshoz be kell jelentkezni
Vazze! Miert forbidden, ha sql-t akarok kuldeni? Ezert volt az elottem szolonak is vagdosva?
Nem valami szép megoldás, de azt adja, amit akarsz:
> se lect rownum from nagytabla wh ere rownum <= (se lect 4 from dual);
ROWNUM
----------
1
2
3
4
Nem tudom, mire akarod felhasznalni, de en pl/sql-t hasznalnek, ahhoz legalabb nem kell tabla.
1 de clare
2 sz amok varchar(32767);
3 be gin
4 fo r i in 1 .. 4 loop
5 sz amok := szamok || i || ', ';
6 en d loop;
7 db ms_output.put_line( szamok);
8* en d;
SQL> /
1, 2, 3, 4,
G
- A hozzászóláshoz be kell jelentkezni
Megelőztél mert nekem sem sikerült beszúrnom az sql-t
vazzus.
Egyébként maximalice igazad van !
-TamsA-
- A hozzászóláshoz be kell jelentkezni
Jah hogy az sql miatt nem tudok hozzászólni én sem :S:S:S
- A hozzászóláshoz be kell jelentkezni
Szóval Gee megoldása az ami nekem kellene, én így csináltam meg:
SQL> C REATE TABLE tt ( mm NUMBER );
Table created.
SQL> BEGIN
2 FOR i IN 1..100 LOOP
3 I NSERT INTO tt VALUES ( i );
4 END LOOP;
5 END;
6 .
SQL> /
PL/SQL procedure successfully completed.
SQL> S ELECT mm FROM tt W HERE mm <= (S ELECT 4 FROM DUAL);
MM
----------
1
2
3
4
SQL>
Csakhát ez sem túl szép megoldás, meg az sem szerintem, ha egy nagy tábla ROWID-jét v ROWNUM-ját használom. Jelenleg PL/SQL-t írtam rá én is, de ha lenne rá valami szebb, elegánsabb megoldás, ami egy lekérdezésben megvalósítható, annak örülnék igazán.
Szóval a fenti eredményre lenne szükségem, csak valami szép megoldással:)
Feri
- A hozzászóláshoz be kell jelentkezni
a rownum nem a tablae, hanem a lekerdezese. A te megoldasodban a szamtablabol ki kell szedni a konkret szamokat, a rownum az meg csak visszaadja. Gondolom.
Esetleg forums.oracle.com-on kerdezzel, vannak ott okos emberek.
G
- A hozzászóláshoz be kell jelentkezni
Igazat szól. A "lekérdezésé" a rownum, nem pedig a fizikai adatokat fizikailag táróló tábláé.
--
God bless IQ
- A hozzászóláshoz be kell jelentkezni
Először is kösz, hogy írtatok! :)
Másodszor: oké, bocs, tényleg a lekérdezésé a ROWNUM, figyelmetlen voltam.
Harmadszor: gondoltam mielőtt a forums.oracle.com-ra írok, előbb megkérdezem itt :)
Kösz mégegyszer!
F.
- A hozzászóláshoz be kell jelentkezni