BEGIN
SELECT GeneratedOIDInfix, NewSchemaOID FROM SiteData WHERE Site = :ASite INTO mOIDInfix, mNewSchemaOID;
IF (mOIDInfix IS NULL) THEN
BEGIN
mOIDInfix = '1';
mNewSchemaOID = 'N';
END
IF (mNewSchemaOID = 'A') THEN
BEGIN
-- Nový způsob generování ID ukládá do tabulky Generators pod Site ##
ASite = '##';
END
SELECT LastOID FROM Generators WHERE CLSID = :ACLSID AND Site = :ASite AND OIDInfix = :mOIDInfix INTO mLastOID;
AOID = mLastOID;
IF (AOID IS NULL) THEN
BEGIN
-- Nový způsob generování ID nepoužívá Site
IF (mNewSchemaOID = 'A') THEN
BEGIN
AOID = '#' || RPAD(TRIM(LEADING FROM mOIDInfix), 9, '0');
END
ELSE
BEGIN
AOID = LPAD(mOIDInfix || ASite, 10, '0');
END
END
AOID = ib_incoid(AOID);
IF ((mNewSchemaOID = 'A') AND ((mLastOID = AOID) OR ((mLastOID IS NULL) AND (AOID = '#000000000')))) THEN
BEGIN
-- Pokud se nepodařilo vygenerovat nové ID je to problém nejspíše v neaktualizované UDF knihovně, kde je funkce ib_incoid
exception ErrOldUDF;
END
IF (mLastOID IS NULL) THEN
BEGIN
INSERT INTO Generators (CLSID, Site, LastOID, OIDInfix) VALUES (:ACLSID, :ASite, :AOID, :mOIDInfix);
END
ELSE
BEGIN
UPDATE Generators SET LastOID = :AOID
WHERE
CLSID = :ACLSID AND
Site = :ASite AND
LastOID = :mLastOID AND
OIDInfix = :mOIDInfix;
END
SUSPEND;
END;