Die Mathe-Redaktion - 26.01.2020 13:23 - Registrieren/Login
Auswahl
ListenpunktHome
ListenpunktAktuell und Interessant ai
ListenpunktArtikelübersicht/-suche
ListenpunktAlle Links / Mathe-Links
ListenpunktFach- & Sachbücher
ListenpunktMitglieder / Karte / Top 15
ListenpunktRegistrieren/Login
ListenpunktArbeitsgruppen
Listenpunkt? im neuen Schwätz
ListenpunktWerde Mathe-Millionär!
ListenpunktAward-Abstimmung ab 1.1.
ListenpunktFormeleditor fedgeo
Schwarzes Brett
Aktion im Forum
Suche
Stichwortsuche in Artikeln und Links von Matheplanet
Suchen im Forum
Suchtipps

Bücher
Englische Bücher
Software
Suchbegriffe:
Mathematik bei amazon
Naturwissenschaft & Technik
In Partnerschaft mit Amazon.de
Kontakt
Mail an Matroid
[Keine Übungsaufgaben!]
Impressum

Bitte beachten Sie unsere Nutzungsbedingungen, die Distanzierung, unsere Datenschutzerklärung und
die Forumregeln.

Sie können Mitglied werden. Mitglieder können den Matheplanet-Newsletter bestellen, der etwa alle 2 Monate erscheint.

Der Newsletter Okt. 2017

Für Mitglieder
Mathematisch für Anfänger
Wer ist Online
Aktuell sind 444 Gäste und 30 Mitglieder online.

Sie können Mitglied werden:
Klick hier.

Über Matheplanet
 
Zum letzten Themenfilter: Themenfilter:
Matroids Matheplanet Forum Index
Moderiert von matroid
Informatik » Datenbanken » SQL Join mit generischer Tabelle und Abfrage mit Rownum
Druckversion
Druckversion
Antworten
Antworten
Autor
Universität/Hochschule SQL Join mit generischer Tabelle und Abfrage mit Rownum
Carmageddon
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 22.12.2009
Mitteilungen: 626
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Themenstart: 2019-12-04


Hallo,

ich habe eine Frage an euch. Ich würde gerne verstehen, warum und wieso folgendes Verhalten auftritt.

Zunächst habe ich folgende Funktion:
SQL
CREATE OR REPLACE FUNCTION ABL_intSequence
  RETURN intType PIPELINED IS
BEGIN
    loop
       PIPE ROW(1);
    END loop;
END;

Die Funktion wird benutzt um mittels rownum einfach nur die Zahlen 1,2,3... zu erzeugen.

Jetzt habe ich zwei Daten dmin und dmax gegeben und möchte mir die ganzen Stunden dazwischen ausgeben lassen.

dmin und dmax, sowie die Stunden-Differenz werden in einem seperaten Select vorher ausgerechnet.

Man erhält also folgenden select:
SQL
WITH mindates AS
(
    SELECT (..) dmin,
           (..) dmax,
           (..) diff
   FROM (..) WHERE (..)
),
timeframes AS
(
    SELECT dmin + rownum/24
      FROM mindates,
           TABLE(intSequence)
     WHERE rownum <= mindates.diff
)
SELECT * FROM timeframes


Das Ergebnis ist: Er rechnet und rechnet und rechnet... und wird nie fertig. Ersetze ich hingegen mindates.diff durch eine Zahl, läuft es super.
SQL
timeframes AS
(
    SELECT dmin + rownum/24
      FROM mindates,
           TABLE(intSequence)
     WHERE rownum <= 100
)


Ich vermute: Er hat Schwierigkeiten beim joinen der beiden Tabellen. Er versucht wohl table(intSequence) komplett auszurechnen - was logischerweise nicht geht.

Warum klappt es aber, wenn ich eine Zahl hartcodiert hineinschreibe? Wo liegt der Unterschied? diff wurde doch vorher ausgerechnet.

Prinzipiell sind doch Abfragen von rownum auf eine Spalte zulässig. (Ob sie Sinn machen - das ist eine andere Frage).

Im Moment beschränke ich einfach table(intSequence) auf 1000 Zeilen, dann gehts natürlich, aber das gefällt mir einfach nicht, und ich würde verstehen, woher dieses Verhalten kommt?


SQL
timeframes AS
(
    SELECT dmin + cnt/24
      FROM mindates,
           (SELECT rownum cnt FROM TABLE(intSequence) WHERE rownum < 1000)
 
     WHERE cnt <=  mindates.diff
)

Es ist bestimmt etwas, was der Optimizer intern macht, aber das ist meist schwierig nachzuvollziehen...

Vielen Dank und viele Grüße





-----------------
Zitat: "Es gibt einen Beweis aus der Physik: Er ist kurz, er ist elegant... und falsch"



  Profil  Quote  Link auf diesen Beitrag Link
Neues Thema [Neues Thema] Antworten [Antworten]    Druckversion [Druckversion]

 


Wechsel in ein anderes Forum:
 Suchen    
 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2019 by Matroids Matheplanet
This web site was made with PHP-Nuke, a web portal system written in PHP. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen.
Lesen Sie die Nutzungsbedingungen, die Distanzierung, die Datenschutzerklärung und das Impressum.
[Seitenanfang]