Announcement

Collapse
No announcement yet.

Oracle LIMIT?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Oracle LIMIT?

    Hallo, ich möchte bei einer Oracle Abfrage möglichst elegant die Funktion von LIMIT aus MySql erreichen, d.h. zb. nur die ersten 20 Datensätze ausgeben.

    Das Internet liefert von ROWNUM in verschachtlungen alles mögliche, was ich auch versuchte, es aber irgendwie nicht klappen mag. ROWNUM scheint in meiner Datenbank Version nicht zu existieren - jedenfalls kommt nix zurück.

    Geht das nicht einfacher?

    Eine Lösung mit Count scheint die Datenbank zu sehr zu belasten.

    Danke und Grüße,

    HairyP

  • #2
    Was genau geht denn nicht, bzw. was erwartest du denn?

    Gruss

    Comment


    • #3
      Ich möchte die ersten 20 Datensätze einer Tabelle Selecten also sowas realisieren wie

      Select * from table LIMIT 20;

      wobei Limit nicht geht, und ich was suche, das eventuell sogar ohne verschachtelung auskommt, weils doch viele daten sein könnten die durchforsten werden sollen

      Dank im Voraus,

      Hairy

      Comment


      • #4
        Habe eine Lösung für mein Problem gefunden, die ohne verschachtelung und count() etc auskommt:

        Select * from table where rownum<=20 minus select * from table where rownum<=10

        damit kann man die Datensätze zwischen 11 und 20 ermitteln und es sieht noch halbwegs übersichtlich aus

        Comment


        • #5
          Was Du da machst ist nicht sonderlich sinnvoll, denn Du ermittelst irgendwelche Datensätze und begrenzt die Treffermenge auf 10.

          Code:
          select * from table where rownum <= 10
          ist prinzipiell genau das gleiche, denn ohne Reihenfolge (ORDER BY) ist das eben einfach nur eine Treffermengenbegrenzung.

          Die ROWNUM ist eine sog. Pseudospalte d.h. die Datensätze sind nicht wirklich durchnummeriert. Oracle vergiebt diese Zahl dynamisch, sobald ein Satz auf die WHERE Bedingung passt (auch vor dem ORDER BY). Das hat z.B. zur Folge, dass folgendes SQL nie einen Treffer liefern wird:
          Code:
          select * from table where rownum >2
          Um zu blättern (das ist es was Du möchstest) geht man in Oracle folgendermaßen vor:
          Code:
          select * 
            from ( select a.*, rownum rnum
                     from ( select * from table where ... order by ...) a
                    where rownum <= OBERE_GRENZE )
           where rnum >= UNTERE_GRENZ
          Nur so hast Du eine sichere, sprich sortierte, Ergebnismenge, aus der Du den 11. bis 20. Satz angezeigt bekommst.

          Dim
          Zitat Tom Kyte:
          I have a simple philosophy when it comes to the Oracle Database: you can treat it as a black box and just stick data into it, or you can understand how it works and exploit it as a powerful computing environment.

          Comment


          • #6
            Vielen Vielen Dank für die gute Erklärung, hab deine Lösung nun verwendet.

            Für Leute, denen die Reihenfolge der Ergebnisse egal ist die minus Variante funktioniert dahingehend auch.

            Dann bis bald, werd mal schauen, dass ich auch ein paar Leuten helfen kann

            Comment

            Working...
            X