Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » SQL Anywhere Server - SQL-Referenzhandbuch » Verwendung von SQL » SQL-Anweisungen » SQL-Anweisungen (E-O)

 

EXECUTE IMMEDIATE-Anweisung [SP]

Mit dieser Anweisung aktivieren Sie dynamisch aufgebaute Anweisungen, damit diese von innerhalb einer Prozedur ausgeführt werden können.

Syntax 1
EXECUTE IMMEDIATE [ Ausführungsoption ] Zeichenfolgenausdruck
Ausführungsoption:
  WITH QUOTES [ ON | OFF ]
| WITH ESCAPES { ON | OFF }
| WITH RESULT SET { ON | OFF }
Syntax 2
EXECUTE ( Zeichenfolgenausdruck )
Parameter
  • WITH QUOTES-Klausel   Wenn Sie WITH QUOTES oder WITH QUOTES ON angeben, werden Anführungszeichen im Zeichenfolgenausdruck als Begrenzungszeichen eines Bezeichners interpretiert. Wenn Sie nicht WITH QUOTES oder WITH QUOTES OFF angeben, ist die Behandlung der Anführungszeichen in Zeichenfolgenausdrücken abhängig von der aktuellen Einstellung der Option quoted_identifier.

    WITH QUOTES ist hilfreich, wenn ein Objektname, der an die gespeicherte Prozedur übergeben wird, verwendet wird, um die auszuführende Anweisung aufzubauen, aber der Name Anführungszeichen erfordern könnte und die Prozedur aufgerufen werden könnte, wenn quoted_identifier auf OFF gesetzt ist. Weitere Hinweise finden Sie unter quoted_identifier-Option [Kompatibilität].

  • WITH ESCAPES-Klausel   WITH ESCAPES OFF bewirkt, dass Escape-Sequenzen (wie \n, \x oder \\) im Zeichenfolgenausdruck ignoriert werden. Beispiel: Zwei aufeinanderfolgende Backslashes bleiben zwei Backslashes und werden nicht in einen einzelnen Backslash konvertiert. Die Standardeinstellung entspricht WITH ESCAPES ON.

    Ein Einsatzbereich von WITH ESCAPES OFF dient der einfacheren Ausführung von dynamisch aufgebauten Anweisungen, die Dateinamen mit Backslashes referenzieren.

    Unter bestimmten Umständen werden Escape-Sequenzen im Zeichenfolgenausdruck umgewandelt, bevor die EXECUTE IMMEDIATE-Anweisung ausgeführt wird. Beispiel: Zusammengesetzte Anweisungen werden syntaktisch analysiert, bevor sie ausgeführt werden, und Excapesequenzen werden während dieser syntaktischen Analyse unabhängig von der WITH ESCAPES-Einstellung umgewandelt. Unter diesen Umständen verhindert WITH ESCAPES OFF weitere Umwandlungen. Zum Beispiel:

    BEGIN
       DECLARE String1 LONG VARCHAR;
       DECLARE String2 LONG VARCHAR;
       EXECUTE IMMEDIATE
            'SET String1 = ''One backslash: \\\\ ''';
         EXECUTE IMMEDIATE WITH ESCAPES OFF
            'SET String2 = ''Two backslashes: \\\\ ''';
       SELECT String1, String2
    END

  • WITH RESULT SET-Klausel   Die EXECUTE IMMEDIATE-Anweisung gibt eine Ergebnismenge zurück, wenn Sie WITH RESULT SET ON angeben. Durch diese Klausel wird die Rückgabe einer Ergebnismenge durch die enthaltene Prozedur gekennzeichnet. Ist diese Klausel nicht enthalten, wird beim Prozeduraufruf ein Fehler protokolliert, wenn die Anweisung eine Ergebnismenge produziert.

    Hinweis

    Standardmäßig ist die Option WITH RESULT SET OFF eingestellt. Dies bedeutet, dass keine Ergebnismenge produziert wird, wenn die Anweisung ausgeführt wird.

Bemerkungen

Die EXECUTE-Anweisung erweitert den Bereich der Anweisungen, die innerhalb einer Prozedur oder eines Triggers ausgeführt werden können. Mit ihrer Hilfe können dynamisch vorbereitete Anweisungen ausgeführt werden. Dazu gehören zum Beispiel Anweisungen, die mithilfe von Parametern aufgebaut werden, welche an eine Prozedur übergeben werden.

Literalzeichenfolgen in der Anweisung müssen in Apostrophe gesetzt werden, und die Anweisung muss in einer einzigen Zeile stehen.

Nur globale Variable können in einer Anweisung referenziert werden, die von EXECUTIVE IMMEDIATE ausgeführt wird.

Nur Syntax 2 kann innerhalb von gespeicherten Transact-SQL-Prozeduren und -Triggern verwendet werden.

Berechtigungen

Keine. Die Anweisung wird mit den Berechtigungen des Eigentümers der Prozedur ausgeführt, und nicht mit den Berechtigungen des Benutzers, der die Prozedur aufruft.

Nebenwirkungen

Keine. Wenn es sich jedoch bei der Anweisung um eine Datendefinitionsanweisung mit Autocommit als Nebenwirkung handelt, wird das Autocommit ausgeführt.

Weitere Hinweise zur Verwendung der EXECUTE IMMEDIATE-Anweisung in Prozeduren finden Sie unter Die EXECUTE IMMEDIATE-Anweisung in Prozeduren verwenden.

Siehe auch
Standards und Kompatibilität
  • SQL/2003   SQL/Foundation-Merkmal außerhalb der Kern-SQL.

Beispiele

Die folgende Prozedur erstellt eine Tabelle, wobei der Tabellenname als ein Parameter an die Prozedur übergeben wird. Die EXECUTE IMMEDIATE-Anweisung muss in einer einzigen Zeile stehen.

CREATE PROCEDURE CreateTableProc(
                  IN tablename char(30)
                  )
BEGIN
   EXECUTE IMMEDIATE
   'CREATE TABLE ' || tablename ||
   ' ( column1 INT PRIMARY KEY)'
END;

So rufen Sie die Prozedur auf und erstellen die Tabelle 'mytable':

CALL CreateTableProc( 'mytable' );

Ein Beispiel für EXECUTE IMMEDIATE mit einer Abfrage, die eine Ergebnismenge zurückgibt, finden Sie unter Die EXECUTE IMMEDIATE-Anweisung in Prozeduren verwenden.