Prom∞nnΘ z externφch jazyk∙ v p°φkazech SQL

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