Akcia má význam len v prípade použitia procedúr s IN OUT parametrami typu štruktúra v kontexte objektu typu Event. Nemá význam pri vykonávaní RPC procedúr.
Použitím akcie PRAGMA "ENABLE_INOUT_BY_REF" pri vykonávaní akcie CALL
sa nebudú hodnoty skutočného parametra, ktoré vstupujú do procedúr cez jej formálny parameter, kopírovať do formálneho parametra procedúry. To znamená, že formálne parametre procedúry budú referenciou na hodnoty skutočných parametrov.
Štandardné chovanie akcie CALL je také, že vytvára kópiu hodnoty skutočného parametra, ktorú následne použije ako hodnotu formálneho parametra. Dôsledok tejto implementácie je:
Volanie procedúry zbytočne kopíruje hodnoty parametrov (je pomalšie).
Hodnota formálneho parametra je "oddelená" od hodnoty skutočného parametra.
Akcia PRAGMA "ENABLE_INOUT_BY_REF" zabezpečí, že formálny parameter procedúry bude "odkaz" na skutočný parameter, a teda nedochádza ku kopírovaniu hodnoty. Priamy dôsledok je podstatné zvýšenie rýchlosti volania.
Príklad
PROCEDURE Proc1(RECORD (SD.Data) _data)
.
.
_data[1]^Col :=2
.
.
.
.
END Proc1
BEGIN
PRAGMA "ENABLE_INOUT_BY_REF"
RECORD (SD.Data) _rec
REDIM _rec [2]
_rec[1]^Col :=0
CALL Proc1(_rec)
END
Pri použití akcie PRAGMA "ENABLE_INOUT_BY_REF", formálny parameter procedúry
_data je skutočný parameter _rec.
Priradením _data[1]^Col := 2 sa hodnota 2 priradí do skutočného parametra
_rec[1]^Col.
Pri štandardnom chovaní sa akcie CALL (nepoužijeme akciu PRAGMA "ENABLE_INOUT_BY_REF"), formálny parameter procedúry
_data je úplnou kópiou skutočného parametra _rec.
Priradením _data[1]^Col := 2 sa hodnota 2 priradí do formalneho parametra
_data.
Až po vykonaní akcie CALL proc1(_rec) sa hodnota formálneho parametra _data skopíruje do skutočného parametra
_rec.
0 komentárov