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-Benutzerhandbuch » Gespeicherte Prozeduren und Trigger » Prozeduren, Trigger und Batches verwenden

 

Die EXECUTE IMMEDIATE-Anweisung in Prozeduren verwenden

Die Anweisung EXECUTE IMMEDIATE ermöglicht den Aufbau von Anweisungen innerhalb von Prozeduren mit einer Kombination aus Literal-Zeichenfolgen (in Apostrophen) und Variablen. Beispiel: Die folgende Prozedur enthält eine EXECUTE IMMEDIATE-Anweisung, die eine Tabelle erstellt.

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

Die EXECUTE IMMEDIATE-Anweisung kann mit Abfragen verwendet werden, die Ergebnismengen zurückgeben. Zum Beispiel:

CREATE PROCEDURE DynamicResult(
   IN Columns LONG VARCHAR,
   IN TableName CHAR(128),
   IN Restriction LONG VARCHAR DEFAULT NULL )
BEGIN
    DECLARE Command LONG VARCHAR;
    SET Command = 'SELECT ' || Columns || ' FROM ' || TableName;
    IF ISNULL( Restriction,'') <> '' THEN
         SET Command = Command || ' WHERE ' || Restriction;
    END IF;
    EXECUTE IMMEDIATE WITH RESULT SET ON Command;
END;

Die folgende Anweisung ruft diese Prozedur auf:

CALL DynamicResult(
   'table_id,table_name',
   'SYSTAB',
   'table_id <= 10');
table_id table_name
1 ISYSTAB
2 ISYSTABCOL
3 ISYSIDX
... ...

In atomaren zusammengesetzten Anweisungen können Sie EXECUTE IMMEDIATE-Anweisungen nicht verwenden, die ein COMMIT verursachen, da COMMIT in diesem Kontext nicht zulässig ist.

Weitere Hinweise finden Sie unter EXECUTE IMMEDIATE-Anweisung [SP].