12.07.2015 Aufrufe

200 - Midrange Magazin

200 - Midrange Magazin

200 - Midrange Magazin

MEHR ANZEIGEN
WENIGER ANZEIGEN
  • Keine Tags gefunden...

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Eine weitere Möglichkeit, einen eindeutigenWert zu generieren, ist, einSequence-Objekt zu erstellen und zuverwenden. Wie bei den Indentity Columnshaben Sequence-Objekte einennumerischen Datentypen. AnfangsundEndwert, Schrittgröße sowie dieAktion beim Überlauf können angegebenwerden. Im Gegensatz zu IndentityColumns wird der nächste Wert nur aufAnforderung ermittelt. Das gleiche Sequence-Objektkann für mehrere Spaltenauch in unterschiedlichen Tabellenverwendet werden.Keine der drei Möglichkeiten bieteteine Garantie, dass die in einer Tabelleeingefügten Sätze auch tatsächlich ineiner auf- oder absteigenden Reihenfolgevorhanden sind. Denn auch bei IndentityColumns und der Verwendungvon Sequence-Objekten kann bei einemÜberlauf des Zyklus’ von vorn begonnenwerden. Mussten die Sätze in einerechten auf- oder absteigenden Reihenfolgeangeordnet werden, hatte man beieinem Überlauf vor Release V5R4 nurdie Möglichkeit, das Feld beziehungsweisedie Felder zu erweitern.Seit Release V5R4 kann nun überdie Funktion GENERATE_UNIQUE einechter eindeutiger Wert in fortlaufenderReihenfolge ermittelt werden. Das Ergebnisaus dieser Funktion ist ein 13-stelliger String, der Bit-Daten enthält.Spalten, die einen über die FunktionGENERATE_UNIQUE bestimmten Wertaufnehmen müssen, werden demnachwie in Beispiel 6 dargestellt generiert.Der eindeutige Wert wird auf Basisder koordinierten Weltzeit (=UniversalTime Coordinated UTC) und der Seriennummerder iSeries (System i) ermittelt.Werden beispielsweise mit einemeinzigen Insert-Statement mehrere Zeilenin eine Tabelle eingefügt, wird fürjeden Satz ein neuer, vom vorherigenWert abweichender größerer Wert ermittelt.Die Ergebnisse sind auch dannunterschiedlich, wenn alle Sätze in dergleichen Mikro-Sekunde geschriebenwurden.Leider wird der eindeutige Wertnicht automatisch ermittelt, vielmehrmuss die Funktion bei einem InsertoderUpdate-Statement für die entsprechendeSpalte angegeben werden.Beispiel 7 zeigt ein Insert-Statement,bei dem der eindeutige Wert über dieFunktion GENERATE_UNIQUE ermitteltund eingefügt wird.Anstatt die Funktion bei jeder Zeile,die eingegeben oder fortgeschriebenwird, anzugeben, kann man einen Before-Insert-und/oder Before-Update-Trigger erstellen, der diese Aufgabeübernimmt. Dabei sollte man jedoch berücksichtigen,dass hinter dem Aufrufeines Trigger immer ein dynamischerProgrammaufruf steckt, was sich negativauf die Performance auswirkenkann.Da in dem eindeutigen Wert, derüber die Funktion GENERATE_UNIQUEgeneriert wurde, die aktuelle Zeitmarkeverarbeitet wurde, ist es auch möglich,diese Zeitmarke über die skalare FunktionTIMESTAMP() zu extrahieren. Einzusätzliches Zeitmarkenfeld, das dieErstellungs- oder Aktualisierungszeitbeinhaltet, ist damit unter Umständennicht mehr erforderlich.RAISE_ERROR – FehlermeldungÜber die neue Funktion RAISE_ERRORkann bei der Programmierung mit SQLeine Abbruchsnachricht mit einer beliebigenFehlermeldung gesendet werden.Die Funktion RAISE_ERROR erfordertzwei Parameter. Im ersten Parameterkann ein beliebiger SQL-Status angegebenwerden. Der SQL-Status bestehtaus fünf Zeichen, bei denen es sich entwederum Ziffern oder die GroßbuchstabenA-Z handeln kann. Die erstenbeiden Stellen dürfen allerdings weder00 noch 01 noch 02 sein. Diese Statusklassensind den Fehlermeldungen ausSQL-Statements vorbehalten.Im zweiten Parameter kann ein beliebigerNachrichtentext, der im Fehlerfallausgegeben werden soll, hinterlegtwerden.Wird die Funktion RAISE_ERRORausgeführt, wird die Verarbeitung abgebrochenund der SQLCODE (bzw. SQL-COD) -438 ausgegeben. Der SQL-Status(SQLSTATE beziehungsweise SQLSTT)entspricht dem im zweiten Parameterangegebenen Status. Der Fehlertextbeziehungsweise die ersten 70 Zeichendavon werden, sofern mit SQL CommunicationsArea (SQLCA) gearbeitet wird,im Feld SQLERRMC (beziehungsweiseSQLERM) ausgegeben.Beispiel 8 zeigt einen Trigger, derEingaben im Adress-Stamm beim Einfügeneines neuen Adress-Stammsprüft.Soweit der Überblick über die Unterstützungdes Full-Selects in Updateund Set-Statement, über den MultipleColumn Prädikat Support sowie übereinige wichtige, skalare Funktionen.Und nun viel Spaß beim Ausprobieren!Birgitta Hauser ó09/<strong>200</strong>7 · MIDRANGE MAGAZIN65

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!