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 - Programmierung » SQL Anywhere Datenzugriff-APIs » API der externen Funktionen in SQL Anywhere

 

Prozeduren und Funktionen mit externen Aufrufen erstellen

In diesem Abschnitt werden einige Beispiele für Prozeduren und Funktionen mit externen Aufrufen beschrieben.

DBA-Berechtigung erforderlich

Sie benötigen die DBA-Berechtigung, um Prozeduren oder Funktionen zu erstellen, die externe Bibliotheken referenzieren. Diese Anforderung ist strikter als die RESOURCE-Berechtigung, die für die Erstellung anderer Prozeduren und Funktionen erforderlich ist.

Syntax

Sie können eine gespeicherte SQL-Prozedur, die eine C/C++-Funktion in einer Bibliothek (eine dynamische Verknüpfungsbibliothek (DLL, Dynamic Link Library) oder ein gemeinsam genutztes Objekt) aufruft, folgendermaßen erstellen:

CREATE PROCEDURE coverProc( Parameterliste )
  EXTERNAL NAME 'myFunction@myLibrary'
  LANGUAGE C_ESQL32;

Wenn Sie eine gespeicherte Prozedur oder Funktion auf diese Weise definieren, erstellen Sie eine Brücke zu der Funktion in der externen DLL. Die gespeicherte Prozedur oder Funktion kann keine anderen Aufgaben ausführen.

Auf ähnliche Weise können Sie folgendermaßen eine gespeicherte SQL-Funktion erstellen, die eine C/C++-Funktion in einer Bibliothek aufruft:

CREATE FUNCTION coverFunc( Parameterliste )
  RETURNS Datentyp
  EXTERNAL NAME 'myFunction@myLibrary'
  LANGUAGE C_ESQL32;

In diesen Anweisungen gibt die EXTERNAL NAME-Klausel den Namen der Funktion und die Bibliothek an, in der sie sich befindet. Im Beispiel ist myFunction der exportierte Name einer Funktion in der Bibliothek und myLibrary ist der Name der Bibliothek (z.B. myLibrary.dll oder myLibrary.so).

Die LANGUAGE-Klausel gibt an, dass die Funktion in einer externen Umgebung aufgerufen werden soll. Die LANGUAGE-Klausel kann Folgendes angeben: C_ESQL32, C_ESQL64, C_ODBC32 oder C_ODBC64. Das Suffix 32 oder 64 gibt an, dass die Funktion als 32-Bit- oder 64-Bit-Anwendung kompiliert ist. Die Angabe von ODBC zeigt an, dass die Anwendung die ODBC-API verwendet. Die Angabe von ESQL zeigt an, dass die Anwendung die Embedded SQL-API, die SQL Anywhere C-API, jede andere Nicht-ODBC-API oder keine API verwendet.

Wenn die LANGUAGE-Klausel nicht angegeben ist, wird die Bibliothek, die die Funktion enthält, in den Adressenbereich des Datenbankservers geladen. Wenn sie aufgerufen wird, wird die externe Funktion als Teil des Datenbankservers ausgeführt. In diesem Fall wird, falls die Funktion einen Fehler verursacht, der Datenbankserver beendet. Aus diesem Grund wird empfohlen, Funktionen in einer externen Umgebung zu laden und auszuführen. Wenn eine Funktion einen Fehler in einer externen Umgebung verursacht, läuft der Datenbankserver weiter.

Die Argumente in Parameterliste müssen in Typ und Reihenfolge den Argumenten entsprechen, die von der Bibliotheksfunktion erwartet werden. Die Bibliotheksfunktion greift auf die Prozedurargumente unter Verwendung einer API zu, wie unter Prototypen externer Funktionen beschrieben.

Jeder von der externen Funktion zurückgegebene Wert bzw. jede Ergebnismenge kann von der gespeicherten Funktion oder Prozedur an die aufrufende Umgebung zurückgegeben werden.

Keine anderen Anweisungen zulässig

Eine gespeicherte Prozedur oder Funktion, die eine externe Funktion referenziert, kann keine anderen Anweisungen enthalten. Ihr einziger Zweck ist die Übernahme von Argumenten für eine Funktion, der Aufruf der Funktion und die Rückgabe der Werte und der von der Funktion zurückgegebenen Argumente an die aufrufende Umgebung. Sie können die Parameter IN, INOUT oder OUT im Prozeduraufruf genauso wie bei anderen Prozeduren verwenden. Die Eingabewerte werden an die externe Funktion übergeben, und von der Funktion veränderte Parameter werden an die aufrufende Umgebung in OUT- oder INOUT-Parametern oder als RETURNS-Ergebnis der gespeicherten Funktion zurückgegeben.

Systemabhängige Aufrufe

Sie können Betriebssystem-abhängige Aufrufe angeben, sodass eine Prozedur eine Funktion auf einem Betriebssystem und eine andere Funktion (wahrscheinlich eine dazu analoge) auf einem anderen Betriebssystem aufruft. Die Syntax für solche Aufrufe verlangt den Betriebssystemnamen als Präfix vor dem Funktionsnamen. Die Betriebssystem-ID muss Unix sein. Beispiel:

CREATE FUNCTION func ( Parameterliste )
  RETURNS Datentyp
  EXTERNAL NAME 'Unix:Funktionsname@library.so;Funktionsname@library.dll';

Wenn die Liste der Funktionen keinen Eintrag für das Betriebssystem enthält, auf dem der Server läuft, aber ein Eintrag ohne Betriebssystem vorhanden ist, ruft der Datenbankserver die Funktion in diesem Eintrag auf.

Siehe auch