mit folgender Funktion im Data Dictionary möchte ich eindeutige Id's je IdBez vergeben. In IdVerwaltung werden die Id's für verschiedene IdBez's gespeichert. Die Eindeutigkeit klappt aber nicht immer.
Wie könnte man sie besser schreiben?
Code: Alles auswählen
CREATE FUNCTION NaechsteId
(
cIdBez CHAR ( 20 )
)
RETURNS INTEGER
DESCRIPTION 'Es wird aus IdVerwaltung LetzteId zu cIdBez gelesen, der Wert um 1 erhöht und als Ergebnis zurückgegeben.
Um sicherzustellen, daß die Id in einer Tabelle noch nicht vergeben wurde, kann PruefLetzteId() verwendet werden.
Aus Geschwindigkeitsgründen wird PruefLetzteId() nicht von NaechsteId() aufgerufen!'
BEGIN
DECLARE nReturn Integer;
SET nReturn =
( SELECT LetzteId
FROM IdVerwaltung
WHERE IdBez=cIdBez )+1;
IF nReturn IS NULL THEN
INSERT INTO IdVerwaltung(IdBez,LetzteId) VALUES(cIdBez,0 );
SET nReturn = 1;
ENDIF;
UPDATE IdVerwaltung
SET LetzteId=nReturn
WHERE IdBez=cIdBez;
RETURN nReturn;
END;