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. 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. 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. 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; |
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2010, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.0 |