Databases Reference
In-Depth Information
WHILE rest > 0 LOOP
IF DOW(neudat) BETWEEN 2 AND 6 AND -- Montag .. Freitag
Feiertag(neudat)=0 THEN -- kein Feiertag
SET rest = rest-1
END IF;
SET neudat = neudat+1
END LOOP;
RETURN neudat;
END;
Ein Aufruf kann z.B. wie folgt aussehen:
SELECT bestell_nr, bestelldatum, lieferdatum
FROM bestellung
WHERE lieferdatum > add_werktage(Bestelldatum,3)
Ein weiteres wichtiges Anwendungsgebiet für Datenbankfunktionen ist die auto-
matische Erzeugung einer Nummerierung. In Adaptive Server Anywhere gibt es
zwar die Möglichkeit, dies über die Option DEFAULT AUTOINCREMENT zu lösen, leider
ist so eine Möglichkeit jedoch nicht im Standard enthalten. Die im Folgenden dar-
gestellte Möglichkeit zeichnet sich außerdem dadurch aus, dass in der automati-
schen Nummerierung der Nummerierungswert per Hand auf einen anderen Wert
gesetzt werden kann (z. B. wenn die laufenden Rechnungsnummern aus neun Zif-
fern bestehen, wovon die ersten beiden die Jahreszahl sind). Die Implementierung
enthält eine Relation mit genau einem Tupel, in dem die zuletzt vergebene Num-
mer gespeichert wird.
-- **********************************************************
-- ** Nummernserver als abstrakter Datentyp **
-- **********************************************************
-------------------------------------------------------------
-- TABLE num_table
-------------------------------------------------------------
-- Tabelle, die die letzte vergebene Nummer enthält
CREATE TABLE num_table (next_num INTEGER NOT NULL);
INSERT INTO num_table (next_num) VALUES(0);
-------------------------------------------------------------
-- PROCEDURE num_set
-------------------------------------------------------------
-- Setzen des Nummernservers auf einen vordefinierten Wert.
-- Beim nächsten Aufruf wird wert+1 zurückgegeben.
CREATE PROCEDURE num_set (IN wert INTEGER)
-- SQL/PSM: MODIFIES SQL-DATA
BEGIN
UPDATE num_table SET next_num = wert
END; -- num_set
 
Search WWH ::




Custom Search