Formßt bloku:
SQLStatement: nßzev_SQL_p°φkazu °ßdek_SQL
Statement_bloku [EndSQL]
V²znam:
Blok konektoru, podle kterΘho se sestavφ jednotlivΘ SQL p°φkazy, kterΘ budou p°edßny databßzi.
M∙₧ete pou₧φt libovolnΘ SQL p°φkazy WinBase602 SQL Serveru, pouze nßsledujφcφ p°φkazy vÜak majφ praktick² v²znam: SELECT
, INSERT
INTO
, DELETE
FROM
, UPDATE
, CALL
.
Do jednoho bloku SQLStatement
lze zapsat vφce SQL p°φkaz∙, v tom p°φpad∞ jsou jednotlivΘ p°φkazy od sebe odd∞leny st°ednφkem. Poslednφ SQL p°φkaz v bloku SQLStatement
nemusφ konΦit st°ednφkem.
Nßzev_SQL_p°φkazu je slovo z pφsmen, Φφslic a znaku podtr₧enφ ( _ ). V Üablon∞, kterß bude pou₧ita pro sestavenφ HTML dokumentu, se m∙₧ete na tento SQL p°φkaz odkazovat pomocφ jmΘna nßzev_SQL_p°φkazu. Pojmenovat m∙₧ete libovoln² SQL p°φkaz, ale praktick² v²znam mß pouze pojmenovßnφ p°φkazu SELECT
. Tφmto pojmenovßnφm mßte nap°. mo₧nost zjistit, kolik zßznam∙ obsahuje odpov∞∩ (nßzev_SQL_p°φkazu.TotalCount
), mßte mo₧nost se p°φmo odkazovat na sloupce odpov∞di v detail sekci Üablony atd.
Pokud blok SQLStatement
obsahuje vφce SQL p°φkaz∙ a zßrove≥ je pojmenovan², pak se nßzev_SQL_p°φkazu vztahuje k prvnφmu z uveden²ch SQL p°φkaz∙ a ostatnφ SQL p°φkazy v bloku SQLStatement
jsou nepojmenovanΘ.
Za pojmenovßnφm p°φkazu SELECT
v hlaviΦce bloku m∙₧e nßsledovat v hranat²ch zßvorkßch v²Φet zßznam∙, kterΘ se majφ p°eΦφst. V²Φet mß formßt
[Φφslo_prvnφho_zßznamu+poΦet_zßznam∙]
kde Φφslo_prvnφho_zßznamu je po°adovΘ Φφslo zßznamu v odpov∞di (Φφslovßno od nuly), kter² mß b²t p°eΦten, poΦet_zßznam∙ udßvß, kolik zßznam∙ od v²Üe uvedenΘho (vΦetn∞ n∞ho) mß b²t p°eΦteno. ╚ßst +poΦet_zßznam∙ j
e nepovinnß, nenφ-li p°φtomna, p°edpoklßdß se, ₧e mß b²t p°eΦten pouze zßznam, jeho₧ po°adovΘ Φφslo je uvedeno (tzn. poΦet_zßznam∙=1). nenφ-li v²Φet uveden, p°eΦtou se vÜechny zßznamy (s omezenφm dan²m blokem MaxRecords
)
Blok m∙₧e b²t nepovinn∞ ukonΦen p°φkazem EndSQL;
nebo EndSQLStatement;
. D∙vodem je p°φpadnΘ nutnΘ rozliÜenφ p°φpad∙ s #if
, jako:
SQLStatement: abcd
+ ...
#if podmφnka
+ ...
#endif
EndSQL;
a
SQLStatement: abcd
+ ...
EndSQL;
#if podmφnka
...
#endif
P°φklady:
1) vφce SQL p°φkaz∙ v jednom konektoru
SQLStatement: aplvers
+ SELECT apl_vers, apl_date
+ FROM Sys_par_2
SQLStatement: InfoProv
+ SELECT nazev1
+ FROM Info_provozovatel
+ WHERE id=%id%
DeclareVariable: WBversion:string[5] := ""
SQLStatement:
+ CALL Version(:>WBversion)
2) pojmenovan² blok, na v²sledek (jeden °ßdek, jedna hodnota) se lze v Üablon∞ odkßzat pomocφ citace <%KolikVoleb.KolikV%>
SQLStatement: KolikVoleb
+ SELECT Count(*) AS KolikV
+ FROM Volby
╪ßdek_SQLStatement_bloku je bu∩ °ßdek SQL p°φkazu, nebo p°φkaz WBC preprocesoru:
P°φklad:
3) blok vyu₧φvajφcφ p°φkaz preprocesoru #ifexists
; v p°φkazu citovßna prom∞nnß REMOTE_ADDR vracejφcφ IP adresu u₧ivatele
SQLStatement:
#ifexists
+ SELECT * FROM Anketa
+ WHERE (ipadr="%REMOTE_ADDR%");
#then
+ UPDATE Anketa
+ SET volba=Str2Int("%hodnota%")
+ WHERE (ipadr="%REMOTE_ADDR%");
#else
+ INSERT INTO Anketa(ipadr, volba)
+ VALUES ("%REMOTE_ADDR%", %hodnota%);
#endif
V SQL p°φkazech provßd∞n²ch v bloku SQLStatement
lze pou₧φvat odkazy na prom∞nnΘ (tzv. embedded variables), a to jak na prom∞nnΘ deklarovanΘ v konektoru pomocφ DeclareVariable
, tak vstupnφ formulß°ovΘ prom∞nnΘ. SQL p°φkaz hodnotu prom∞nnΘ bu∩ p°eΦte (p°enos sm∞rem k serveru) nebo pozm∞nφ (p°enos od serveru ke klientovi). Druhß varianta je mnohem u₧iteΦn∞jÜφ.
P°ed ka₧dou takovou prom∞nnou je nutno uvΘst v SQL p°φkazu dvojteΦku. Navφc je mo₧no p°idat oznaΦenφ, zda jde o p°enos hodnoty od klienta na server, ze serveru klientovi nebo ob∞ma sm∞ry. Toto oznaΦenφ zefektivnφ p°enosy dat mezi klientem a serverem a zrychlφ prßci. Prom∞nnß (s nßzvem id) se tedy zapφÜe takto:
:id
nebo :<>id
:>id
:>id
P°φklad:
1) SQL p°φkaz SELECT INTO zapφÜe hodnotu do prom∞nnΘ:
DeclareVariable: dat_smaz:String[12] := ""
SQLStatement: datum
+ SELECT CAST((CURRENT_DATE - del_obj) AS CHAR(12)) INTO :>dat_smaz
+ FROM Sys_par
2) Slo₧it∞jÜφ SQL procedura vytvo°φ podle formulß°ov²ch prom∞nn²ch podmφnku WHERE, kterß se uplatnφ v nßsledujφcφm SELECTu:
DeclareVariable: podmstr:String[300]=""
SQLStatement:
+ CALL Podminka_polozky(%datx%,%?datod%,%?datdo%,%pocet%,%ds%,%typ%,%obch%,:>podmstr)
SQLStatement: PoPolozkach
+ SELECT OPol.id_cnk, SUM(OPol.cena_summn) AS cena, C.nazev_zbozi, COUNT(C.id_cenik) AS pocet_obj, CAST(SUM(OPol.mnozstvi) AS INT) AS mnoz, MAX(OH.datum) AS posledni
+ FROM Obj_polozky AS OPol, Cenik AS C, Obj_header AS OH, Obchodni_partneri AS OP, S_zbozi_sk AS SK
+ WHERE %podmstr%
+ GROUP BY C.id_cenik
#if pocet>1
+ HAVING SUM(OPol.mnozstvi)>=%pocet%
#endif;
+ ORDER BY cena DESC
Ulo₧enß procedura Podminka_polozky mß nßsledujφcφ hlaviΦku - do v²stupnφho parametru zapφÜe vytvo°enou podmφnku:
PROCEDURE `PODMINKA_POLOZKY`(IN datx INT, IN datod DATE, IN datdo DATE, IN pocet INT, IN ds INT, IN typ INT, IN obch INT, OUT podmstr CHAR(300));