Methoden (SQL)

SQL-Methoden ermöglichen es, für Objekte das zugehörige Objektverhalten in der Datenbank zu hinterlegen. Mit ihnen wird der Grundgedanke der objektorientierten Programmierung umgesetzt, dass zur Beschreibung eines Objekt nicht nur seine Datenwerte, sondern auch sein Verhalten gehören. Und dieses Verhalten wird mittels Methoden implementiert. Sie werden im CREATE TYPE-Befehl deklariert und an das Objekt gebunden. Damit werden diese Methoden für Objekte, die diesen Typ instanziieren, aufrufbar.

In der CREATE TYPE-Anweisung gibt es die Option <Methodendeklarationsliste>, die wie folgt definiert ist:

SQL-Methodendeklatationsliste der CREATE-TYPE-Anweisung:

    <Methodendeklarationsliste> ::= [ INSTANCE | CONSTRUCTOR | STATIC ]
                                    METHOD Methodenname [(Parameterliste)]
                                    RETURNS Rückgabedatentyp
                                    [ SELF AS RESULT ]
                                    [ <Methodencharakteristikaliste> ]
  • STATIC : Eine statische Methode ist das Pendant zur Klassenmethode, wie sie aus der objektorientierten Programmierung bekannt sind. Ihr Aufruf erfolgt derart: "Typname::Methodenname[(Parameterliste)]".
  • INSTANCE: Eine Instanz-Methode wird ausgeführt auf Instanzen strukturierter Datentypen. Sie verfügen über einen impliziten SELF-Operator der den strukturierten Wert darstellt, für den die Methode aufgerufen wurde. Ihr Aufruf erfolgt derart: "Strukturierter_Wert.Methodenname[(Parameterlister)]".
  • CONSTRUCTOR : Diese hier deklarierten Konstruktor-Methoden ersetzen die vom DBMS automatisch erzeugten Konstruktor-Methoden mit einer selbstprogrammierten Funktionalität. Die autoamtisch erzeugten, wie auch die selbstprogrammierten heißen genauso wie der zugehörige strukturierte Datentyp und genauso wie die automatisch generierten erzeugen die selbstprogrammierten für die Parameterwerte eine neue Instanz des strukturierten Datentyps. Sie sind ebenfalls Instanz-Methoden und ein Aufruf erfolgt derart: "NEW Typname(Parameterliste)".

Methodencharakteristika können sein:

  • LAGUAGE {SQL | C | JAVA}: Als Programmiersprachen für die Methoden sind die SQL-eigene prozedurale Erweiterung, C oder Java zugelassen.
  • [NOT] DETERMINISTIC: Eine deterministische Methode gibt bei zwei Aufrufen mit den gleichen Argumenten auch das gleiche Ergebnis zurück, bei nicht deterministischen Methoden sind es unterschiedliche Ergbnisse. Möglich wird so etwas, wenn z.B. die Systemzeit oder ein Zufallsgenerator verwendet wird in der Programmlogik.
  • {NO SQL | CONTAINS SQL | READS SQL DATA | MODIFIES SQL DATA}: Je nachdem, ob eine Methode in "kritischen" Situation ausgeführt wird, kann es relevant sein, welcher Art die enthaltenen SQL-Befehle sind. Bei NO SQL sind in der Methode keine SQL-Befehle enthalten (nur zulässig für C- und Java-Programmen). Bei CONTAINS SQL sind SQL-Befehle zulässig, die weder Daten lesen noch manipulieren. Bei READS SQL DATA sind nur lesende SQL-Befehle erlaubt und bei MODIFIES SQL DATA auch manipulierende.

Nachdem die Methode deklariert wurde, kann sie programmiert werden mittels einer eigenen Anweisung: CREATE METHOD.

Beispiele:

  -- instanziierbarer Typ für Atrikel-Daten, der kein Wurzeltyp einer Hierarchie sein kann
  -- mit einer abgeleiteten OID und einer statischen und Instanz-Methode, die länderspezifisch den Bruttopreis berechnen
  CREATE TYPE artikel_typ AS (artikel_nr        NUMERIC(20), 
                              bezeichnung       VARCHAR(100),  
                              preis_netto       euro_Typ) 
                              REF FROM (artikel_nr)
                              INSTANTIABLE  FINAL
                              STATIC   METHOD preis_brutto_d(netto IN euro_Typ) RETURNS euro_Typ,
                              INSTANCE METHOD preis_brutto_f                    RETURNS SELF AS RESULT;


  -- Typisierte Tabelle vom Typ artikel_typ 
  CREATE TABLE artikel_tt OF artikel_typ (REF IS obj_id SYSTEM GENERATED, 
                                       atrikel_nr    PRIMARY KEY,
                                       bezeichnung   NOT NULL);

  -- Einfügen mit automatisch erstellter Konstrukturmethode
  INSERT INTO artikel_tt VAUES ( artikel_tt( 45678, 'Fahrradhelm', euroTyp(15.99) ) );

Quellen:

  • ANSI/ISO/IEC 9075-1:2003. Part 1 "SQL/Framework", ISO International Organization for Standardization / ANSI American National Standards Institute, September 2003
  • ANSI/ISO/IEC 9075-2:2003. Part 2 "SQL/Foundation", ISO International Organization for Standardization / ANSI American National Standards Institute, Dezember 2003
  • Türker, Can/Saake, Gunter: "Objektrelationale Datenbanken", dpunkt-verlag, Heidelberg, 2006, ISBN 3-89864-190-2

Kategorie: Objektrelationale DB, M