SQL-Variablen¶
Unter diesem Thema wird beschrieben, wie SQL-Variablen in Sitzungen in Snowflake definiert und verwendet werden.
Unter diesem Thema:
Übersicht¶
Snowflake unterstützt vom Benutzer deklarierte SQL-Variablen. Sie können vielfältig verwendet werden, z. B. zum Speichern anwendungsspezifischer Umgebungseinstellungen.
Variablenbezeichner¶
Bei Namen von SQL-Variablen wird global die Groß- und Kleinschreibung berücksichtigt.
Variablen-DDL¶
Snowflake bietet die folgenden DDL-Befehle für die Verwendung von SQL-Variablen:
Initialisieren von Variablen¶
Variablen können durch Ausführen der SQL-Anweisung SET
oder durch Festlegen der Variablen in der Verbindungszeichenfolge festgelegt werden, wenn Sie eine Verbindung zu Snowflake herstellen.
Die Größe von Zeichenfolgen- oder Binärwertvariablen ist auf 256 Byte begrenzt.
Verwendung von SQL zum Initialisieren von Variablen in einer Sitzung¶
Variablen können in SQL mit dem Befehl SET initialisiert werden. Der Datentyp der Variablen wird vom Datentyp des Ergebnisses des ausgewerteten Ausdrucks abgeleitet.
SET MY_VARIABLE=10; SET MY_VARIABLE='example';
Mehrere Variablen können in derselben Anweisung initialisiert werden, wodurch die Anzahl der wechselseitigen Kommunikationen mit dem Server reduziert wird.
SET (VAR1, VAR2, VAR3)=(10, 20, 30); SET (VAR1, VAR2, VAR3)=(SELECT 10, 20, 30);
Einstellen von Variablen für die Verbindung¶
Zusätzlich zur Verwendung von SET zum Festlegen von Variablen innerhalb einer Sitzung können Variablen als Argumente in der Verbindungszeichenfolge übergeben werden, mit der eine Sitzung in Snowflake initialisiert wird. Dies ist besonders nützlich, wenn Tools verwendet werden, bei denen nur die Angabe der Verbindungszeichenfolge möglich ist.
Mit dem Snowflake JDBC-Treiber können Sie beispielsweise zusätzliche Verbindungseigenschaften festlegen, die als Parameter interpretiert werden. Beachten Sie, dass für JDBC API SQL-Variablen Zeichenfolgen erforderlich sind.
// build connection properties Properties properties = new Properties(); // Required connection properties properties.put("user" , "jsmith" ); properties.put("password", "mypassword"); properties.put("account" , "myaccount"); // Set some additional variables. properties.put("$variable_1", "some example"); properties.put("$variable_2", "1" ); // create a new connection String connectStr = "jdbc:snowflake://localhost:8080"; // Open a connection under the snowflake account and enable variable support Connection con = DriverManager.getConnection(connectStr, properties);
Verwenden von Variablen in SQL¶
Variablen können in Snowflake überall dort verwendet werden, wo eine literale Konstante zulässig ist, außer wenn dies in der Dokumentation angemerkt ist. Um sie von Bindewerten und Spaltennamen zu unterscheiden, muss allen Variablen ein $
-Zeichen vorangestellt werden.
Beispiel:
SET (MIN, MAX)=(40, 70); SELECT $MIN; SELECT AVG(SALARY) FROM EMP WHERE AGE BETWEEN $MIN AND $MAX;
Bemerkung
Da das $
-Zeichen das Präfix ist, das zur Identifizierung von Variablen in SQL-Anweisungen verwendet wird, wird es bei der Verwendung in Bezeichnern als Sonderzeichen behandelt. Bezeichner (Datenbanknamen, Tabellennamen, Spaltennamen usw.) können nicht mit Sonderzeichen beginnen, es sei denn, der gesamte Name ist in doppelte Anführungszeichen gesetzt. Weitere Informationen dazu finden Sie unter Objektbezeichner.
Variablen können auch Bezeichnernamen enthalten, z. B. Tabellennamen. Um eine Variable als Bezeichner zu verwenden, müssen Sie sie in IDENTIFIER()
einschließen, z. B. IDENTIFIER($MY_VARIABLE)
. Einige Beispiele sind unten aufgeführt:
CREATE TABLE IDENTIFIER($MY_TABLE_NAME) (i INTEGER); INSERT INTO IDENTIFIER($MY_TABLE_NAME) (i) VALUES (42);SELECT * FROM IDENTIFIER($MY_TABLE_NAME);DROP TABLE IDENTIFIER($MY_TABLE_NAME);
Im Kontext einer FROM-Klausel können Sie den Variablennamen wie folgt in TABLE()
einschließen:
SELECT * FROM TABLE($MY_TABLE_NAME); +----+ | I | |----| | 42 | +----+
Weitere Informationen zu IDENTIFIER() finden Sie unter Literale und Variablen als Bezeichner.
Anzeigen von Variablen für die Sitzung¶
Verwenden Sie den Befehl SHOW VARIABLES, um alle in der aktuellen Sitzung definierten Variablen anzuzeigen:
SET (MIN, MAX)=(40, 70); +----------------------------------+ | status | |----------------------------------| | Statement executed successfully. | +----------------------------------+ SHOW VARIABLES; +-------------+---------------------------------+---------------------------------+------+-------+-------+---------+ | session_id | created_on | updated_on | name | value | type | comment | |-------------+---------------------------------+---------------------------------+------+-------+-------+---------| | 34359992326 | Fri, 21 Apr 2017 11:20:32 -0700 | Fri, 21 Apr 2017 11:20:32 -0700 | MAX | 70 | fixed | | | 34359992326 | Fri, 21 Apr 2017 11:20:32 -0700 | Fri, 21 Apr 2017 11:20:32 -0700 | MIN | 40 | fixed | | +-------------+---------------------------------+---------------------------------+------+-------+-------+---------+
Sitzungsvariablenfunktionen¶
Mit den folgenden Komfortfunktionen können Sitzungsvariablen geändert werden, um die Kompatibilität mit anderen Datenbanksystemen zu unterstützen, und um SQL über Tools auszugeben, die die $
-Syntax für den Zugriff auf Variablen nicht unterstützen. Beachten Sie, dass alle diese Funktionen Sitzungsvariablenwerte als Zeichenfolgen akzeptieren und zurückgeben:
SYS_CONTEXT und SET_SYS_CONTEXT
SESSION_CONTEXT und SET_SESSION_CONTEXT
GETVARIABLE und SETVARIABLE
Hier sind Beispiele für die Verwendung von GETVARIABLE. Definieren Sie zunächst eine Variable mit SET:
SET var_artist_name = 'Jackson Browne';+----------------------------------+ | status | +----------------------------------+ | Statement executed successfully. | +----------------------------------+
Rückgabe des Variablenwerts:
SELECT GETVARIABLE('var_artist_name');
In diesem Beispiel lautet die Ausgabe NULL, da Snowflake Variablen ausschließlich in Großbuchstaben speichert.
Aktualisieren Sie die Groß-/Kleinschreibung:
SELECT GETVARIABLE('VAR_ARTIST_NAME');+--------------------------------+ | GETVARIABLE('VAR_ARTIST_NAME') | +--------------------------------+ | Jackson Browne | +--------------------------------+
Sie können den Variablennamen in einer WHERE-Klausel verwenden, zum Beispiel:
SELECT album_title FROM albums WHERE artist = $VAR_ARTIST_NAME;
Variablen entfernen¶
SQL-Variablen sind für eine Sitzung privat. Wenn eine Snowflake-Sitzung geschlossen wird, werden alle während der Sitzung erstellten Variablen gelöscht. Dies bedeutet, dass niemand auf benutzerdefinierte Variablen zugreifen kann, die in einer anderen Sitzung festgelegt wurden. Wenn die Sitzung geschlossen wird, verfallen diese Variablen.
Außerdem können Variablen immer explizit mit dem Befehl UNSET gelöscht werden.
Beispiel:
UNSET MY_VARIABLE;