Procedura-GenerateOID

Parametry:

NázevPopisDatový typ
ACLSID
Guid
ASite
Site

Návratové hodnoty:

NázevPopisDatový typ
AOID
ID

Tělo:

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;

Generated by ABRA Software a.s. 27.10.2021 16:34:14