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';
Copy

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);
Copy

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);
Copy

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;
Copy

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);
Copy
SELECT * FROM IDENTIFIER($MY_TABLE_NAME);
Copy
DROP TABLE IDENTIFIER($MY_TABLE_NAME);
Copy

Im Kontext einer FROM-Klausel können Sie den Variablennamen wie folgt in TABLE() einschließen:

SELECT * FROM TABLE($MY_TABLE_NAME);
+----+
|  I |
|----|
| 42 |
+----+
Copy

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 |         |
+-------------+---------------------------------+---------------------------------+------+-------+-------+---------+
Copy

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';
Copy
+----------------------------------+
| status                           |
+----------------------------------+
| Statement executed successfully. |
+----------------------------------+

Rückgabe des Variablenwerts:

SELECT GETVARIABLE('var_artist_name');
Copy

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');
Copy
+--------------------------------+
| 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;
Copy

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;
Copy