Volßnφ externφch rutin a p°edßvßnφ parametr∙ (SQL)

Rutiny ulo₧enΘ na serveru mohou volat procedury a funkce vytvo°enΘ v externφm programovacφm prost°edφ. Zp∙sob volßnφ t∞chto rutin je popsßn v popisu procedury.

O externφch rutinßch se p°edpoklßdß, ₧e pou₧φvajφ volacφ konvenci _STDCALL. Musφ b²t umφst∞ny v 32-bitovΘ knihovn∞ DLL. Volßnφ 16-bitov²ch rutin nebo rutin s jinou volacφ konvencφ nenφ mo₧nΘ.

P°i vytvß°enφ knihovny funkcφ je nutno nastavit parametry p°ekladaΦe tak, aby, funkce pou₧φvaly standardnφ stack frame. Parametry se jim nesm∞jφ p°edßvat v registrech. ZejmΘna knihovny vytvß°enΘ v Delhpi obΦas dostßvajφ parametry v registrech a pak je nelze volat ze SQL serveru.

Formßlnφ parametry oznaΦenΘ OUT nebo INOUT se jim p°edßvajφ referencφ (tedy p°edßvß se adresa hodnoty parametru), formßlnφ parametry oznaΦenΘ IN nebo neoznaΦenΘ se p°edßvajφ hodnotou. OznaΦenφ a typ formßlnφho parametru v deklaraci rutiny musφ souhlasit s typem a zp∙sobem p°edßvßnφ parametru v modulu, v n∞m₧ je rutina implementovßna, podle pravidel dan²ch touto tabulkou:

typ v popisu rutiny v SQL typ v jazyce C/C++ typ v jazyce PASCAL
IN INT int Integer
OUT INT int * VAR Integer
IN SMALLINT short SmallInt
OUT SMALLINT short * VAR SmallInt
IN REAL double Double
OUT REAL Double * VAR Double
IN CHAR(N) struct { char[N+1]; } pole znak∙ p°edßvanΘ hodnotou
OUT CHAR(N) char * PChar
IN BIT(1) char Boolean
OUT BIT(1) char * VAR Boolean
IN BIT(N), N > 1 Struct { char[N]; } pole bajt∙ p°edßvanΘ hodnotou
OUT BIT(N) , N > 1 char * PChar
OUT CLOB char * PChar

Pro m≤d INOUT platφ stejnß pravidla jako pro m≤d OUT.

S typem REAL lze zachßzet stejn∞ jako s DOUBLE PRECISION. S typy TIME, DATE a TIMESTAMP lze zachßzet stejn∞ jako s typem INT, ale na stran∞ externφ rutiny je nutnΘ sprßvnΘ dek≤dovßnφ hodnoty.

Externφ rutin∞ lze p°edat jako parametr hodnotu prom∞nnΘ velikosti (BLOB, CLOB). Hodnotu lze m∞nit, nesmφ vÜak zv∞tÜit svoji velikost.