Tato kapitola popisuje jak pou╛φvat ulo╛enΘ procedury
v na╣φ databßzovΘ aplikaci. Ulo╛enΘ procedury jsou programy zapsanΘ v jazyku
procedur a spou╣t∞Φ∙, kter² je specifick² pro pou╛it² databßzov² systΘm.
Jsou dva zßkladnφ typy ulo╛en²ch procedur. Prvnφ typ zφskßvß data (podobn∞
jako dotaz SELECT). Zφskanß data mohou b²t ve tvaru datovΘ mno╛iny obsahujφcφ
jeden nebo vφce °ßdk∙ dat, rozd∞len²ch do jednoho nebo vφce sloupc∙. Nebo
zφskanß data mohou mφt formu individußlnφch prvk∙ informacφ. Druh² typ
nevracφ data, ale provßdφ akci na ulo╛en²ch datech v databßzi (nap°. jako
p°φkaz DELETE). N∞kterΘ databßzovΘ servery podporujφ oba typy operacφ ve
stejnΘ procedu°e.
Ulo╛enΘ procedury, kterΘ vracejφ data to d∞lajφ r∙zn²m
zp∙sobem, zßvisejφcφm na slo╛enφ ulo╛enΘ procedury a pou╛itΘm databßzovΘm
systΘmu. N∞kterΘ databßze jako InterBase vracejφ v╣echna data (datovΘ mno╛iny
a individußlnφ prvky informacφ) v²luΦn∞ v²stupnφmi parametry. Ostatnφ majφ
schopnost vrßtit kurzor do dat. A zb²vajφcφ, jako MS SQL Server nebo Sybase
mohou vracet datovΘ mno╛iny a individußlnφ prvky informacφ.
V aplikacφch C++ Builderu, p°φstup k ulo╛en²m procedurßm
je poskytnut komponentami TStoredProc a TQuery. Kterou z
nich m∙╛eme pou╛φt pro p°φstup, je urΦeno zp∙sobem k≤dovßnφ ulo╛enΘ procedury,
zp∙sobem nßvratu dat (jsou-li n∞jakß data vraceny) a pou╛it²m databßzov²m
systΘmem. Komponenty
TStoredProc a TQuery jsou potomky TDataSet
a d∞dφ tedy od n∞j zßkladnφ chovßnφ.
Komponenta ulo╛enΘ procedury je pou╛φvßna k provedenφ
ulo╛enΘ procedury, kterß nevracφ ╛ßdnß data, k zφskßnφ individußlnφch prvk∙
informacφ ve form∞ v²stupnφch parametr∙ nebo k p°enesenφ vrßcenΘ datovΘ
mno╛iny na p°i°azenou komponentu datovΘho zdroje (zßvisφ na databßzi).
Komponenta ulo╛enΘ procedury umo╛≥uje p°edßvat hodnoty do a vracet z ulo╛enΘ
procedury prost°ednictvφm parametr∙, kde ka╛d² parametr je definovßn ve
vlastnosti
Params. Komponenta ulo╛enΘ procedury takΘ poskytuje metodu
GetResults k donucenφ ulo╛enΘ proceduru k nßvratu datovΘ mno╛iny
(n∞kterΘ databßzovΘ servery toto vy╛adujφ p°ed vytvo°enφm v²sledkovΘ mno╛iny).
Komponenta ulo╛enΘ procedury je preferovßna pro ulo╛enΘ procedury, kterΘ
nevracejφ ╛ßdnß data nebo vracejφ data pouze pomocφ v²stupnφch parametr∙.
Komponenta dotazu je hlavn∞ pou╛φvßna pro spou╣t∞nφ ulo╛en²ch
procedur, kterΘ vracejφ datovΘ mno╛iny. To zahrnuje ulo╛enΘ procedury InterBase,
kterΘ vracejφ datovΘ mno╛iny pouze prost°ednictvφm v²stupnφch parametr∙.
Komponenta dotazu m∙╛e b²t takΘ pou╛ita k provßd∞nφ ulo╛en²ch procedur,
kterΘ nevracejφ v²sledkovΘ mno╛iny nebo hodnoty v²stupnφch parametr∙.
Parametry pou╛φvßme k p°edßvßnφ hodnot do a k nßvratu
hodnot z ulo╛en²ch procedur. Hodnoty vstupnφch parametr∙ jsou pou╛ity na
mφstech jako je klauzule WHERE p°φkazu SELECT v ulo╛enΘ procedu°e. V²stupnφ
parametry umo╛≥ujφ ulo╛enΘ procedu°e p°edßvat samostatnΘ hodnoty volajφcφ
aplikaci. N∞kterΘ ulo╛enΘ procedury vracejφ parametr result. Na
mo╛nosti ulo╛en²ch procedur se musφme podφvat na dokumentaci na╣eho databßzovΘho
serveru.
V tΘto kapitole budou popsßny nßsledujφcφ body:
Kdy je pot°eba
pou╛φt ulo╛enou proceduru?
Pokud nß╣ server umo╛≥uje definovat ulo╛enΘ procedury, pak
je vhodnΘ v na╣φ aplikaci je pou╛φvat. V²vojß° databßzovΘho serveru vytvß°φ
ulo╛enΘ procedury ke zpracovßnφ Φasto provßd∞n²ch ·loh v databßzi. Jsou
vhodnΘ k provßd∞nφ operacφ nad znaΦn∞ velk²m poΦtem °ßdk∙ v databßzov²ch
tabulkßch nebo kdy╛ pou╛φvajφ agregaΦnφ nebo matematickΘ funkce. Pokud
ulo╛enΘ procedury existujφ na vzdßlenΘm databßzovΘm serveru pou╛φvan²m
na╣φ aplikacφ, pak m∙╛eme pou╛φt jejich v²hody ve svΘ aplikaci. Vyu╛ijeme
funkΦnost jimi poskytnutou a zv²╣φme v²konnost na╣φ databßze:
-
P°ebφrßme v²hody obvykle rychlej╣φho zpracovßnφ na serveru.
-
Omezujeme mno╛stvφ p°enß╣en²ch dat v na╣φ poΦφtaΦovΘ sφti,
nebo╗ zpracovßnφ probφhß na serveru, kde sφdlφ data.
Nap°. p°edpoklßdejme aplikaci, kterß pot°ebuje vypoΦφtat
jedinou hodnotu a to standardnφ odchylku hodnot ze znaΦn∞ velkΘho mno╛stvφ
zßznam∙. K provedenφ tΘto funkce v na╣φ aplikaci, musφme v╣echny hodnoty
pou╛itΘ ve v²poΦtu zφskat ze serveru, co╛ m∙╛e znaΦn∞ zv²╣it zßt∞╛ sφt∞.
Potom na╣e aplikace musφ provΘst v²poΦet. V╣e prob∞hne v na╣i aplikaci
a v²sledkem je jedinß hodnota. Mnohem v²hodn∞j╣φ je provΘst v²poΦet ulo╛enou
proceduru (v²poΦty prob∞hnou na serveru, co╛ m∙╛e b²t v²konn∞j╣φ poΦφtaΦ
a potom sφtφ staΦφ p°enΘst jedinou hodnotu).
Pou╛φvßnφ ulo╛en²ch procedur
Jak ulo╛enß procedura je pou╛ita v aplikaci C++ Builderu
zßvisφ na k≤dovßnφ ulo╛enΘ procedury, zda a jak vracφ data, specifikßch
pou╛itΘho databßzovΘho serveru nebo kombinaci t∞chto faktor∙.
V obecn²ch termφnech, pro p°φstup k ulo╛enΘ procedu°e
na serveru, provedeme kroky:
-
Instantizujeme komponentu TStoredProc a voliteln∞
p°i°adφme k ulo╛enΘ procedu°e na serveru. Nebo instantizujeme komponentu
TQuery
a vytvo°φme obsah jejφ vlastnosti SQL k provedenφ dotazu SELECT
tvo°φcφho ulo╛enou proceduru nebo p°φkazu EXECUTE v zßvislosti na tom,
zda ulo╛enß procedura vracφ v²sledkovou mno╛inu.
-
V p°φpad∞ pot°eby poskytneme komponent∞ ulo╛enΘ procedury
hodnoty vstupnφch parametru. Kdy╛ komponenta ulo╛enΘ procedury nenφ p°i°azenß
k ulo╛enΘ procedu°e na serveru, pak musφme poskytnout dal╣φ informace vstupnφm
parametr∙m, jako je jmΘno parametru a datovΘ typy.
-
Provedenφ ulo╛enΘ procedury.
Nynφ ji╛ m∙╛eme zpracovat v²sledek a v²stupnφ parametry.
Jako u jin²ch komponent datov²ch mno╛in, m∙╛eme takΘ zkoumat v²sledkovou
datovou mno╛inu ze serveru. Detailnφ aspekty pou╛φvßnφ ulo╛en²ch procedur
zahrnujφ:
Vytvß°enφ komponenty
ulo╛enΘ procedury
K vytvo°enφ komponenty ulo╛enΘ procedury pro ulo╛enou proceduru
na databßzovΘm serveru:
-
Umφstφme komponentu ulo╛enΘ procedury ze strßnky Data
Access Palety komponent do datovΘho modulu.
-
Voliteln∞ nastavφme vlastnost DatabaseName komponenty
ulo╛enΘ procedury na jmΘno databßze, ve kterΘ je ulo╛enß procedura definovßna.
DatabaseName
musφ b²t p°ezdφvka BDE nebo stejnß hodnota jako ve vlastnosti DatabaseName
komponenty
TDatabase,
kterß se m∙╛e p°ipojit k serveru.
Normßln∞ specifikujeme vlastnost DatabaseName,
ale pokud server databßze je prßv∞ nedostupn², pak m∙╛eme vytvo°it a nastavit
komponentu ulo╛enΘ procedury s vynechßnφm DatabaseName a p°edßnφm
jmΘna ulo╛enΘ procedury a vstupnφch, v²stupnφch a v²sledkov²ch parametr∙
p°i nßvrhu.
-
Voliteln∞ nastavφme vlastnost StoredProcName na jmΘno
pou╛itΘ ulo╛enΘ procedury. Pokud poskytneme hodnotu pro vlastnost DatabaseName,
pak m∙╛eme vybrat jmΘno ulo╛enΘ procedury z rozbalovacφho seznamu vlastnosti.
Jedna komponenta TStoredProc m∙╛e b²t pou╛ita ke spu╣t∞nφ libovolnΘho
poΦtu ulo╛en²ch procedur nastavenφm vlastnosti StoredProcName na
p°φpustnΘ jmΘno v aplikaci. Nenφ tedy nutno nastavovat StoredProcName
p°i nßvrhu.
-
Dvojit²m kliknutφm ve sloupci hodnot vlastnosti Params
vyvolßme Editor parametr∙ ulo╛en²ch procedur ke zkoumßnφ vstupnφch a v²stupnφch
parametr∙ pro ulo╛enou proceduru. Pokud nespecifikujeme jmΘno pro ulo╛enou
proceduru ve t°etφm kroku, nebo specifikujeme jmΘno pro ulo╛enou proceduru,
kterß neexistuje na serveru urΦenΘm vlastnostφ DatabaseName (zadanou
v kroku 2), pak po vyvolßnφ editoru parametr∙, editor je prßzdn².
Ne v╣echny servery vracejφ parametry nebo informace o parametrech.
Podφvejte se do dokumentace va╣eho serveru k urΦenφ zda informace o sv²ch
ulo╛en²ch procedurßch jsou vraceny klientsk²m aplikacφm.
Poznßmka: Pokud nespecifikujeme v kroku 2 vlastnost
DatabaseName,
pak musφme pou╛φt Editor parametr∙ ulo╛en²ch procedur k nastavenφ parametr∙
p°i nßvrhu.
Vytvß°enφ ulo╛en²ch procedur
Normßln∞, ulo╛enΘ procedury jsou vytvß°eny, kdy╛ je vytvß°ena
aplikace a jejφ databßze, pomocφ nßstroj∙ dodan²ch v²robcem databßze. Je
ale takΘ mo╛nΘ vytvß°et ulo╛enΘ procedury za b∞hu. P°φkaz SQL pou╛it² k
vytvo°enφ ulo╛enΘ procedury se m∙╛e na r∙zn²ch databßzφch znaΦn∞ li╣it.
Je pot°eba se podφvat do dokumentace na╣eho databßzovΘho systΘmu.
Ulo╛enΘ procedury mohou b²t aplikacφ vytvß°eny za b∞hu
pomocφ p°φkazu SQL z komponenty TQuery (obvykle p°φkazu CREATE PROCEDURE).
Pokud ulo╛enß procedura pou╛φvß parametry, pak nastavφme vlastnost ParamCheck
komponenty TQuery na false. To chrßnφ TQuery v rozli╣enφ
parametr∙ v novΘ ulo╛enΘ procedu°e od parametr∙ z TQuery samotnΘho.
Poznßmka: M∙╛eme takΘ pou╛φt Pr∙zkumnφka SQL
k testovßnφ, editaci a vytvß°enφ ulo╛en²ch procedur na serveru.
P°φprava a provßd∞nφ
ulo╛en²ch procedur
K pou╛itφ ulo╛enΘ procedury, ji m∙╛eme voliteln∞ p°ipravit
a potom ji provΘst. Ulo╛enou proceduru m∙╛eme p°ipravit:
-
B∞hem nßvrhu stiskem OK v Editoru parametr∙.
-
Za b∞hu, volßnφm metody Prepare komponenty ulo╛enΘ
procedury.
Nap°. Nßsledujφcφ k≤d p°ipravuje ulo╛enou proceduru pro provßd∞nφ:
StoredProc1->Prepare();
Poznßmka: Pokud na╣e aplikace m∞nφ za b∞hu
informace o parametrech (nap°. p°i pou╛itφ p°etφ╛en²ch procedur Oracle),
pak musφme proceduru p°ipravit znova.
K spu╣t∞nφ p°ipravenΘ ulo╛enΘ procedury, volßme metodu
ExecProc
pro komponentu ulo╛enΘ procedury. Nßsledujφcφ k≤d ukazuje k≤d p°ipravujφcφ
a provßd∞jφcφ ulo╛enou proceduru.
StoredProc1->Params->Items[0]->AsString =
Edit1->Text;
StoredProc1->Prepare();
StoredProc1->ExecProc();
Poznßmka: Pokud se pokusφme provΘst ulo╛enou
proceduru p°ed jejφm p°ipravenφm, pak komponenta ulo╛enΘ procedury je p°ipravena
automaticky a potom po provedenφ je jejφ p°φprava zru╣ena. Pokud plßnujeme
n∞kolikanßsobnΘ provßd∞nφ ulo╛enΘ procedury, pak je mnohem efektivn∞j╣φ
explicitnφ volßnφ
Prepare a potom, kdy╛ ji╛ procedura nebude nadßle
pot°eba, volßnφ
UnPrepare.
Kdy╛ provedeme ulo╛enou proceduru, pak m∙╛e vracet v╣echny
nebo n∞kterΘ z t∞chto prvk∙:
-
Datovou mno╛inu obsahujφcφ jeden nebo vφce zßznam∙, kterΘ
mohou b²t zobrazeny v datov²ch ovladaΦφch p°i°azen²ch k ulo╛enΘ procedu°e
prost°ednictvφm komponenty datovΘho zdroje.
-
V²stupnφ parametry.
-
V²sledn² parametr, kter² obsahuje stavovΘ informace o provedenφ
ulo╛enΘ procedury.
K urΦenφ oΦekßvan²ch vracen²ch prvk∙ z ulo╛enΘ procedury
na na╣em serveru, se musφme podφvat do dokumentace serveru.
Ulo╛enΘ procedury,
kterΘ vracejφ v²sledkovou mno╛inu
Ulo╛enΘ procedury, kterΘ vracejφ data v datov²ch mno╛inßch,
°ßdcφch a sloupcφch dat, mohou b²t Φasto pou╛φvßny komponentou dotazu.
NicmΘn∞, s databßzov²m serverem, kter² podporuje nßvrat datovΘ mno╛iny
ulo╛enou procedurou, m∙╛e b²t komponenta datovΘ mno╛iny pou╛ita i k tomuto
·Φelu.
Nßvrat v²sledkovΘ mno╛iny pomocφ TQurey
K zφskßnφ datovΘ mno╛iny z ulo╛enΘ procedury pomocφ komponenty
TQuery:
-
Instantizujeme komponentu dotazu.
-
Do vlastnosti TQuery::SQL zapφ╣eme dotaz SELECT, kter²
pou╛ije jmΘno ulo╛enΘ procedury mφsto jmΘna tabulky.
-
Pokud ulo╛enß procedura vy╛aduje vstupnφ parametry, p°edßme
hodnoty parametr∙ jako Φßrkami odd∞lovan² seznam, uzav°en² v zßvorkßch,
nßsledovan² za jmΘnem procedury.
-
Nastavφme vlastnost Active na true nebo vyvolßme
metodu Open.
Nap°. ulo╛enß procedura InterBase GET_EMP_PROJ, akceptuje
hodnotu pomocφ vstupnφho parametru EMP_NO a vracφ datovou mno╛inu prost°ednictvφm
v²stupnφho parametru PROJ_ID.
CREATE PROCEDURE GET_EMP_PROJ (EMP_NO SMALLINT)
RETURNS (PROJ_ID CHAR(5))
AS
BEGIN
FOR SELECT PROJ_ID
FROM EMPLOYEE_PROJECT
WHERE EMP_NO = :EMP_NO
INTO :PROJ_ID
DO
SUSPEND;
END
P°φkaz SQL pou╛it² z komponenty dotazu k pou╛itφ tΘto
ulo╛enΘ procedury bude:
SELECT *
FROM GET_EMP_PROJ(52)
Nßvrat v²sledkovΘ mno╛iny pomocφ TStoredProc
K zφskßnφ datovΘ mno╛iny z ulo╛enΘ procedury pomocφ komponenty
TStoredProc:
-
Instantizujeme komponentu ulo╛enΘ procedury.
-
Ve vlastnosti StoredProcName specifikujeme jmΘno ulo╛enΘ
procedury.
-
Pokud ulo╛enß procedura vy╛aduje vstupnφ parametry, pak p°edßme
hodnoty pro parametry pomocφ vlastnosti Params nebo metodou ParamByName.
-
Nastavφme vlastnost Active na true nebo vyvolßme
metodu Open.
Nap°. ulo╛enß procedura Sybase GET_EMPLOYEES, akceptuje parametr
nazvan² @EMP_NO a vracφ v²sledkovou mno╛inu na zßklad∞ tΘto hodnoty.
CREATE PROCEDURE GET_EMPLOYEES @EMP_NO SMALLINT
AS SELECT EMP_NAME, EMPLOYEE_NO FROM EMPLOYEE_TABLE
WHERE (EMPLOYEE_NO = @EMP_NO)
K≤d C++ Builderu k napln∞nφ parametru hodnotou a aktivovßnφ
komponenty ulo╛enΘ procedury je:
StoredProc1->Close();
StoredProc1->ParamByName("EMP_NO")->AsSmallInt
= 52;
StoredProc1->Active = true;
Ulo╛enΘ procedury,
kterΘ vracejφ data pomocφ parametr∙
Ulo╛enΘ procedury mohou b²t urΦeny k zφskßvßnφ jednotliv²ch
prvk∙ informacφ pomocφ parametr∙, mφsto k zφskßvßnφ cel²ch °ßdk∙ dat. Nap°.
ulo╛enß procedura m∙╛e zφskßvat maximßlnφ hodnotu sloupce, k tΘto hodnot∞
p°iΦφst 1 a potom vrßtit tuto hodnotu aplikaci. To lze op∞t provßd∞t komponentami
TQuery
a TStoredProc. Preferovanou metodou pro zφskßvßnφ hodnot parametr∙
je pou╛itφ TStoredProc.
Zφskßvßnφ individußlnφch hodnot pomocφ TQuery
Hodnoty parametr∙ zφskan²ch prost°ednictvφm komponenty
TQuery
p°ebφrßme ve form∞ jednoho °ßdku datovΘ mno╛iny, a to i kdy╛ ulo╛enß procedura
vracφ jedin² parametr. K zφskßnφ jednotliv²ch hodnot z parametru ulo╛enΘ
procedury pomocφ komponenty TQuery:
-
Instantizujeme komponentu dotazu.
-
Do vlastnosti TQuery::SQL zapφ╣eme dotaz SELECT, kter²
pou╛φvß jmΘno ulo╛enΘ procedury namφsto jmΘna tabulky. Klauzule SELECT
tohoto dotazu m∙╛e specifikovat jmΘna parametr∙ jako jmΘna sloupc∙ v tabulce
nebo m∙╛e jednodu╣e pou╛φt * k zφskßnφ v╣ech hodnot parametr∙.
-
Pokud ulo╛enß procedura vy╛aduje vstupnφ parametry, pak p°edßme
seznam hodnot parametr∙ odd∞len² Φßrkami a uzav°en² v zßvorkßch za jmΘno
procedury.
-
Nastavφme vlastnost Active na true nebo vyvolßme
metodu Open.
Nap°. ulo╛enß procedura GET_HIGH_EMP_NAME z InterBase, zφskßvß
abecedn∞ poslednφ hodnotu ve sloupci LAST_NAME z tabulky nazvanΘ EMPLOYEE.
Ulo╛enß procedura vracφ tuto hodnotu ve v²stupnφm parametru High_Last_Name.
CREATE PROCEDURE GET_HIGH_EMP_NAME
RETURNS (High_Last_Name CHAR(15))
AS
BEGIN
SELECT MAX(LAST_NAME)
FROM EMPLOYEE
INTO :High_Last_Name;
SUSPEND;
END
P°φkaz SQL pou╛it² z TQuery k pou╛itφ tΘto ulo╛enΘ
procedury m∙╛e b²t:
SELECT High_Last_Name
FROM GET_HIGH_EMP_NAME
Zφskßvßnφ jednotliv²ch hodnot pomocφ TStoredProc
K zφskßnφ individußlnφch hodnot v²stupnφch parametr∙
z ulo╛enΘ procedury pomocφ komponenty TStoredProc:
-
Instantizujeme komponentu ulo╛enΘ procedury.
-
Ve vlastnosti StoredProcName specifikujeme jmΘno ulo╛enΘ
procedury.
-
Pokud ulo╛enß procedura vy╛aduje vstupnφ parametry, pak p°edßme
hodnoty pro parametry pomocφ vlastnosti Params nebo metodou ParamByName.
-
Vyvolßme metodu ExecProc.
-
Pou╛ijeme hodnoty jednotliv²ch v²stupnφch parametr∙ pomocφ
vlastnosti Params nebo metodou ParamByName.
Nap°. ulo╛enß procedura GET_HIGH_EMP_NAME z InterBase, zφskßvß
abecedn∞ poslednφ hodnotu ve sloupci LAST_NAME z tabulky nazvanΘ EMPLOYEE.
Ulo╛enß procedura vracφ tuto hodnotu ve v²stupnφm parametru High_Last_Name.
CREATE PROCEDURE GET_HIGH_EMP_NAME
RETURNS (High_Last_Name CHAR(15))
AS
BEGIN
SELECT MAX(LAST_NAME)
FROM EMPLOYEE
INTO :High_Last_Name;
SUSPEND;
END
K≤d C++ Builderu k zφskßnφ hodnoty v²stupnφho parametru
High_Last_Name
a ulo╛it ji do vlastnosti Text editaΦnφ komponenty:
StoredProc1->StoredProName = "GET_HIGH_EMP_NAME";
StoredProc1->ExecProc();
Edit1->Text = StoredProc1->ParamByName("High_Last_Name")->AsString;
Ulo╛enΘ procedury
provßd∞jφcφ akce na datech
Ulo╛enΘ procedury mohou b²t k≤dovßny tak, ╛e nevracejφ ╛ßdnß
data a pouze provßd∞jφ n∞jakou akci v databßzi. Operace SQL vyvolßvajφcφ
p°φkazy INSERT a DELETE jsou dobr²m p°φkladem tohoto typu ulo╛en²ch procedur.
Nap°. mφsto umo╛n∞nφ u╛ivateli p°φmo zru╣it °ßdek, m∙╛eme k tomu pou╛φt
ulo╛enou proceduru. To umo╛≥uje ulo╛enΘ procedu°e urΦovat co zru╣it a takΘ
zpracovßvat aspekty referenΦnφ integrity, jako je kaskßdovitΘ ru╣enφ °ßdk∙
v zßvisl²ch tabulkßch.
Provßd∞nφ akΦnφch ulo╛en²ch procedur pomocφ TQuery
K provedenφ akΦnφch ulo╛en²ch procedur pomocφ komponenty
TQuery:
-
Instantizujeme komponentu dotazu.
-
Do vlastnosti TQuery::SQL vlo╛φme p°φkaz nutn² k provedenφ
ulo╛enΘ procedury a jmΘno ulo╛enΘ procedury. P°φkaz k provedenφ ulo╛enΘ
procedury se m∙╛e v r∙zn²ch databßzov²ch systΘmech znaΦn∞ li╣it. V InterBase
je to nap°. p°φkaz EXECUTE PROCEDURE.
-
Pokud ulo╛enß procedura vy╛aduje vstupnφ parametry, p°edßme
hodnoty parametr∙ jako Φßrkami odd∞len² seznam a zapφ╣eme jej do zßvorek
za jmΘno procedury.
-
Vyvolßme metodu TQuery::ExecSQL.
Nap°. ulo╛enß procedura ADD_EMP_PROJ z InterBase p°idßvß
nov² °ßdek do tabulky EMPLOYEE_PROJECT. Nenφ vrßcenß ╛ßdnß datovß mno╛ina
nebo jednotlivΘ hodnoty ve v²stupnφch parametrech:
CREATE PROCEDURE ADD_EMP_PROJ (EMP_NO SMALLINT,
PROJ_ID CHAR(5)) AS
BEGIN
BEGIN
INSERT INTO EMPLOYEE_PROJECT
(EMP_NO, PROJ_ID)
VALUES (:EMP_NO, :PROJ_ID);
WHEN SQLCODE -530 DO
EXCEPTION
UNKNOWN_EMP_ID;
END
SUSPEND;
END
P°φkaz SQL vyvolan² z TQuery k provedenφ tΘto
procedury m∙╛e b²t:
EXECUTE PROCEDURE ADD_EMP_PROJ(20, "GUIDE")
Provedenφ akΦnφ ulo╛enΘ procedury pomocφ TStoredProc
K provedenφ akcφ ulo╛enΘ procedury pomocφ TStoredProc:
-
Instantizujeme komponentu ulo╛enΘ procedury.
-
Ve vlastnosti StoredProcName specifikujeme jmΘno ulo╛enΘ
procedury.
-
Pokud ulo╛enß procedura vy╛aduje vstupnφ parametry, p°edßme
hodnoty parametr∙ pomocφ vlastnosti Params nebo metodou ParamByName.
-
Vyvolßme metodu ExecProc.
Nap°. ulo╛enß procedura ADD_EMP_PROJ z InterBase p°idßvß
nov² °ßdek do tabulky EMPLOYEE_PROJECT. Nenφ vrßcenß ╛ßdnß datovß mno╛ina
nebo jednotlivΘ hodnoty ve v²stupnφch parametrech:
CREATE PROCEDURE ADD_EMP_PROJ (EMP_NO SMALLINT,
PROJ_ID CHAR(5)) AS
BEGIN
BEGIN
INSERT INTO EMPLOYEE_PROJECT
(EMP_NO, PROJ_ID)
VALUES (:EMP_NO, :PROJ_ID);
WHEN SQLCODE -530 DO
EXCEPTION
UNKNOWN_EMP_ID;
END
SUSPEND;
END
K≤d C++ Builderu k provedenφ ulo╛enΘ procedury ADD_EMP_PROJ
je:
StoredProc1->StoredProcName = "ADD_EMP_PROJ";
StoredProc1->ExecProc;
Seznßmenφ s parametry
ulo╛en²ch procedur
Jsou Φty°i typy parametr∙, kterΘ mohou b²t p°i°azeny k ulo╛en²m
procedurßm:
-
Vstupnφ parametry, pou╛φvanΘ k p°edßvßnφ hodnot ulo╛en²m
procedurßm pro zpracovßnφ.
-
V²stupnφ parametry pou╛φvanΘ ulo╛enou procedurou k
p°edßvßnφ hodnot aplikaci.
-
Vstupnφ/v²stupnφ parametry, pou╛φvanΘ k p°edßvßnφ
hodnot ulo╛en²m procedurßm ke zpracovßnφ a pou╛φvanΘ ulo╛enou procedurou
k nßvratu hodnot aplikaci.
-
Parametr result (v²sledkov² parametr), pou╛φvajφ n∞kterΘ
procedury k nßvratu chybovΘ nebo stavovΘ hodnoty aplikaci. Ulo╛enß procedura
m∙╛e vracet pouze jeden parametr result.
Zda ulo╛enß procedura pou╛φvß jist² typ parametr∙ zßvisφ
na jazyku implementujφcφm ulo╛enou proceduru na na╣em databßzovΘm serveru
a na specifickΘ instanci ulo╛enΘ procedury. Nap°. jistß ulo╛enß procedura
na n∞jakΘm serveru m∙╛e b²t implementovßna pomocφ vstupnφch parametr∙ nebo
nemusφ. Na druhΘ stran∞, n∞kterΘ pou╛itφ parametr∙ zßvisφ na serveru. Nap°.
ulo╛enΘ procedury MS-SQL Server a Sybase v╛dy vracejφ parametr result,
ale implementace InterBase jej nevracφ nikdy.
P°φstup k parametr∙m ulo╛en²ch procedur je poskytnut
objekty TParam ve vlastnosti TStoredProc::Params. Pokud jmΘno
ulo╛enΘ procedury je specifikovßno p°i nßvrhu ve vlastnosti StoredProcName,
pak je automaticky vytvo°en pro ka╛d² parametr objekt TParam a p°idßn
k vlastnosti Params. Pokud jmΘno ulo╛enΘ procedury nenφ specifikovßno
do spu╣t∞nφ, pak objekty TParams musφ b²t vytvo°eny programov∞ po
spu╣t∞nφ. Nespecifikovßnφ ulo╛enΘ procedury a manußlnφ vytvß°enφ objekt∙
TParam
umo╛≥uje jedna komponenta TStoredProc, kterß m∙╛e b²t pou╛ita s
libovoln²m poΦtem dostupn²ch ulo╛en²ch procedur.
Poznßmka: N∞kterΘ ulo╛enΘ procedury vracejφ
mimo v²stupnφch a v²sledkov²ch parametr∙ i datovou mno╛inu. Aplikace mohou
zobrazovat zßznamy datovΘ mno╛iny v datov²ch ovladaΦφch, ale musφ odd∞len∞
zpracovat v²stupnφ a v²sledkovΘ parametry.
V tΘto Φßsti se budeme zab²vat je╣t∞:
Pou╛φvßnφ vstupnφch parametr∙
Aplikace pou╛φvß vstupnφ parametry k p°edßvßnφ jednotliv²ch
datov²ch hodnot ulo╛enΘ procedu°e. Tyto hodnoty jsou pak pou╛ity p°φkazy
SQL v ulo╛enΘ procedu°e, jako je porovnßvanß hodnota pro klauzuli WHERE.
Pokud ulo╛enß procedura po╛aduje vstupnφ parametr, pak p°i°adφme hodnotu
parametru p°ed provedenφm ulo╛enΘ procedury.
Pokud ulo╛enß procedura vracφ datovou mno╛inu a je pou╛ita
prost°ednictvφm dotazu SELECT v komponent∞ TQuery, p°edßme hodnoty
vstupnφch parametr∙ jako Φßrkami odd∞len² seznam uzav°en² v zßvorkßch,
za jmΘnem ulo╛enΘ procedury. Nap°. nßsledujφcφ p°φkaz SQL zφskßvß data
z ulo╛enΘ procedury nazvanΘ GET_EMP_PROJ a p°edßvß ji hodnotu vstupnφho
parametru 52.
SELECT PROJ_ID
FROM GET_EMP_PROJ(52)
Pokud ulo╛enß procedura je provßd∞na s komponentou TStoredProc,
pak pou╛ijeme vlastnost Params nebo metodu ParamByName k
nastavenφ ka╛dΘho vstupnφho parametru. Pou╛ijeme vlastnost TParam
p°φslu╣ejφcφ pro datov² typ parametru, jako je vlastnost TParam::AsString
pro parametr typu CHAR. Nastavφme hodnoty vstupnφch parametr∙ p°ed provedenφm
nebo aktivovßnφm komponenty TStoredProc. V nßsledujφcφm p°φkladu,
parametr EMP_NO (typu SMALLINT) pro ulo╛enou proceduru GET_EMP_PROJ mß
p°i°azenou hodnotu 52.
StoredProc1->ParamByName("EMP_NO")->AsSmallInt
= 52;
StoredProc1->ExecProc();
Pou╛φvßnφ
v²stupnφch parametr∙
Ulo╛enΘ procedury pou╛φvajφ v²stupnφ parametry k p°edßvßnφ
jednotliv²ch hodnot dat zp∞t aplikaci, kterß ulo╛enou proceduru volß. V²stupnφ
parametry zφskajφ svΘ hodnoty po provedenφ ulo╛enΘ procedury. V²stupnφ
parametry prohlφ╛φme z aplikace k zφskßnφ jejich hodnot, po vyvolßnφ metody
TStoredProc::ExecProc.
K odkazovßnφ na objekt TParam, kter² reprezentuje
parametr a k prohlΘdnutφ jeho hodnoty pou╛φvßme vlastnost TStoredProc::Params
nebo metodu TStoredProc::ParamByName. Nap°. k zφskßnφ hodnoty parametru
a ulo╛enφ jeho hodnoty do vlastnosti Text editaΦnφ komponenty pou╛ijeme:
StoredProc1->ExecProc();
Edit1->Text = StoredProc1->Param[0]->AsString;
V∞t╣ina ulo╛en²ch procedur vracφ jeden nebo vφce v²stupnφch
parametr∙. V²stupnφ parametry mohou reprezentovat izolovanΘ vracenΘ hodnoty
ulo╛enou procedurou, kterß nevracφ datovou mno╛inu, mohou reprezentovat
jednu mno╛inu hodnot vrßcenou procedurou, kterß takΘ vracφ datovou mno╛inu
nebo mohou reprezentovat hodnoty, kterΘ nemajφ p°φm² vztah k jednotliv²m
zßznam∙m datovΘ mno╛iny vracenΘ ulo╛enou procedurou. Ka╛dß serverovß implementace
ulo╛emnΘ procedury se v tomto m∙╛e li╣it.
Poznßmka: Zdrojov² k≤d pro ulo╛enΘ procedury
Informixu mohou indikovat, ╛e vracejφ v²stupnφ parametry i kdy╛ v Editoru
parametr∙ ulo╛enΘ procedury je nemusφme vid∞t. Informix p°eklßdß
v²stupnφ parametry do jednoho zßznamu datovΘ mno╛iny, kter² m∙╛eme zobrazit
v datov²ch ovladaΦφch aplikace.
Pou╛φvßnφ vstupn∞/v²stupnφch
parametr∙
Vstupn∞/v²stupnφ parametry slou╛φ jako vstupnφ i v²stupnφ
parametry. Aplikace pou╛ije vstupn∞/v²stupnφ parametry k p°edßnφ jednotliv²ch
datov²ch hodnot ulo╛enΘ procedu°e, kterß je op∞tovn∞ pou╛ije k p°edßnφ
datov²ch hodnot volajφcφ aplikaci. Jako se vstupnφmi parametry, vstupnφ
hodnota pro vstupn∞/v²stupnφ parametr musφ b²t dostupnß p°ed vyvolßnφm
ulo╛enΘ procedury.
V p°φkladu ulo╛enΘ procedury Oracle, je parametr IN_OUTVAR
vstupn∞/v²stupnφm parametrem:
CREATE OR REPLACE PROCEDURE UPDATE_THE_TABLE
(IN_OUTVAR IN OUT INTEGER)
AS
BEGIN
UPDATE ALLTYPETABLE
SET NUMBER82FLD = IN_OUTVAR
WHERE KEYFIELD = 0;
IN_OUTVAR:=1;
END UPDATE_THE_TABLE;
V k≤du programu v C++ Builderu uvedenΘm dßle, IN_OUTVAR
je p°i°azena vstupnφ hodnota, provedena ulo╛enß procedura a pak v²stupnφ
hodnota v IN_OUTVAR je ulo╛ena do prom∞nnΘ v pam∞ti.
StoredProc1->ParamByName("IN_OUTVAR")->AsInteger
= 103;
StoredProc1->ExecProc();
IntegerVar = StoredProc1->ParamByName("IN_OUTVAR")->AsInteger;
Pou╛φvßnφ v²sledkovΘho parametru
Mimo vracenφ v²stupnφch parametr∙ a datovΘ mno╛iny, n∞kterΘ
ulo╛enΘ procedury takΘ vracejφ jeden v²sledkov² parametr. V²sledkov² parametr
je obvykle pou╛φvßn k indikaci chybovΘho stavu nebo poΦtu zßznam∙ zpracovan²ch
ulo╛enou procedurou. Musφme se podφvat do dokumentace na╣eho serveru, abychom
zjistili zda nß╣ server podporuje v²sledkov² parametr. V²sledkovΘmu parametru
je p°i°azena hodnota provedenφm ulo╛enΘ procedury. V²sledkov² parametr
zkoumßme v aplikaci k zφskßnφ jeho hodnoty po vyvolßnφ metody TStoredProc::ExecProc.
K odkazu na objekt TParam, kter² reprezentuje
v²sledkov² parametr a zkoumßnφ jeho hodnoty pou╛ijeme vlastnost TStoredProc::Params
nebo metodu TStoredProc::ParamByName.
DateVar = StoredProc1->ParamByName("MyOutputParam")->AsDate;
Zp°φstup≥ovßnφ parametr∙
b∞hem nßvrhu
Pokud se p°ipojφme ke vzdßlenΘmu databßzovΘmu serveru nastavenφm
vlastnostφ
DatabaseName a StoredProcName p°i nßvrhu, pak
m∙╛eme pou╛φvat Editor parametr∙ ulo╛enΘ procedury k zobrazenφ jmen a datov²ch
typ∙ ka╛dΘho vstupnφho parametru a m∙╛eme nastavit hodnoty pro vstupnφ
parametry k p°edßnφ na server kdy╛ ulo╛enou proceduru provedeme.
D∙le╛itΘ: Nem∞nφme jmΘna nebo datovΘ typy vstupnφch
parametr∙ oznßmen²ch serverem nebo p°i provedenφ ulo╛enΘ procedury bude
generovßna v²jimka.
N∞kterΘ servery (nap°. Informix) neoznamujφ jmΘna parametr∙
nebo datovΘ typy. V t∞chto p°φpadech pou╛ijeme Pr∙zkumnφk SQL nebo v²robcem
serveru dodanΘ utility k prohlΘdnutφ zdrojovΘho k≤du ulo╛enΘ procedury
na serveru k urΦenφ vstupnφch parametr∙ a jejich datov²ch typ∙.
Pokud p°i nßvrhu nezφskßme seznam parametr∙ ulo╛enΘ procedury
na vzdßlenΘm serveru (nap°. kdy╛ nejsme p°ipojeni k serveru), pak musφme
vyvolat Editor parametr∙ ulo╛enΘ procedury, uvΘst zde ka╛d² po╛adovan²
vstupnφ parametr a p°i°adit mu datov² typ a hodnotu.
Nastavovßnφ informacφ o parametrech p°i nßvrhu.
M∙╛eme vyvolat Editor parametr∙ ulo╛enΘ procedury p°i
nßvrhu k nastavenφ parametr∙ a jejich hodnot. Editor parametr∙ umo╛≥uje
nastavovat parametry ulo╛enΘ procedury. Pokud u komponenty TStoredProc
nastavφme vlastnosti
DatabaseName a StoredProcName p°i nßvrhu,
pak existujφcφ parametry jsou uvedeny v Editoru. Pokud tyto vlastnosti
nenastavφme, pak v seznamu Editoru nenφ uveden ╛ßdn² parametr a musφme
je p°idat manußln∞. Dßle n∞kterΘ typy databßzφ nevracejφ v╣echny informace
o parametrech, nap°. typy. Pro tyto databßzovΘ systΘmy, pou╛ijeme Pr∙zkumnφk
SQL k prohlΘdnutφ procedur, urΦenφ typ∙ a potom provedeme konfiguraci parametr∙
prost°ednictvφm Editoru a Inspektoru objekt∙. Kroky k nastavenφ parametr∙
ulo╛en²ch procedur p°i nßvrhu jsou tyto:
-
Nepovinn∞ nastavφme vlastnosti DatabaseName a StoredProcName.
-
V Inspektoru objekt∙, vyvolßme Editor parametr∙ stisknutφm
tlaΦφtka se t°emi teΦkami ve vlastnosti Params.
-
Pokud vlastnosti DatabaseName a StoredProcName
nejsou nastaveny, v seznamu editoru nejsou uvedeny ╛ßdnΘ parametry. Manußln∞
p°idßme definice parametr∙ volbou Add v mφstnφ nabφdce Editoru.
-
Vybφrßme jednotlivΘ parametry v Editoru k zobrazenφ jejich
vlastnostφ v Inspektoru objekt∙.
-
Jestli╛e ve vlastnosti ParamType nenφ automaticky
specifikovßn typ, pak typ parametru (Input, Output, Input/Output
nebo
Result)
vybereme z rozbalovacφho seznamu vlastnosti.
-
Pokud datov² typ nenφ automaticky specifikovßn ve vlastnosti
DataType,
pak vybereme datov² typ z rozbalovacφho seznamu vlastnosti. (Pro nßvrat
v²sledkovΘ mno╛iny z ulo╛enΘ procedury Oracle nastavφme typ polo╛ky na
Cursor.)
-
Vlastnost Value pou╛ijeme k p°φpadnΘmu nastavenφ poΦßteΦnφ
hodnoty pro vstupnφ nebo vstupn∞/v²stupnφ parametry.
Stisknutφm pravΘho tlaΦφtka my╣i nad Editorem vyvolßme mφstnφ
nabφdku pro operovßnφ s definicemi parametr∙. V zßvislosti na tom, zda
parametry jsou uvedeny nebo vybrßny, povolenΘ volby zahrnujφ: p°idßvßnφ
nov²ch parametr∙, ru╣enφ existujφcφch parametr∙, p°esun parametr∙ nahoru
a dol∙ v seznamu a v²b∞r v╣ech uveden²ch parametr∙.
M∙╛eme definovat libovoln² p°idan² TParam, ale
atributy objektu
TParam musφ odpovφdat atribut∙m parametru ulo╛enΘ
procedury na serveru. K editaci
TParam pro parametr, vybereme parametr
v Editoru a editujeme jeho vlastnosti v Inspektoru objekt∙.
Poznßmka: Sybase, MS-SQL a Informix nevracejφ
informace o typu parametr∙. K zji╣t∞nφ t∞chto informacφ pou╛ijeme Pr∙zkumnφk
SQL.
Poznßmka: Informix nevracφ informace o datov²ch
typech. K zji╣t∞nφ t∞chto informacφ pou╛ijeme Pr∙zkumnφk SQL.
Poznßmka: Nikdy nem∙╛eme nastavovat hodnoty
pro v²stupnφ a v²sledkovΘ parametry. Tyto typy parametr∙ zφskajφ svΘ hodnoty
provedenφm ulo╛enΘ procedury.
Zji╣╗ovßnφ informacφ o parametrech p°i nßvrhu
Pokud p°i nßvrhu mßme p°φstup k databßzovΘmu serveru,
pak jsou dv∞ mo╛nosti k zobrazenφ informacφ o parametrech pou╛it²ch ulo╛enou
procedurou:
-
Vyvolßme Pr∙zkumnφk SQL k prohlΘdnutφ zdrojovΘho k≤du procedury
na vzdßlenΘm serveru. Zdrojov² k≤d obsahuje deklarace parametr∙, kterΘ
identifikujφ jmΘna a datovΘ typy pro ka╛d² parametr.
-
Pou╛ijeme Inspektor objekt∙ k zobrazenφ nastavenφ vlastnostφ
pro jednotlivΘ objekty TParam.
Pr∙zkumnφk SQL m∙╛eme pou╛φt ke zkoumßnφ ulo╛en²ch procedur
na na╣em databßzovΘm serveru, pokud pou╛φvßme p°irozenΘ ovladaΦe BDE. P°i
pou╛itφ ovladaΦ∙ ODBC nelze zkoumat ulo╛enou proceduru pomocφ Pr∙zkumnφka
SQL. To se t²kß i Inspektora objekt∙. Mno╛stvφ informacφ vrßcen²ch o ulo╛enΘ
procedu°e v Inspektoru objekt∙ zßvisφ na na╣em databßzovΘm serveru.
K zobrazenφ definicφ jednotliv²ch parametr∙ v Inspektoru
objekt∙:
-
Vybereme komponentu ulo╛enΘ procedury.
-
Nastavφme vlastnost DatabaseName komponenty ulo╛enΘ
procedury na p°ezdφvku BDE pro nß╣ databßzov² server (nebo vlastnost DatabaseName
komponenty databßze).
-
Nastavφme vlastnost StoredProcName na jmΘno ulo╛enΘ
procedury.
-
Stiskneme tlaΦφtko se t°emi teΦkami pro vlastnost Params
v Inspektoru objekt∙.
-
Vybφrßme jednotlivΘ parametry v Editoru k zobrazovßnφ a nastavenφ
jejich vlastnostφ v Inspektoru objekt∙.
Pro n∞kterΘ servery n∞kterΘ nebo v╣echny informace nemusφ
b²t dostupnΘ.
V Inspektoru objekt∙, kdy╛ zobrazujeme jednotlivΘ objekty
TParam,
pak ParamType indikuje zda vybran² parametr je vstupnφ, v²stupnφ
atd.. Vlastnost DataType indikuje datov² typ hodnoty parametru,
jako je °et∞zec, celΘ Φφslo apod. Vlastnost Value umo╛≥uje zadßvat
hodnotu pro vybran² vstupnφ parametr.
Poznßmka: Sybase, MS-SQL a Informix nevracejφ
informace o typu parametr∙. K zji╣t∞nφ t∞chto informacφ pou╛ijeme Pr∙zkumnφk
SQL.
Poznßmka: Informix nevracφ informace o datov²ch
typech. K zji╣t∞nφ t∞chto informacφ pou╛ijeme Pr∙zkumnφk SQL.
Poznßmka: Nikdy nem∙╛eme nastavovat hodnoty
pro v²stupnφ a v²sledkovΘ parametry. Tyto typy parametr∙ zφskajφ svΘ hodnoty
provedenφm ulo╛enΘ procedury.
Vytvß°enφ parametr∙ za b∞hu
Pokud jmΘno ulo╛enΘ procedury nenφ specifikovßno v StoredProcName
p°ed spu╣t∞nφm, pak pro parametry nejsou automaticky vytvß°eny objekty
TParam
a musφme je vytvß°et programov∞. To m∙╛eme provΘst instantizacφ novΘho
objektu TParam nebo metodou TParams::AddParam.
Nap°. ulo╛enß procedura InterBase GET_EMP_PROJ, uvedenß
dßle po╛aduje jeden vstupnφ parametr (EMP_NO) a jeden v²stupnφ parametr
(PROJ_ID).
CREATE PROCEDURE GET_EMP_PROJ (EMP_NO SMALLINT)
RETURNS (PROJ_ID CHAR(5))
AS
BEGIN
FOR SELECT PROJ_ID
FROM EMPLOYEE_PROJECT
WHERE EMP_NO = :EMP_NO
INTO :PROJ_ID
DO
SUSPEND;
END
K≤d C++ Builderu k p°i°azenφ tΘto ulo╛enΘ procedury k
TStoredProc
nazvanΘ StoredProc1 a vytvo°enφ objekt∙ TParam pro dva parametry
je:
{
TParam *P1, *P2;
...
StoredProc1->StoredProcName = "GET_EMP_PROJ";
StoredProc1->Params->Clear();
P1 = new TParam(StoredProc1->Params,
ptInput);
P2 = new TParam(StoredProc1->Params,
ptOutput);
try
{
StoredProc1->Params[0]->Name
= "EMP_NO";
StoredProc1->Params[1]->Name
= "PROJ_ID";
StoredProc1->ParamByName("EMP_NO")->AsSmallInt
= 52;
StoredProc1->ExecProc();
Edit1->Text = StoredProc1->ParamByName("PROJ_ID")->AsString;
}
__finally
{
delete P1;
delete P2;
}
}
Spojovßnφ parametr∙
Kdy╛ p°ipravujeme a provßdφme ulo╛enou proceduru, pak jejφ
vstupnφ parametry jsou automaticky spojeny s parametry na serveru. Vlastnost
ParamBindMode
pou╛ijeme ke specifikaci zp∙sobu spojenφ parametr∙ v na╣φ ulo╛enΘ procedu°e
k parametr∙m na serveru. Implicitn∞ ParamBindMode je nastaven na
pbByName,
co╛ znamenß, ╛e parametry z komponenty ulo╛enΘ procedury jsou p°ipojeny
k parametr∙m na serveru na zßklad∞ jmΘna. To je nejsnadn∞j╣φ metoda spojovßnφ
parametr∙.
N∞kterΘ servery takΘ podporujφ spojovßnφ parametr∙ pomocφ
jejich po°adφ. V tomto p°φpad∞, po°adφ ve kterΘm specifikujeme parametry
v Editoru parametr∙ je d∙le╛itΘ. Prvnφ nßmi specifikovan² parametr musφ
odpovφdat prvnφmu parametru na serveru, druh² parametr druhΘmu parametru
na serveru, atd. Pokud nß╣ server podporuje spojovßnφ parametr∙ na zßklad∞
po°adφ, pak musφme nastavit ParamBindMode na pbByNumber.
Tip: Pokud chceme nastavit ParamBindMode
na pbByNumber, pak musφme specifikovat odpovφdajφcφ typy parametr∙
v odpovφdajφcφm po°adφ. Zdrojov² k≤d ulo╛enΘ procedury si m∙╛eme prohlΘdnout
Pr∙zkumnφkem SQL k urΦenφ sprßvnΘho po°adφ a typ∙ parametr∙.
Prßce s ulo╛en²mi procedurami
Oracle
Servery Oracle umo╛≥ujφ p°ekr²vßnφ ulo╛en²ch procedur; p°ekrytΘ
procedury jsou r∙znΘ procedury se stejn²m jmΘnem. Vlastnost Overload
komponenty ulo╛enΘ procedury povoluje aplikaci specifikovat proceduru k
provedenφ. Pokud Overload je nulovΘ (implicitn∞), pak se p°edpoklßdß,
╛e nenφ p°ekr²vßnφ. Pokud Overload je 1, pak komponenta ulo╛enΘ
procedury provede prvnφ ulo╛enou proceduru, kterou nalezne na serveru Oracle,
kter² mß p°ekr²vajφcφ jmΘno; pokud je 2, pak je provedena druhß,
atd.
Poznßmka: P°ekrytΘ ulo╛enΘ procedury mohou
takΘ mφt r∙znΘ vstupnφ a v²stupnφ parametry.
-
Nynφ se podφvßme na n∞kolik ji╛ hotov²ch program∙. Net²kajφ se ulo╛en²ch
procedur, ale °e╣φ r∙znΘ problΘmy. Prvnφ z nich nalezneme v adresß°i Program
files\Borland\CBuilder\Examples\DBTask\MdxBuild. Jednß se o jednoduchou
aplikaci budujφcφ indexy pro databßzovΘ tabulky Paradoxu. Program je pou╛φvßn
k odstran∞nφ chyb Index Out Of Date vyskytujφcφch se p°i spou╣t∞nφ
aplikacφ pou╛φvajφcφ tabulky Paradoxu. M∙╛eme p°ebudovat n∞kterΘ nebo v╣echny
tabulky danΘ p°ezdφvky. P°i pou╛φvßnφ programu zvolφme p°ezdφvku obsahujφcφ
opravovanΘ tabulky. Po zvolenφ p°ezdφvky je aktualizovßn seznam tabulek,
kde zvolφme po╛adovanou tabulku nebo All Tables. K p°ebudovßnφ index∙
na zvolen²ch tabulkßch potom stiskneme tlaΦφtko Build Indexes. Na
stavovΘm °ßdku je popisovßn pr∙b∞h zpracovßnφ. ProhlΘdn∞te si takΘ tuto
aplikaci a zjist∞te jak pracuje.
-
Dal╣φ program umφst∞n² v adresß°i Program files\Borland\CBuilder\Examples\DBTask\QBFDemo
ukazuje jak vytvß°et vlastnφ dotazy. ProhlΘdn∞te si tuto aplikaci a zjist∞te
jak pracuje.
-
Aplikace umφst∞nß v adresß°i Program files\Borland\CBuilder\Examples\DBTask\DBErrors
ukazuje pou╛itφ datovΘho modulu pro centralizovanΘ k≤dovßnφ, pou╛φvßnφ
vazby 1 : N : M a generovßnφ a °φzenφ databßzov²ch chyb. Aplikaci vyzkou╣ejte
a podφvejte se jak pracuje.
-
Aplikace z adresß°e Program files\Borland\CBuilder\Examples\DBTask\BKQuery
ukazuje pou╛itφ vφcevlßknov²ch SQL dotaz∙. Pou╛ivajφ se zde takΘ zdroje
definovanΘ u╛ivatelem. Aplikaci vyzkou╣ejte a prohlΘdn∞te si ji.
-
Aplikace ulo╛enß v adresß°i Program files\Borland\CBuilder\Examples\DBTask\CSDemos
je klientskß aplikace InterBase. V souboru Readme.txt je umφst∞n
popis jejφho spou╣t∞nφ. Aplikaci vyzkou╣ejte.
-
Poslednφ aplikace se kterou se v tΘto kapitole budeme zab²vat je ulo╛enß
v adresß°i Program files\Borland\CBuilder\Examples\DBTask\IBDemo.
Tato aplikace ukazuje jak pou╛φvat udßlosti InterBase. Aplikaci vyzkou╣ejte
a prohlΘdn∞te si ji.
![](/file/23411/Chip_2002-05_cd1.bin/chplus/cpp/4/PreviousArrow.gif) ![](/file/23411/Chip_2002-05_cd1.bin/chplus/cpp/4/NextArrow.gif) ![](/file/23411/Chip_2002-05_cd1.bin/chplus/cpp/4/WayUpArrow.gif) |
18. Prßce s ulo╛en²mi procedurami
|