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 » Abfrageverarbeitung » Abfragen optimieren und ausführen » Semantische Abfragentransformation

 

Inlining von benutzerdefinierten Funktionen

Einfache benutzerdefinierte Funktionen sind manchmal inline, wenn sie als Teil einer Abfrage aufgerufen werden. Das heißt, dass die Abfrage umgeschrieben wird, um mit der ursprünglichen Abfrage äquivalent zu sein, aber ohne Einbeziehung der Funktionsdefinition. Temporäre Funktionen, rekursive Funktionen und Funktionen mit der NOT DETERMINISTIC-Klausel sind niemals inline. Überdies ist eine Funktion niemals inline, wenn sie mit einer Unterabfrage als ein Argument oder innerhalb einer temporären Prozedur aufgerufen wird.

Benutzerdefinierte Funktionen können inline sein, wenn sie eines der folgenden Formate annehmen:

  • Eine Funktion mit einer einzigen RETURN-Anweisung. Zum Beispiel:

    CREATE FUNCTION F1( arg1 INT, arg2 INT )
    RETURNS INT
    BEGIN
     RETURN arg1 * arg2
    END;
  • Eine Funktion, die eine einzige Variable deklariert, diese Variable zuweist und einen einzigen Wert zurückgibt. Zum Beispiel:

    CREATE FUNCTION F2( arg1 INT )
    RETURNS INT
    BEGIN
     DECLARE result INT;
     SET result = ( SELECT ManagerID FROM Employees WHERE EmployeeID=arg1 );
     RETURN result;
    END;
  • Eine Funktion, die eine einzige Variable deklariert, eine Select-Anweisung in diese Variable durchführt und einen einzigen Wert zurückgibt. Zum Beispiel:

    CREATE FUNCTION F3( arg1 INT )
    RETURNS INT
    BEGIN
     DECLARE result INT;
     SELECT ManagerID INTO result FROM Employees e1 WHERE EmployeeID=arg1;
     RETURN result;
    END;
    

Eine benutzerdefiniert Funktion wird inline, indem der Hauptteil der benutzerdefinierten Funktion kopiert wird und die Argumente von diesem Aufruf sowie die entsprechenden CAST-Funktionen eingefügt werden, um zu gewährleisten, dass die umgeschriebene Form der Abfrage mit dem Original äquivalent ist. Beispiel: Sie haben eine Funktion erstellt, die der vorhin definierten Funktion F1 ähnlich ist, und rufen die Prozedur in einer FROM-Klausel einer Abfrage folgendermaßen auf:

SELECT F1( e.EmployeeID, 2.5 ) FROM Employees e;

Der Datenbankserver könnte die Abfrage folgendermaßen umschreiben:

SELECT CAST( e.EmployeeID AS INT ) * CAST( 2.5 AS INT ) FROM Employees e;
Siehe auch