Rückgabewerte in SQL
Der folgende Ausdruck hat eine mehr oder weniger zufällig ausgewählte double-Zahl zwischen 0 (einschließlich) und 1 (ausschließlich) als Wert.
Ausdruck
RAND()
Wert (Beispiel)
0.901730651875707
Wenn der Aufrufausdruck »RAND()« in den Ausdruckrahmen geschrieben wird, so wird dadurch bestimmt, daß der auszugebende Wert bei der Ausführung der Abfrage von der Auswertung des Ausdrucks »RAND()« ermittelt werden soll.
Ausdruck
RAND()
+ Ausdruckrahmen
SELECT …;
= Abfrage
SELECT RAND();
Ausgabe (Beispiel)
+--------------------+
| RAND() |
+--------------------+
| 0.6539504161607013 |
+--------------------+
Dieser Wert ergibt sich dann dadurch, daß gegen Ende des Aufrufvorgangs von der Funktion »RAND« ein Wert für diesen Aufrufausdruck festgelegt wird. Wegen dieser Festlegung eines Wertes nennt man diesen Vorgang ja auch die Auswertung (also die Ermittlung des Wertes) des Ausdrucks »RAND()«.
Bei der Auswertung eines Aufrufausdrucks wird die Funktion dieses Ausdrucks aktiviert, wir sagen auch: der Aufruf werde ausgeführt. Dies bedeutet nichts anderes, als daß diese Funktion nun bestimmt, was der Rechner tut. Daher sagt man auch, daß diese Funktion durch die Ausführung des Aufrufs die Kontrolle (über den Rechner) erhält.
Wird die Kontrolle über den Rechner nun von unserem Rahmen an die Funktion »RAND« übergeben, so kehrt die Kontrolle normalerweise nach einer Weile wieder aus dieser Funktion »RAND« zurück. Die Kontrolle wird also von der aufgerufenen Funktion schließlich (an unseren Ausdruckrahmen) zurückgegeben.
Weil gleichzeitig mit dieser Rückkehr auch der Wert des Ausdrucks geliefert wird, sagt man auch, daß er zusammen mit der Kontrolle von der Operation zurückgegeben werde, und bezeichnet ihn auch als Rückgabewert. (Der Rückgabewert von »RAND« wird danach von unserem Ausdruckrahmen ausgegeben.) Am Ende der Ausführung einer Funktion steht also die Rückgabe der Kontrolle und eines eventuellen Rückgabewertes an jene Stelle, von der aus diese Funktion aufgerufen wurde.
- »SELECT« und »RAND()« bei der oben gezeigten Ausführung
.-------------------------------------.
| SELECT-----------. |
| | |
| V |
| .---------------. |
| | RAND() | |
| '---------------' |
| | |
| | |
|<-----------------' |
| 0.6539504161607013 |
| |
'-------------------------------------'
Allgemein bezeichnet man ein aufgerufenes benanntes Programm auch als Unterprogramm und im Vergleich dazu das aufrufende Programm als Hauptprogramm. In unserem Fall ist die gesamte Abfrage »SELECT RAND();« das Hauptprogramm, während die Funktion »RAND« alleine das Unterprogramm darstellt. Durch die Auswertung des Aufrufs des Unterprogramms wird die Kontrolle vorübergehend an das Unterprogramm übergehen, von wo aus sie nach einer Weile wieder zurückkehrt. Bei dieser Rückgabe der Kontrolle kann auch ein Wert an das Hauptprogramm übergeben werden, dies ist der Rückgabewert, welcher dann den Wert des Aufrufausdrucks festlegt, womit dessen Auswertung erledigt ist.
- Übergabe und Rückgabe der Kontrolle zur Laufzeit mit Wertrückgabe
.-------------------------------------.
| Hauptprogramm----. |
| | Übergabe der |
| V Kontrolle |
| .---------------. |
| | Unterprogramm | |
| '---------------' |
| | Rückgabe der |
| | Kontrolle |
|<-----------------' |
| Rueckgabewert |
| |
'-------------------------------------'
In dem folgenden Beispiel einer Auswertung des Ausdrucks »RAND()« wurde als auszugebender Wert beispielsweise »0.3169153596432091« festgelegt, also „zurückgegeben“. Der Rückgabewert ist also »0.3169153596432091«.
Konsole
SELECT RAND();
+--------------------+
| RAND() |
+--------------------+
| 0.3169153596432091 |
+--------------------+
In dem folgenden Protokoll einer Auswertung des Ausdrucks »RAND()« ist abzulesen, daß bei der protokollierten Auswertung als auszugebender Wert zur Laufzeit beispielsweise »0.622725580467587« festgelegt, also „zurückgegeben“ wurde. Diesmal ist der Rückgabewert »0.622725580467587.
Konsole
SELECT RAND();
+-------------------+
| RAND() |
+-------------------+
| 0.622725580467587 |
+-------------------+
Die Rückgabe eines Wertes ist die Übermittlung eines Wertes vom Unterprogramm zum Hauptprogramm, sie erlaubt also eine Mitteilung (Kommunikation) vom Unterprogramm zum Hauptprogramm.