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.