EXECUTE IMMEDIATE FROM

EXECUTE IMMEDIATE FROM führt die in einer Datei angegebenen SQL-Anweisungen in einem Stagingbereich aus. Die Datei kann SQL-Anweisungen oder Snowflake Scripting-Blöcke enthalten. Bei den Anweisungen muss es sich um syntaktisch korrekte SQL-Anweisungen handeln.

Sie können den Befehl EXECUTE IMMEDIATE FROM verwenden, um die Anweisungen in einer Datei von einer beliebigen Snowflake-Sitzung aus auszuführen.

Dieses Feature bietet einen Mechanismus zur Steuerung der Bereitstellung und Verwaltung Ihrer Snowflake-Objekte und Ihres Codes. Sie können zum Beispiel ein gespeichertes Skript ausführen, um eine Standard-Snowflake-Umgebung für alle Ihre Konten zu erstellen. Das Konfigurationsskript kann Anweisungen enthalten, die Benutzer, Rollen, Datenbanken und Schemas für jedes neue Konto erstellen.

Siehe auch:

EXECUTE IMMEDIATE

Syntax

EXECUTE IMMEDIATE
  FROM { absoluteFilePath | relativeFilePath }
Copy

Wobei:

absoluteFilePath ::=
   @[ <namespace>. ]<stage_name>/<path>/<filename>
Copy
relativeFilePath ::=
  '[ { ./ | / | { ../ [ , ../, ... ] } } ]<path>/<filename>'
Copy

Absoluter Dateipfad (absoluteFilePath)

namespace

Datenbank und/oder Schema, in dem sich der interne oder externe Stagingbereich befindet, im Format database_name.schema_name oder schema_name. Der Namespace ist optional, wenn in der Benutzersitzung aktuell eine Datenbank und ein Schema verwendet werden. Andernfalls ist er erforderlich.

stage_name

Name des internen oder externen Stagingbereichs.

path

Pfad zu der Datei im Stagingbereich mit Unterscheidung von Groß-/Kleinschreibung.

filename

Name der auszuführenden Datei. Er muss syntaktisch korrekte und gültige SQL-Anweisungen enthalten. Jede Anweisung muss durch ein Semikolon getrennt werden.

Relativer Dateipfad (relativeFilePath)

path

Pfad zur relativen Datei im Stagingbereich mit Unterscheidung von Groß-/Kleinschreibung. Relative Pfade unterstützen etablierte Konventionen wie ein führendes /, um die Wurzel des Dateisystems eines Stagingbereichs anzugeben, ./, um auf das aktuelle Verzeichnis zu verweisen (das Verzeichnis, in dem sich die übergeordnete Datei befindet) und ../, um auf das übergeordnete Verzeichnis zu verweisen. Weitere Informationen dazu finden Sie unter Nutzungshinweise.

filename

Name der auszuführenden Datei. Er muss syntaktisch korrekte und gültige SQL-Anweisungen enthalten. Jede Anweisung muss durch ein Semikolon getrennt werden.

Rückgabewerte

EXECUTE IMMEDIATE FROM Rückgabewerte:

  • Das Ergebnis der letzten Anweisung in der Datei, wenn alle Anweisungen erfolgreich ausgeführt wurden.

  • Die Fehlermeldung, wenn eine Anweisung in der Datei fehlgeschlagen ist.

    Wenn in einer Anweisung in der Datei ein Fehler auftritt, schlägt der Befehl EXECUTE IMMEDIATE FROM fehl und gibt die Fehlermeldung der fehlgeschlagenen Anweisung zurück.

    Bemerkung

    Wenn der Befehl EXECUTE IMMEDIATE FROM fehlschlägt und eine Fehlermeldung zurückgibt, sind alle Anweisungen in der Datei vor der fehlgeschlagenen Anweisung erfolgreich abgeschlossen worden.

Anforderungen an die Zugriffssteuerung

  • Die Rolle, die zur Ausführung des Befehls EXECUTE IMMEDIATE FROM verwendet wird, muss über die Berechtigung USAGE (externer Stagingbereich) oder READ (interner Stagingbereich) für den Stagingbereich verfügen, in dem sich die Datei befindet.

  • Die Rolle, mit der die Datei ausgeführt wird, kann nur die Anweisungen in der Datei ausführen, für die sie Berechtigungen hat. Wenn beispielsweise eine CREATE TABLE-Anweisung in der Datei enthalten ist, muss die Rolle über die notwendigen Berechtigungen verfügen, um eine Tabelle im Konto zu erstellen, sonst schlägt die Anweisung fehl.

Beachten Sie, dass für die Bearbeitung eines Objekts in einem Schema auch die Berechtigung USAGE für die übergeordnete Datenbank und das Schema erforderlich ist.

Eine Anleitung zum Erstellen einer kundenspezifischen Rolle mit einer bestimmten Gruppe von Berechtigungen finden Sie unter Erstellen von kundenspezifischen Rollen.

Allgemeine Informationen zu Rollen und Berechtigungen zur Durchführung von SQL-Aktionen auf sicherungsfähigen Objekten finden Sie unter Übersicht zur Zugriffssteuerung.

Nutzungshinweise

  • Die SQL-Anweisungen in einer auszuführenden Datei können EXECUTE IMMEDIATE FROM-Anweisungen enthalten:

    • Verschachtelte EXECUTE IMMEDIATE FROM-Anweisungen können relative Dateipfade verwenden.

      Relative Pfade werden in Bezug auf den Stagingbereich und den Dateipfad der übergeordneten Datei ausgewertet. Wenn der relative Dateipfad mit / beginnt, beginnt der Pfad im Stammverzeichnis des Stagingbereichs, der die übergeordnete Datei enthält.

      Ein Beispiel dazu finden Sie unter Grundlegende Beispiele.

    • Relative Dateipfade müssen in einfache Anführungszeichen (') oder $$ gesetzt wird.

    • Die maximale Ausführungstiefe für verschachtelte Dateien ist 5.

  • Absolute Dateipfade können optional in einfache Anführungszeichen (') oder $$ gesetzt werden.

  • Die auszuführende Datei darf nicht größer als 10MB sein.

  • Die auszuführende Datei muss in UTF-8 kodiert sein.

  • Die auszuführende Datei muss unkomprimiert sein. Wenn Sie den Befehl PUT verwenden, um eine Datei in einen internen Stagingbereich hochzuladen, müssen Sie den Parameter AUTO_COMPRESS explizit auf FALSE setzen.

    Laden Sie zum Beispiel my_file.sql nach my_stage hoch:

    PUT file://~/sql/scripts/my_file.sql @my_stage/scripts/
      AUTO_COMPRESS=FALSE;
    
    Copy
  • Das Ausführen aller Dateien in einem Verzeichnis wird nicht unterstützt. Zum Beispiel führt EXECUTE IMMEDIATE FROM @stage_name/scripts/ zu einem Fehler.

Beispiele

Grundlegende Beispiele

In diesem Beispiel wird die Datei create-inventory.sql ausgeführt, die sich im Stagingbereich my_stage befindet.

  1. Erstellen Sie eine Datei namens create-inventory.sql mit den folgenden Anweisungen:

    CREATE OR REPLACE TABLE my_inventory(
      sku VARCHAR,
      price NUMBER
    );
    
    EXECUTE IMMEDIATE FROM './insert-inventory.sql';
    
    SELECT sku, price
      FROM my_inventory
      ORDER BY price DESC;
    
    Copy
  2. Erstellen Sie eine Datei namens insert-inventory.sql mit den folgenden Anweisungen:

    INSERT INTO my_inventory
      VALUES ('XYZ12345', 10.00),
             ('XYZ81974', 50.00),
             ('XYZ34985', 30.00),
             ('XYZ15324', 15.00);
    
    Copy
  3. Erstellen Sie einen internen Stagingbereich my_stage:

    CREATE STAGE my_stage;
    
    Copy
  4. Laden Sie beide lokalen Dateien mit dem Befehl PUT in den Stagingbereich hoch:

    PUT file://~/sql/scripts/create-inventory.sql @my_stage/scripts/
      AUTO_COMPRESS=FALSE;
    
    PUT file://~/sql/scripts/insert-inventory.sql @my_stage/scripts/
      AUTO_COMPRESS=FALSE;
    
    Copy
  5. Führen Sie das Skript create-inventory.sql aus, das sich in my_stage befindet:

    EXECUTE IMMEDIATE FROM @my_stage/scripts/create-inventory.sql;
    
    Copy

    Rückgabewerte:

    +----------+-------+
    | SKU      | PRICE |
    |----------+-------|
    | XYZ81974 |    50 |
    | XYZ34985 |    30 |
    | XYZ15324 |    15 |
    | XYZ12345 |    10 |
    +----------+-------+