Akcia PRAGMA


Funkcia
Akcia povolí/zakáže prenos hodnôt IN OUT parametrov procedúry použitím referencie.
Deklarácia
 PRAGMA "ENABLE_INOUT_BY_REF"
 
  PRAGMA "DISABLE_INOUT_BY_REF"

Popis
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:
  1. Volanie procedúry zbytočne kopíruje hodnoty parametrov (je pomalšie).
  2. 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.

Súvisiace stránky:

0 komentárov

Nie ste prihlásený. Akékoľvek zmeny, ktoré vykonáte, sa označia ako anonymné. Ak už máte svoj účet, pravdepodobne sa budete chcieť prihlásiť .