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 verwendet werden, wo eine Literalkonstante zulässig 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 Zeichenfolgenliterale / Sitzungsvariablen / Bindungsvariablen 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():

set var_artist_name ='Jackson Browne';
-- Variable names are forced to uppercase by default, so output is NULL.
select getvariable('var_artist_name');
-- Output is "Jackson Browne".
select getvariable('VAR_ARTIST_NAME');

-- You can use the variable name in a WHERE clause, for example:
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;