Ermöglicht das Ausführen von dynamisch aufgebauten Anweisungen innerhalb einer Prozedur.
EXECUTE IMMEDIATE [ execute-option ] string-expression
execute-option : WITH QUOTES [ ON | OFF ] | WITH ESCAPES { ON | OFF } | WITH BATCH { ON | OFF } | WITH RESULT SET { ON | OFF }
EXECUTE ( string-expression )
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.
WITH ESCAPES-Klausel WITH ESCAPES OFF bewirkt, dass Escapesequenzen (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 Escapesequenzen im string-expression 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. 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 BATCH-Klausel Mit der WITH BATCH-Klausel können Sie die Ausführung von Batches in EXECUTE IMMEDIATE-Anweisungen steuern. Die Einstellung WITH BATCH OFF bietet Schutz vor unbeabsichtigter Einschleusung von SQL-Befehlen, wenn die Prozedur ausgeführt wird.
WITH BATCH ON ist die Standardeinstellung, außer für Prozeduren, deren Eigentümer dbo ist.
Wenn WITH BATCH OFF verwendet wird, muss die durch string-expression angegebene Anweisung eine einzige Anweisung sein.
WITH RESULT SET-Klausel Die WITH RESULT SET-Klausel ermöglicht dem Server die korrekte Definition der Prozedur, die sie enthält. Das Angeben von WITH RESULT SET ON oder WITH RESULT SET OFF wirkt sich sowohl darauf aus, was passiert, wenn die Prozedur erstellt wird, als auch darauf, was passiert, wenn die Prozedur ausgeführt wird. Die Standardoption ist WITH RESULT SET OFF.
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.
Die EXECUTE IMMEDIATE-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, wie zum Beispiel Anweisungen, die unter Verwendung der an eine Prozedur übergebenen Parameter aufgebaut werden.
Hinweise zur unterstützten Syntax für benannte Parameter finden Sie unter Benannte Parameter.
Literalzeichenfolgen in der Anweisung müssen in Apostrophe gesetzt werden. Zeichenfolgenliterale können nicht über mehrere Zeilen laufen.
Nur globale Variablen 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.
Mit EXECUTE IMMEDIATE ausgeführte Anweisungen haben ihre Pläne nicht zwischengespeichert.
Keine.
Keine. Wenn es sich jedoch bei der Anweisung um eine Datendefinitionsanweisung mit Autocommit als Nebenwirkung handelt, wird das Autocommit ausgeführt.
SQL/2008 EXECUTE IMMEDIATE ist die optionale SQL-Sprachenfunktion B031 (Basic Dynamic SQL) des SQL/2008-Standards. Die execute-option-Syntax ist eine Erweiterung des Herstellers. Der SQL/2008-Standard verbietet die Verwendung von EXECUTE IMMEDIATE-Anweisungen, die eine Ergebnismenge zurückgeben.
Transact-SQL Syntax 2 ist die Syntax des Transact-SQL-Dialekts für EXECUTE IMMEDIATE. Die execute-option-Syntax wird von Adaptive Server Enterprise nicht unterstützt.
Die folgende Prozedur erstellt eine Tabelle, wobei der Tabellenname als ein Parameter an die Prozedur übergeben wird.
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' ); |
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2013, SAP AG oder ein SAP-Konzernunternehmen. - SAP Sybase SQL Anywhere 16.0 |