CAST-Funktionen

Aufgrund der strengen Typisierung, die dem objektrelationalem Modell zugrunde liegt, werden CAST-Funktionen benötigt, um Typkonvertierungen für Instanzen unterschiedlicher Datentypen durchzuführen.

Sie untergliedern sich in folgende Arten:

Die automatisch generierten CAST-Funktionen transformieren eine Instanz eines benutzerdefniertten Datentyps in eine Instanz des zugrunde liegenden Quelldatentyps. Sie sind von der Form

    CAST(Werteausdruck AS Zieltypname), 

wobei Zieltypname entweder der Quelltypname ist oder der Name des benutzerdefnierten Datentyps und der Werteausdruck jeweils eine Instanz vom anderen Typs.

Beispiele:

   -- Typerzeugung 
   CREATE TYPE TelefonTyp   AS VARCHAR(15)   FINAL;
   CREATE TYPE PLZTyp       AS VARCHAR(5)    FINAL;

   -- Variablendeklarationen
   DECLARE Plz                 PLZTyp;
   DECLARE TelefonPrivat       TelefonTyp;
   DECLARE TelefonPrivV        VARCHAR(15); 

   -- Zuweisungen, Konvertierungen und Verarbeitungen
   SET Plz           = PLZTyp('51643');                  -- initialisieren mit 51643  
   SET TelefonPrivat = TelefonTyp('02261819656883');     -- initialisieren mit 02261819656883
   SET TelefonPrivV  = CAST(TelefonPrivat AS VARCHAR);   -- Typkonvertierung von TelefonTyp nach VARCHAR
   IF  TelefonPrivV  = TelefonPrivat THEN ...;           -- ein Typkonflikt tritt auf
   SET Plz           = '51643';                          -- ein Typkonflikt tritt auf

   -- --------------------------------------------
   -- Typerzeugungen
   CREATE TYPE PreisTyp  AS  DECIMAL(8,2)  FINAL; 
   CREATE TYPE SummeTyp  AS  DECIMAL(15,2) FINAL; 
   CREATE TYPE AnzahlTyp AS  DECIMAL(5)    FINAL; 

   -- Variablendeklarationen
   DECLARE Preis     PreisTyp;
   DECLARE Summe     SummeTyp;
   DECLARE Anzahl    AnzahlTyp;

   -- Zuweisungen, Konvertierungen und Verarbeitungen
   SET Summe = Preis * Anzahl;                           -- * ist nicht für Preis und Anzahll definiert
                                                         -- und Summe ist noch ein dritter Typ
   SET Summe = SummeTyp( CAST(Preis, AS DECIMAL) * CAST(Anzahl, AS DECIMAL) );  


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

Kategorien: Objektrelationale DB, C