SQL-Variablen¶
Sie können SQL-Variablen in Sitzungen in Snowflake definieren und verwenden.
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¶
Sie können Variablen können durch Ausführen der SQL-Anweisung SET oder durch Festlegen der Variablen in der Verbindungszeichenfolge festgelegen, wenn Sie eine Verbindung zu Snowflake herstellen.
Die Größe von Zeichenfolgen- oder Binärwertvariablen ist auf 256 Byte begrenzt.
Verwenden 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 Sie Variablen auch als Verbindungszeichenfolge übergeben, mit der eine Sitzung in Snowflake initialisiert wird. Diese Option 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:
SET my_table_name='table1';
CREATE TABLE IDENTIFIER($my_table_name) (i INTEGER);
INSERT INTO IDENTIFIER($my_table_name) (i) VALUES (42);
SELECT * FROM IDENTIFIER($my_table_name);
+----+
| I |
|----|
| 42 |
+----+
Im Kontext einer FROM-Klausel können Sie den Variablennamen wie folgt in TABLE()
einschließen:
SELECT * FROM TABLE($my_table_name);
+----+
| I |
|----|
| 42 |
+----+
DROP TABLE IDENTIFIER($my_table_name);
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 |
|----------------+-------------------------------+-------------------------------+------+-------+-------+---------|
| 10363773891062 | 2024-06-28 10:09:57.990 -0700 | 2024-06-28 10:09:58.032 -0700 | MAX | 70 | fixed | |
| 10363773891062 | 2024-06-28 10:09:57.990 -0700 | 2024-06-28 10:09:58.021 -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;
Entfernen von Variablen¶
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;