Argumente in SQL
In die Aufrufklammern eines Funktionsaufrufs kann auch ein Ausdruck geschrieben werden, der dann eine Art von Operand der Funktion darstellt, und Argumentausdruck genannt wird.
Der Wert des Argumentausdrucks wird Argumentwert genannt.
Wenn man nun von einem Argument alleine spricht, dann kann dies je nach Zusammenhang Argumentausdruck oder Argumentwert bedeuten.
Der Argumentwert kann den Wert eines Aufrufs beeinflussen.
In der folgenden Sitzung wird der Aufruf »RAND( 3 )« mit dem Argumentausdruck »3« verwendet.
Dies bewirkt die Verwendung von »3« als internen Startwert der Zufallszahlenerzeugung. Da jedes Mal, wenn eine Abfrage mit diesem Ausdruck »RAND( 3 )« ausgewertet wird, die Zufallszahlenerzeugung wieder mit dem internen Startwert »3« beginnt, und die Zufallszahl bei diesem Startwert immer »0.90576975597606« ist, beginnen die erzeugten Zufallszahlen bei Verwendung von »RAND( 3 )« immer bei »0.90576975597606«, während sie bei Verwendung von »RAND()« nicht weiter vorhersagbar sind.
Dies zeigt deutlich, wie ein Argumentwert das Verhalten einer Funktion beeinflussen kann. Dabei kommt es nur auf den Argumentwert an und nicht auf die genaue Schreibweise des Argumentausdrucks, denn ob man nun »3« oder »2 + 1« schreibt, ist hierbei egal.
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SET SESSION sql_mode = 'ANSI,TRADITIONAL';
DROP SCHEMA S; CREATE SCHEMA S; USE S;CREATE TABLE T ( I INT ); INSERT INTO T ( I ) VALUES ( 1 ),( 2 ),( 3 );
SELECT I, RAND() FROM T;
+------+------------------+
| I | RAND() |
+------+------------------+
| 1 | 0.61914388706828 |
| 2 | 0.93845168309142 |
| 3 | 0.83482678498591 |
+------+------------------+SELECT I, RAND( 3 ) FROM T;
+------+------------------+
| I | RAND( 3 ) |
+------+------------------+
| 1 | 0.90576975597606 |
| 2 | 0.37307905813035 |
| 3 | 0.14808605345719 |
+------+------------------+SELECT I, RAND() FROM T;
+------+------------------+
| I | RAND() |
+------+------------------+
| 1 | 0.35877890638893 |
| 2 | 0.28941420772058 |
| 3 | 0.37073435016976 |
+------+------------------+
SELECT I, RAND( 3 ) FROM T;
+------+------------------+
| I | RAND( 3 ) |
+------+------------------+
| 1 | 0.90576975597606 |
| 2 | 0.37307905813035 |
| 3 | 0.14808605345719 |
+------+------------------+SELECT I, RAND( 2 + 1 ) FROM T;
+------+------------------+
| I | RAND( 3 ) |
+------+------------------+
| 1 | 0.90576975597606 |
| 2 | 0.37307905813035 |
| 3 | 0.14808605345719 |
+------+------------------+
Übungsfragen ⃗
? Ermittlung von Operanden ⃗
Kann es eine Funktion »F« geben, die wie in den folgenden Beispielen gezeigt, den linken Operanden ihres Argumentausdrucks ergibt?
- Auswertung
SELECT F( 1 + 3 );
1
- Auswertung
SELECT F( 2 + 2 );
2
- Auswertung
SELECT F( 3 + 1 );
3