Pokud je klientskß aplikace vytvo°ena v n∞kterΘm externφm programovacφm jazyce (C/C++, Pascal), pak SQL p°φkaz obsahujφcφ klientskΘ prom∞nnΘ musφ b²t na server poslßn pomocφ API funkce SQL_host_execute
, a pou₧itΘ prom∞nnΘ musφ b²t explicitn∞ zp°φstupn∞ny pomocφ jejφho parametru hostvars.
Parametrem hostvars je pole, jeho₧ jednotlivΘ slo₧ky typu t_clivar popisujφ jednotlivΘ klientskΘ prom∞nnΘ pou₧itΘ v p°φkazu SQL. PoΦet slo₧ek pole je uveden v parametru hostvars_count. t_clivar je struktura s tφmto obsahem:
struct t_clivar // popis promenne klienta pristupne pro SQL server
{ tname name; // jmeno promenne (velka pismena)
t_parmode mode; // zpusob predavani hodnoty promenne
int wbtype; // typ promenne
void * buf; // ukazatel na buffer s hodnotou promenne
int buflen; // delka bufferu buf
int actlen; // skutecna delka hodnoty - plati pouze pro typy promenne velikosti
};
Typy a hodnoty polo₧ek pou₧it²ch v tΘto struktu°e v definovßny v definiΦnφch souborech pro p°φsluÜnΘ programovacφ jazyky. Pro vstupnφ hodnoty prom∞nnΘ velikosti (BLOB, CLOB) je t°eba vyplnit nejen dΘlku bufferu pro hodnotu buflen, ale i skuteΦnou dΘlku hodnoty actlen. Pro v²stupnφ hodnoty prom∞nnΘ velikosti (BLOB, CLOB) staΦφ vyplnit dΘlku bufferu pro hodnotu buflen, zatφmco skuteΦnß dΘlka hodnoty actlen se ve struktu°e objevφ po provedenφ p°φkazu.
P°φklad:
Volßnφ funkce Maxim_plat s p°edßnφm vstupnφho parametru a nßvratem hodnoty:
t_clivar vardescr[2];
int os_cislo, max_plat;
strcpy(vardescr[0].name, "OS_CISLO");
vardescr[0].mode=MODE_IN;
vardescr[0].wbtype=ATT_INT32;
vardescr[0].buf=&os_cislo;
vardescr[0].buflen=sizeof(os_cislo);
strcpy(vardescr[1].name, "MAX_PLAT");
vardescr[1].mode=MODE_OUT;
vardescr[1].wbtype=ATT_INT32;
vardescr[1].buf=&max_plat;
vardescr[1].buflen=sizeof(max_plat);
os_cislo = 1294;
cd_SQL_host_execute(cdp, "SET :>MAX_PLAT = MAXIM_PLAT(:<OS_CISLO)", NULL, vardescr, 2);
// vysledek je v promenne max_plat.
Viz