SQL Order Member Funktion

vOerni

Ensign
Registriert
Jan. 2008
Beiträge
146
Nabend,

Ich habe eine Bundesliga Tabelle mit dem Datentyp Team_Type. Dieser hat die Funktion "Order Member Function sort(t Team_type)" zum Sortieren der Tabelle
Code:
CREATE OR REPLACE TYPE BODY Team_Type AS
  Order Member Function sort(t Team_type)
  RETURN NUMBER IS
  BEGIN
    IF punkte < t.punkte THEN
      RETURN 1;
    ELSIF punkte > t.punkte THEN
      RETURN -1;
    ELSIF punkte = t.punkte and ((tore-gegentore)<(t.tore-t.gegentore)) THEN
		RETURN 1;
	ELSIF punkte = t.punkte and ((tore-gegentore)>(t.tore-t.gegentore)) THEN
		RETURN -1;
	ELSIF punkte = t.punkte and ((tore-gegentore)=(t.tore-t.gegentore)) and tore<t.tore THEN
		RETURN 1;
	ELSIF punkte = t.punkte and ((tore-gegentore)>(t.tore-t.gegentore)) and tore>t.tore THEN
		RETURN -1;	
	ELSE
      RETURN 0;
    END IF;
  END;
END;
/

Mit "SELECT * from bundesliga x ORDER BY VALUE(x)" erhält man eine sortierte Ausgabe in absteigender Reihenfolge.

Leider verstehe ich nicht ganz, wie das Sortieren funktioniert.

Ich denke mal, das zunächst die erste mit der zweiten Zeile verglichen wird und wird 1 zurückgegeben, so steht die zweite Zeile an erster Stelle.
Was wird jetzt verglichen? Dritte Zeile mit den bereits sortierten Zeilen, was bedeutet, dass die Order Methode automatisch mehrmals aufgerufen wird....

Bitte um Hilfe, wie die Methode abläuft
Danke
 
In welcher Reihenfolge da welche Datensätze miteinander verglichen werden kannst du nicht sagen. Das hängt vom Datenbanksystem ab und kann durchaus nichtdeterministisch sein. Die Funktion muss einfach nur zwei beliebige Datensätze vergleichen können um festzustellen <, =, >. Den Rest erledigt das Datenbanksystem.
 
Danke,
was ich auch nicht wusste, ist, dass die Order Methode automatisch mehrmals aufruft, falls nötig...

Eine Frage hätte ich:
Ist die Anweisung Value(x) dazu da, um die Order Methode aufzurufen?
 
Zurück
Oben