|
![]() | Prom∞nnΘ vnit°nφho jazyka v p°φkazech SQL | ![]() | Prom∞nnΘ klientsk²ch aplikacφ v p°φkazech SQL (Embedded 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 cd_SQL_host_execute
nebo cd_SQL_host_prepare, 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
uns32 specif; // doplnujici udaje o typu
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.
Slo₧ka specif obsahuje dopl≥ujφcφ ·daje o typu prom∞nnΘ. Je to obsah struktury t_specif zapsan² jako32-bitovΘ celΘ Φφslo. Pro znakovΘ a binßrnφ °et∞zce pevnΘ dΘlky je to maximßlnφ dΘlka °et∞zce, pro p°esnß Φφsla je to poΦet desetinn²ch mφst, v ostatnφch p°φpadech nula.
ZnaΦky < a > udßvajφcφ v SQL p°φkazu sm∞r p°enosu hodnoty nenφ nutno uvßd∞t, proto₧e stejnß informace je ji₧ obsa₧ena ve slo₧ce mode. Je-li tyto znaΦky uvedeny, ignorujφ se.
Dynamickß alokace bufferu
Pro v²stupnφ hodnoty prom∞nnΘ velikosti (BLOB, CLOB) nemusφ b²t p°ed provedenΘm p°φkazu z°ejmß dΘlka hodnoty. M∙₧e b²t proto obtφ₧nΘ p°edem alokovat buffer, kter² pojme celou vrßcenou hodnotu.
V takovΘm p°φpad∞ lze nastavit ukazatel na buffer buf na NULL, ·daj buflen se pak ignoruje. P°i provedenφ p°φkazu se automaticky alokuje buffer pot°ebnΘ velikosti a bude vrßcen v buf. Programßtor musφ potΘ buffer uvolnit pomocφ funkce corefree.
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].specif=0;
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].specif=0;
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.
![]() | Prom∞nnΘ vnit°nφho jazyka v p°φkazech SQL | ![]() | Prom∞nnΘ klientsk²ch aplikacφ v p°φkazech SQL (Embedded SQL) |