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 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.

Problembehandlung von EXECUTE IMMEDIATE FROM-Fehler

Dieser Abschnitt enthält einige häufige Fehler, die sich aus einer EXECUTE IMMEDIATE FROM-Anweisung ergeben, und wie Sie diese beheben können.

Dateifehler

Fehler

001501 (02000): File '<directory_name>' not found in stage '<stage_name>'.

Ursache

Es gibt mehrere Ursachen für diesen Fehler:

  • Die Datei ist nicht vorhanden.

  • Der Dateiname ist der Name des Stammverzeichnisses. Beispiel: @stage_name/scripts/.

Lösung

Überprüfen Sie den Namen der Datei, und stellen Sie sicher, dass die Datei vorhanden ist. Das Ausführen aller Dateien in einem Verzeichnis wird nicht unterstützt.

Fehler

001503 (42601): Relative file references like '<filename.sql>' cannot be used in top-level EXECUTE IMMEDIATE calls.

Ursache

Die Anweisung wurde mit einem relativen Dateipfad außerhalb einer Dateiausführung ausgeführt.

Lösung

Ein relativer Dateipfad kann nur in EXECUTE IMMEDIATE FROM-Anweisungen in einer Datei verwendet werden. Verwenden Sie den absoluten Dateipfad für die Datei. Weitere Informationen dazu finden Sie unter Nutzungshinweise.

Fehler

001003 (42000): SQL compilation error: syntax error line <n> at position <m> unexpected '<string>'.

Ursache

Die Datei enthält SQL-Syntaxfehler.

Lösung

Korrigieren Sie die Syntaxfehler in der Datei, und laden Sie die Datei erneut in den Stagingbereich hoch.

Stagingbereichsfehler

Fehler

002003 (02000): SQL compilation error: Stage '<stage_name>' does not exist or not authorized.

Ursache

Der Stagingbereich ist nicht vorhanden, oder Sie haben keinen Zugriff auf den Stagingbereich.

Lösung

  • Überprüfen Sie den Namen des Stagingbereichs, und stellen Sie sicher, dass der Stagingbereich vorhanden ist.

  • Führen Sie die Anweisung mit einer Rolle aus, die über die erforderlichen Berechtigungen für den Zugriff auf den Stagingbereich verfügt. Weitere Informationen dazu finden Sie unter Anforderungen an die Zugriffssteuerung.

Zugriffssteuerungsfehler

Fehler

003001 (42501): Uncaught exception of type 'STATEMENT_ERROR' in file <file_name> on line <n> at position <m>:
SQL access control error: Insufficient privileges to operate on schema '<schema_name>'

Ursache

Die zur Ausführung der Anweisung verwendete Rolle verfügt nicht über die erforderlichen Berechtigungen, um einige oder alle Anweisungen in der Datei auszuführen.

Lösung

Verwenden Sie eine Rolle, die über die entsprechenden Berechtigungen verfügt, um die Anweisungen in der Datei auszuführen. Weitere Informationen dazu finden Sie unter Anforderungen an die Zugriffssteuerung.

Siehe auch Stagingbereichsfehler.

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