|
![]() | Zrušenφ rutiny (DROP PROCEDURE | FUNCTION) | ![]() | Rutiny uloženΘ na serveru | UrΦenφ adresß°∙ s DLL knihovnami pro SQL server | ![]() |
Rutiny ulo₧enΘ na serveru mohou volat procedury a funkce vytvo°enΘ v externφm programovacφm prost°edφ. Zp∙sob deklarace t∞chto rutin je popsßn v popisu procedury.
P°φklad:
DECLARE FUNCTION TestFnc(INOUT cis CHAR(25)) RETURNS INT;
EXTERNAL NAME 'TestFnc@TestDLL';
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 (resp. so na Linuxu). 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 jazyce C/C++ | typ v jazyce PASCAL | typ v popisu rutiny v SQL |
int | Integer | IN INT |
int * | VAR Integer | OUT INT |
short | SmallInt | IN SMALLINT |
short * | VAR SmallInt | OUT SMALLINT |
double | Double | IN REAL |
Double * | VAR Double | OUT REAL |
char * | PChar | OUT CHAR(N) |
char | Boolean | IN BIT(1) |
char * | VAR Boolean | OUT BIT(1) |
struct { char[N]; } | pole bajt∙ p°edßvanΘ hodnotou | IN BIT(N), N > 1 |
struct { char[N+1]; } | pole znak∙ p°edßvanΘ hodnotou | IN CHAR(N) |
char * | PChar | OUT BIT(N) , N > 1 |
char * | PChar | INOUT CLOB |
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.
Pozor!
Nedodr₧enφ t∞chto konvencφ (zßm∞na IN a OUT/INOUT v deklaraci externφ rutiny) m∙₧e vΘst k p°epsßnφ pam∞ti a pßdu SQL serveru.
![]() | Zrušenφ rutiny (DROP PROCEDURE | FUNCTION) | ![]() | Rutiny uloženΘ na serveru | UrΦenφ adresß°∙ s DLL knihovnami pro SQL server | ![]() |