>> Inhaltsverzeichnis >> Artikel

Funktionen

Dieser Abschnitt definiert die Syntax aller Elemente die erforderlich sind um nutzerdefinierte Funktionen zu deklarieren, welche innerhalb des Kontextes der Datenbank verwendet werden sollen. Funktionen bestehen aus der Signaturinformation und dem Funktionsrumpf. Beachten Sie: Während die Signatur der Funktion unter mehreren DBMS kompatibel sein kann, muss dies für die Implementierung nicht zutreffen.

Element function

  ELEMENT function (description?, implementation+)
  ATTRIBUTE
       name        string
       title       string
  
Attribute
Attribut Typ Pflicht Default Beschreibung
name string yes n/a Name der Funktion. Sollte kleingeschrieben und ein valider XML-, SQL-Bezeichner sein.
title string - n/a Title ist ein Beschriftungstext, der in der Dokumentation des Objektes angezeigt werden sollte.
Beschreibung

Eine nutzerdefinierte Funktion mit dem angegebenen Namen. Die Funktion darf maximal eine Implementierung für jedes unterstützte DMBS geben.

Element implemetation

  ELEMENT implementation (param*, return?, code)
  ATTRIBUTE
       dbms        string
       language    string
  
Attribute
Attribut Typ Pflicht Default Beschreibung
dbms string - generic Der Name des Ziel-DBMS. Der Wert "generic" bedeutet, dass die Definition für jedes DBMS zutreffend ist. Gewöhnlich wird das als Rückfalloption für DBMS verwendet, an welche Sie entweder beim Erstellen der Datenbankstruktur noch nicht gedacht haben, oder welche das fragliche Feature nicht unterstützen.
language string - n/a Die vorgesehene Programmiersprache. Dies betrifft nur DBMS, welche mehr als eine Sprache unterstützen.
Beschreibung

Die Implementierung definiert die Funktionssignatur und den Quellcode. Die Anzahl der Parameter muss in jedes DBMS (und jedes Implementation-Element) identisch sein.

Implementierung

Falls das Attribut dbms auf "generic" gesetzt ist, kann die XDDL-Implementierung entscheiden, ob die generische Definition der Funktion kompatibel mit einem bestimmten DBMS ist. Falls diese entscheidet, dass die Definition nicht kompatibel ist, kann sie versuchen die Funktion zu simulieren. Für diesen Fall kann die Implementierung die erforderliche Syntax für die Unterelemente "code", "param" und "return" selbst festlegen. Falls die Definition der erforderlichen Syntax nicht entspricht, kann die XDDL-Implementierung einen Fehler melden.

Beachten Sie, dass das Attribut "language" DBMS-abhängig ist. Die meisten DBMS sollten zumindest die Sprache "SQL" unterstützen, während andere auch "Java", "C" oder auch mehr unterstützen können.
Wenn keine Sprache gegeben wird, wird die default Sprache verwendet. Beachten Sie, dass die Implementierung nicht prüfen muss, ob die angegebene Sprache vom angegebenen DBMS unterstützt wird.

Für simulierte Funktionen muss das Attribut language leer sein.

Element param

  ELEMENT param EMPTY
  ATTRIBUTE
       name     string
       type     string
       mode     string
  
Attribute
Attribut Typ Pflicht Default Beschreibung
name string yes n/a eindeutige Parameterbezeichnung
type string yes n/a DBMS-abhängiger Datentyp
mode string - in Das Attribute "mode" identifiziert das Element als
in
Eingabeparameter (Wertparameter)
out
Ausgabeparameter (Übergabe per Referenz)
inout
Referenzparameter (Übergabe per Referenz)
Beschreibung

Eine Parameterdefinition als ein Teil der Funktionssignatur. Das Attribut "mode" definiert das Verhalten des Parameters. Der Typ des Parameters ist vom DBMS abhängig.

Beispiel:

  <function name="foo">
    <implementation>
      <param name="p1" type="string" mode="in"/>
      <param name="p2" type="float" mode="inout"/>
      <param name="p3" type="int" mode="out"/>
      <return>int</return>
      <code>...</code>
    </implementation>
  </function>

  Kann interpretiert werden als:

  int foo ( string $p1,  float &$p2,  int &$p3 = null ) { ... }
  

Beachten Sie, dass manche DBMS nur Eingabeparameter (Wertparameter) unterstützen. In diesem Fall muss das Attribut mode den Wert "in" haben. Die Implementierung kann einen Fehler melden, wenn eine nicht unterstützte Definition gefunden wird.

Element return

  ELEMENT return (#PCDATA)
  
Beschreibung

Der durch die Funktion zurückgegebene Datentyp. Diese Einstellung ist DBMS-abhängig.

Wenn kein Rückgabewert definiert, oder die Angabe leer ist, so wird der Defaultwert "void" verwendet, was bedeutet, dass die Funktion keinen Wert zurückgibt. Falls die Funktion mehr als einen Wert zurückgeben muss, sollten stattdessen Ausgabeparameter (mode=out) verwendet werden.
Beachten Sie, dass in MySQL Funktionen, die keinen Rückgabewert haben, "Methoden" genannt werden.

Element code

  ELEMENT code (#PCDATA)
  
Beschreibung

Der Funktionsrumpf. Die Syntax des Inhaltes hängt von den Parametern für DBMS und Programmiersprache ab. Wenn das DBMS auf "generic" gesetzt ist, dann wird dieser Code durch die Server-Anwendung ausgeführt. Für diesen Fall kann die Implementierung die erforderliche Syntax selbst festlegen. Es wird empfohlen, dass das Element code darauf beschränkt wird, den Namen einer Funktion anzugeben, welche die Implementierung aufrufen kann. Alle Eingabeparameter werden an diese Funktion weitergeleitet. Beachten Sie, dass generische Funktionen innerhalb von SQL-Anweisungen nicht verwendet werden können, weil diese nicht vom DBMS ausgeführt werden.

Autor: Thomas Meyer, www.yanaframework.net