Obecně
Struktura systému
Popis
skriptovacího jazyka
Vysvětlivky
k výkladu syntaxe
Komentáře
Bloky a skripty
bloky
skripty
Proměnné
Resultset
Chybové zprávy
Procedury, funkce
Výzazy
(logický výraz , numerický
výraz, textový výraz )
Matematické,
logické a textové funkce
Operátory
Speciální jména
foreach
if ( ... ) else ...
echo
print, println
load
... into,
sync ... by ... into
save
... into
append ... into
break
exit
return
messages
in (.convertor
, .format , .format.plain
, .format.fixed , .format.fixed
, .counter , .null,
.skip, .condition,
.style)
sql (.error,
.error.exit, .error.display,
.error.max, .isError,
.setError, .timeout,
.rows.max, .select,
.execute, .getString,
.getRow)
dsn (.select
, .close , .load ,
.params )
out
(.convertor , .trim
, .format , .style
, .null)
output
(.clear , .get
)
system (.execute
, .priority , .gen
, .setError , .isError
, .message , .runEvent
, .invoke , .exit,
.zip, .unzip
)
file (.load
, .copy , .delete
, .save , .append
, .move , .isDirectory
, .exists , .getName, .getParent,
.getPath, .rename)
directory
(.create, .list
, .listFiles, .exists,
.getName, .getParent, .rename)
form
(.create, .getValue,
.addItem, .display
)
url (.load,
.get, .post, .save
)
systém je určen:
k údržbě heterogenních databází s velkým množstvím různorodých zdrojů dat (všechny známé databáze, textové soubory, binární soubory se známou strukturou a pevnou délkou věty, URL, WWW tabulky a stránky ...)
k transferu dat libovolným směrem mezi těmito zdroji dat,
k hromadnému zpracování, tvorbě pohledů přes všechny tyto datové zdroje ...),
automatozaci činností (přenosy dat, pohledy, exporty, importy ...) pomocí skriptovacího jazyka trochu podobného perlu.
dalším činnostem spojenám s daty.
Systém je nezávislý na platformě (testován je na všech verzích Windows 9x, NT, 2000, na LINUXu, na NOVELLu ...)
Akce, které bude MSQL systém provádět se mu zadávají pomocí příkazů skriptovacíha jazyk (pracovně nazvaného msql). Veškeré akce, které uživatel požaduje (i ty, které jsou vybírány např. z menu grafického prostředí) jsou převáděny na příkazy tohoto „jazyka“.
Vlastní systém se zkládá z jádra (to příkazy vykonává) a různých interface (ty naopak příkazy formulují a předávají ke zpracování).
Jádro provádí vlastní příkazy, které obdrželo od některého z interface. Tomuto interface také vrací výsledky své činnosti a případné zprávy (chybové a jiné). Interface tyto výsledky a zprávy zobrazuje uživateli (nebo např. ukládá do souborů na serveru - to pokud použitý interface přímo nekomunikuje s uživatelem). Jádro neví, jakým způsobem byly příkazy zadány ani jak budou zpracovány zprávy, které samo vrací.
Interface zajiš'tují komunikaci mezi zadavatelem příkazů (podle typu interface to může být uživatel nebo např. proces na GapoServeru) a jádrem (které provádí vlastní příkazy).
V současnosti jsou k dispozici tyto interf ace:
MSQL (MSQL_s):
grafický interface; kompletní
údržba databází a DSN, tvorba SQL příkazů a skriptů.
Umožňuje
přidávat, mazat a upravovat jednotlivá DSN, má v sobě grafický editor
SQL příkazů a skriptů, dovoluje editovat SQL (MSQL) skripty,
zvýrazňuje syntaxi SQL (MSQL) příkazů; soubory může načítat z
lokálního disku nebo z GapoServeru atd.
Je dostupný i jako exe
program pro Windows.
MSQLInteractive
grafický interface. Dovoluje
uživateli psát, ladit a spuštět SQL příkazy a skripty, nebsahuje však
část pro údržbu databází a DSN ani grafickou tvorbu SQL příkazů.
Je
dostupný i jako exe program pro Windows.
MSQLr
grafický interpret skriptů;
dovoluje pouze spouštět již připravené MSQL skripty bez možnosti
změnit parametry a psát vlastní příkazy.
Je dostupný i jako exe
program pro Windows.
MSQLarts
: samostatný server (spouští se spolu s GapoServerem, poslouchá na určeném socketu; je možné se k němu připojit pomocí telnetu, funkčně shodný s MSQLinteractive) - viz popis GapoServeru.
MSQLc
: interpret příkazů spouštěný z příkazové řádky. Funkčně shodný s MSQLInteractive , pro svůj chod však nevyžaduje grafické prostředí.
MSQLs
: servlet interface. Běží jako servlet na libovolném WWW serveru; funkčně shodný s MSQLInteractive .
MSQLrts
: interface pro klienta RTs systému (skripty se spouští na straně serveru)
Jednotlivé interface budou popsány v samostatných dokumentech. Následující dokument je pro všechny společný
jména dávek
začínají @ (zavináčem).
Jména
souborů, načítaných z lokální stanice mohou (v některých
speciálních případech musí) začínat znakem % (procenta).
Jména souborů načítavých ze serveru, ukládaných na
server nebo zpracovávaných na serveru MUSÍ začínat
znakem ! (vykřičník).
pokud je skript načítán ze serveru,
začíná příkaz @!
Příklady:
- skript načtený z lokálního
disku: @c:\SQL\moje_davka.msql
- stejný skript načtený ze
serveru: @!c:\SQL\moje_davka.msql
- příkaz OS, spouštěný
lokálně: %cmd /c dir c:\ výpis root adresáře svazku c:
-
příkaz OS, zaslaný na server typu UNIX: !ls / výpis root
adresáře serveru
v hranatých závorkách [ ] jsou volitelné položky
v lomených závorkách < > je seznam položek, z nichž musí být zvolena alespoň jedna
svislice | je použita k oddělení seznamu alternativ
malá / velká písmena se zatím nerozlišují, pro kompatibilitu s budoucími vezzemi doporučujeme používat ve všech příkazech malá písmena, v SQL příkazech naopak velká.
tučně
- příkazy systému (musí být napsány tak, jak jsou uvedeny zde)
italikou
- údaje zadávané z venku (jména proměnných...)
podtržené -
speciální jména (např. vnitřní
proměnné); jsou to alternativy ke jménům oproměnných, některé ale
mají speciální význam.
Musí být zadávýny přesně tak, kjak je zde
uvedeno.
VELKÝMI TUČNÝMI PÍSMENY -
SQL příkazy
Jinak jsou použita běžná syntaktická pravidla:
jsou stejné jako v jazyce c nebo Perl:
Začínají dvojicí znaků /* a končí */ . Veškerý text mezi těmito značkami je ignorován.
Jednořádkové komentáře začánají dvojicí znaků // (lomeno) - jako v jazyce c - a končí na konci řádku - je ignorován text od této značky do konce řádku.
Blok je část programu uzavřená ve složených závorkách. Proměnné delkarované uvnitř bloku nejsou vidět vně bloku.
{
....
toto je blok
....
}
Jakýkoli text může být uzavřen do bloku.
Skript je uložena v samostatném souboru. Z běžícího programu je skript zavolán (spuštěn) příkazem
@úplná_cesta_k_souboru [parametr1 [parametr2] ... ]
Skripty lze načítat z lokálního filesystému (začínají "@") nebo ze serveru - začínají "@!" (na serveru musí být povoleno čtení z adresáře se skripty). Vždy se však skripty zpracovávají na lokálním počítači.
Skript může mít parametry. Předávají se na příkazové řádce za
názvem skriptu, jsou oddělené mezerou nebo tabelátorem. Pokud má
parametr obsahovat mezeru, musí být uzavřen v uvozovkách. Parametrz
jsou při předání zpracovány a proměnné nebo výzazy mezi ${
...} jsou nahrazeny hodnotami (viz příkaz echo
).
Příklad:
@c:\cesta_k_souboru_se_skriptem param_1 param_2 "param 3 s mezerami" param_4
Uvnitř skriptu se na parametry odkazuji pomocí speciálních
proměnných $1, $2 ... až $n (existuje jich tolik, kolik parametrů
bylo předáno - počet parametrů není omezen).
Parametry jsou
normální textové proměnné, t. zn. že:
mají textovou hodnotu (pokud je potřebujeme v matematickém výrazu, použujeme funkci num () ).
platí pouze uvnitř těla skriptu
lze změnit jejich hodnotu
Jinak je skript shodný s blokem (i kdyz její text nemusí být uzavřen v { ... } - to je dáno tím, že je v samostatném souboru).
Jména všech proměnných
MUSÍ začínat $ (dolarem) - je to proto, aby systém byl schopen odlišit jeho vlastní proměnné od SQL příkazů (protože název SQL příkazů, direktiv ani jmen sloupců u většiny DB strojů obvykle nezačínají $)
proměnné nemusí být deklarovány. Deklarují se automaticky prvním použitím. Jakmile je proměnné přiřazena hodnota určitého typu, nelze tento typ již změnit - t.zn, že této proměnné lze nadále přiřazovat pouze hodnoty shodného typu (jinak bude hlášena chyba).
proměnné jsou platné od místa deklarace (t. j. od místa
prvního použití - pokud nejsou explicitně deklarovány) do konce
bloku, uvnitř kterého vznikly a jsou viditelné i ve vnořených
blocích.
Pokud je uvnitř vnořeného bloku změněna hodnota
proměnné, tato změna je viditelná i v nadřízených blocích, pokud je
tam viditelná proměnná.
Volání skriptu se z tohoto pohledu
považuje za samostatný blok, i když text skriptu není uzavřen v { ... }
Proměnné lze deklarovat explicitně příkazem
var $jméno_proměnné
[ = hodnota];
Pokud proměnná se jménem $jméno_proměnné již existovala
v nadřízených blocích, bude skryta a místo ní bude do konce tohoto
bloku používána proměnná zde deklarovaná (včetně vnořených bloků).
Pokud by proměnná stejného jména existovala v tomto bloku,
vznikne chyba. Pokud je proměnné přiřazena hodnota, vznikne proměnná
toho typu, jaký typ hodnoty se jí přiřadí. Jinak se typ proměnné určí
prvním přiřazením hodnoty.
představuje speciální typ proměnné. Vznikne jako výsledek SQL příkazu select:
SAVE
SQL_SELECT INTO $jméno_resultsetu FROM
...
volání procedury SQL serveru:
SAVE
result INTO $jméno_resultsetu
jméno_SQL_procedury [parametry procedury]
nebo může být explicitně vytvořen:
SAVE
textový_výraz INTO $jméno_resultsetu
Jeho hodnotu nelze změnit ani jej nelze použít ve výrazech (proměnná se jménem $jméno_resultsetu může být explicitně deklarována ve vnořených blocích, nebude to však již resultset a původní resultset se tím stane v tomto bloku nepřístupným).
K resultsetu lze přidávat záznamy, které musejí mít stejnou strukturu jako záznamy, které již v resultsetu jsou (pokud by tomu tak nebylo, vznikla by při zpracování takového resultsetu chyba):
APPEND
SQL_SELECT INTO $jméno_resultsetu FROM
...
APPEND result INTO $jméno_resultsetu
jméno_SQL_procedury [parametry procedury]
nebo
APPEND textový_výraz INTO $jméno_resultsetu
textový_výraz musí být řádek textu , kde jednotlivé položky jsou odděleny čárkou, textové údaje uzavřeny v apostrofech a NESMÍ KONČIT KONCEM ŘÁDKU (znaky s ASCII/UNIkódem 10 nebo 13)
Resultset lze použit v příkazech LOAD (hromadbý impo rt
do tabuklky) nebo v příkazu cyklu foreach. Lze jej jako celek
zapsat do souboru nebo URL.
Jako jméno resultsetu lze napsat jméno textového souboru (nebo obecného souboru popsaného pomocí in.format.plain ) - data pak budou čtena z tohoto souboru.
Resultset nebo textový soubor má jednotlivé záznamy na
samostatných řádcích, řádky jsou ukončeny znakem CR nebo LF nebo
oběma.
Sloupce jsou odděleny čárkami, textové údaje jsou uzavřeny
v apostrovech (tzv. CSV formát souboru).
První řádek resultsetu nebo souboru může obsahovat informace o sloupcích v tomto tvaru:
#!jméno_sloupce_1, jméno_sloupce_2, ...., jméno_sloupce_n
Počet položek (oddělených čárkami) musí být stejný jako počet sloupců s daty, jinak je teno řádek ignorován.
Pokud tento řádek existuje a má správný formát a počet položek,
jsou jména z něj zpracována jako jména sloupců resultsetu a lze se na
ně odkazovat např. v příkaze foreach.
Jinak budou v
cyklech k dispozici pouze čísla sloupců ($col1, $col2 ...)
Při behu skriptů mohou vzniknout různé chyby. Pokud se tak stane, skript bude ukončen a o chybě je podána zpráva (vyjímkou jsou chyby při SQL operacích - to lze nastavit pomocí sqp.error.max , sqp.error.exit , sqp.error.display ).
Zprávy o chybách vzniklých při zpracování příkazů, skriptů... jsou zobrazovány do výstupního kanálu. Všechny chybové zprávy začínají prefixem '> Error ' (místo '> ' bude prefix pro zprávy vracené serverem; lze nastavit v msql.properties ). Pak může následovat text v závorce, který určuje kategorii chyby, dále vlastní text chybové zprávy. Kategotie chyb jsou následující:
'> Error (SQL)'
jde
VŽDY o chybu vracenou příslušným ovladačem databáze - MSQL ji pouze
zobrazuje. Na dalších řádcích je text chybové zprávy tak, jak jej
vrátil ovladač databáze. Chybové zprávy tohoto typu nemají jednotný
formát - každý výrobce ovladačů má svůj způsob zobrazování chybových
zpráv. Výpis těchto zpráv lze zakázat příkazem 'sqp.error.display
'
'> Error (SCRIPT)'
obvykle
chybaná syntaxe skriptu
'> Error (I/O)'
chyba
vznikla při čtení ze vstupu / zápise do výstupu (cyklus, export dat
a pod.)
'> Error
(SECURITY)'
uživatel se pokusil o operaci, ke které nemá
právo
'> Error (RUNTIME)'
Chyby
přímo související s během skriptu (nesprávné přiřazení
proměnných...)
'> Error '
ostatní chyby, které se nevešly do
předchozích kategorií
'> Warning '
varování, které nemá za důsledek
přerušení skriptu.
zatím nejsou...
Výzazy se mohou vyskytnout:
při přiřazení na pravé straně operátoru '='
v příkazu
v podmínce (pouze logický výraz)
v SQL příkazu; zde
ale musí být uzavřeny mezi ${ výraz } - $ na začátku
označuje, že jde o výraz který má být vyhodnocen, za ním musí
následovat otvírací složená závorka a výraz končí uzavírací složenou
závorkou.
V SQL příkazech jsou výrazy a proměnné nahrazeny
jejich hodnotami a pak předány databázi ke zpracování.
NEJSOU
vyhodnoceny texty u unozovkách - ty jsou ponechány beze změny
(včetně uvozovek).
Texty v apostrofech JSOU vyhodnoceny a
výrazy / proměnné v apostrofech jsou nahrazeny hodnotami.
Pokud
je nutné aby text obsahova $, lze jej zdvojit. Dvojice $$ je
nahrazena jedním znakem $ a následující text NENÍ považován za
proměnnou.
Pokud nelze výraz vyhodnotit nebo pokud text za $ není
proměnná, je text ponechán beze změny tak, jak je zadán.
v příkazu echo - platí sejné podmínky jako pro SQL příkaz
Je několik typů výrazů - podle typu hodnoty, kterou vrací:
výsledkem je logická hodnota (nabývá hodnot false nebo true)
operátor musí být některý z logických operátorů (viz popis operátorů)
operandy musí být typu podle použitého operátoru
lze jej použít při vyhodnocování podmínek (if , while), ale i mimo podmínky
výsledkem je numerická hodnota
operátor musí být některý z operátorů pro numerické výrazy
oba jeho operandy tohoto výrazu musí mít numerické hodnoty nebo numerické výrazy
výsledkem je textová hodnota
operátor musí být některý z operátorů pro textové výrazy
nejméně jeden operand je má textovou hodnotu nebo je to textový výraz
v textových výrazech jsou zpracovávány dvojice znaků \t, \n, \r a nakrazeny hodnotami (tabelátor, konec řádku, návrat vozíku) a \uNNNN (kde NNNN je hexadecimální číslo) je nahrazen UNICODE znakem s touto hodnotou.
Příklad:
|
Výraz |
typ vrácené hodnoty |
vrácená hodnota |
|
"abc_" + (2 * 4) + "_def" |
text |
"abc_8.0_def" |
|
sin(pi/2) + 1 |
numerická |
2.0 |
|
1 == 2 |
logická |
false |
Ve výrazech lze použít tyto funkce:
Matematické - jejich parametry jsou numerické a vracejí (převážně) numerickou hodnotu.
|
jméno |
Typ výsledku |
Popis |
|
|
abs(x) |
číslo |
absolutní hodnota čísla x |
|
|
acos(x) |
číslo |
arcus cosinus x |
|
|
asin(x) |
číslo |
arcus sinus x |
|
|
atan(x) |
číslo |
arcus tangens x |
|
|
cos(x) |
číslo |
kosinus x |
|
|
sin(x) |
číslo |
sinus x |
|
|
tan(x) |
číslo |
tangens x |
|
|
exp(x) |
číslo |
e na x |
|
|
dexp(x) |
číslo |
10 na x |
|
|
log(x) |
číslo |
logaritmus čísla x se základem 10 |
|
|
ln(x) |
číslo |
přirozený logaritmus čísla x |
|
|
round(x) |
číslo |
zaokrouhlení čísla x |
|
|
sqrt(x) |
číslo |
druhá odmocnina čísla x |
|
|
deg(x) |
číslo |
převede radiany na stupně |
|
|
rad(x) |
číslo |
převede stupně na radiany |
|
|
random(x) |
číslo |
pseudonáhodné celé číslo v rozsahu 0 až x pseudonáhodné celé číslo v rozsahu x až y |
|
|
int(x) |
číslo |
převede x na integer. Výsledek této funkce NEMŮŽE být použit ve výpočtech; tato funkce je určena pro spokupráci s externími. moduly |
|
|
max(x, y) |
číslo |
vrátí větší z čísel x , y |
|
|
min(x, y) |
číslo |
vrátí menší z čísel x , y |
|
|
hex(x, y) |
text |
převede x na hexadecimální string, přičemž dělka stringu bude y znaků a zleva bude vyplněn nulami. Pokud je výsledné hex číslo větší než y, bude beze změny. |
|
|
pow(x, y) |
číslo |
x na y (libovolná mocnina) |
|
|
format(x, s) |
text |
naformátuje číslo x formátem s a vrátí jako text |
|
|
format(x, n, s) |
text |
naformátuje číslo x formátem s a vrátí jako text. Výsledný text bude mít nejméně n znaků. Popis formátovacích znaků: [ 0 ] [ L | R ] |
|
|
long(x) |
číslo |
převede x na long číslo (64 bitů). Výsledek této funkce NEMŮŽE být použit ve výpočtech; tato funkce je určena pro spokupráci s externími. moduly |
|
textové funkce
|
len(s) |
číslo |
délka stringu |
|
num(s) |
číslo |
převede s na číslo (pokud to jde) a vrátí toto číslo |
|
tolower(s) |
text |
převede s na malá písmena |
|
invert(s) |
text |
zamění malá / velká písmena |
|
toupper(s) |
text |
převede s na velká písmena |
|
toname(s) |
text |
převede s na jméno (první písmeno velké, ostatní malá) |
|
trim(s) |
text |
odstraní mezery na začátku a konci stringu s |
|
substring(s,
x, y) |
text |
substring stringu s
od pozice x do pozice y |
|
unicode(s) unicode(s, x) |
číslo |
vrátí UNICODE kód prvního znaku stringu nebo znaku na pozici x |
|
clear(s) |
text |
vymaže všechny "white spaces" ze stringu s |
|
normalize(s) |
text |
upraví string s tak, že ve výsledném stringu jsou všechny "whitespaces" nahrazeny právě jednou mezerou |
|
eval(s) |
podle typu výrazu |
vyhodnotí výraz, uložený ve
stringu s a jeho výsledek vrátí jako proměnnou, která
odpovídá typu výrazu |
Ostatí funkce
|
text |
převede číslo x
(které představuje datum - počet dní od 1.1.1970), na text pomocí
formátovacího stringu f a vtrátí. dd = dvoumístný den (pokud je 1 digit, doplní nalevo 0) d = jednomístný den (nedoplňuje 0) mmm = měsíc jako text (leden, únor ...) mm = dvoumístná měsíc m = jednomístný měsíc yyyy = čtyřmístný rok yy = dvoumístný rok hh,h = dvou / jedno místná hodina :mm,:m = dvou / jedno místná minuta mn = dvoumístná minuta ss,s = dvou / jedno místná sekunda dw = zkratka dne v týdnu (Po, Út ...) dddd = jméno dne v týdnu (Pondělí, Úterý ...) Ostatní kombinace znaků z formátovacího stringu jsou uloženy do výsledku beze změny. |
|
|
toDate (s, f) |
číslo |
převede s na číslo, které reprezentuje datum (počet dní od 1.1.1970) s pomocí formátu f (viz formatDate ). |
|
formatTime(x, f) |
text |
převede číslo, které představuje čas (počet sekund od začátku dne) na text s pomocí formátu f (viz formatDate ). |
|
toTime(s) |
číslo |
převede string na číslo, které představuje čas (počet sekund od hodiny 0) s pomocí formátu f (viz formatDate ). |
|
now |
číslo |
vrátí počet milisekund od 1.1.1970 |
|
today |
číslo |
vrátí číslo, které představuje datum (počet dní od 1.1.1970) |
|
nowtime |
číslo |
vrátí číslo, které představuje čas (počet sekund od začátku dne) |
|
Ope- rátor |
typ operandu |
Typ výsledku |
Popis |
|
|
před |
za |
|||
|
+ |
text |
cokoli |
text |
Sloučí 2 stringy. Pokud něktrerý operand není string, nejprve jej na string převede. |
|
cokoli |
text |
|||
|
+ |
číslo |
číslo |
číslo |
matematický součet |
|
- |
číslo |
číslo |
číslo |
matematický rozdíl |
|
/ |
číslo |
číslo |
číslo |
dělení |
|
* |
číslo |
číslo |
číslo |
násobení |
|
% |
číslo |
číslo |
číslo |
dělení modulu |
|
| |
číslo |
číslo |
číslo |
bitový OR |
|
| |
boolean |
boolean |
boolean |
logický OR |
|
|| |
boolean |
boolean |
boolean |
logichý OR |
|
& |
číslo |
číslo |
číslo |
bitový AND |
|
& |
boolean |
boolean |
boolean |
logický AND |
|
&& |
boolean |
boolean |
boolean |
logický AND |
|
^ |
číslo |
číslo |
boolean |
bitový XOR |
|
^ |
boolean |
boolean |
boolean |
logický XOR |
|
< |
číslo |
číslo |
boolean |
porovnání čísel, vrací true pokud op.1 < op2, jinak false |
|
< |
text |
text |
boolean |
porovnání stringů; vrací true pokud op1 je textově menší (t.j první rozdílný znak má menší kód) než op2, jinak false |
|
<= |
číslo |
číslo |
boolean |
porovnání čísel, vrací true pokud op.1 <= op2, jinak false |
|
<= |
text |
text |
boolean |
porovnání stringů; vrací true pokud op1 je textově menší (t.j první rozdílný znak má menší köd) než op2 nebo jsou stringy totožné, jinak false |
|
> |
číslo |
číslo |
boolean |
porovnání čísel, vrací true pokud op.1 > op2, jinak false |
|
> |
text |
text |
boolean |
porovnání stringů; vrací true pokud op1 je textově větší(t.j první rozdílný znak má vyšší kód) než op2, jinak false |
|
>= |
číslo |
číslo |
boolean |
porovnání čísel, vrací true pokud op.1 >= op2, jinak false |
|
>= |
text |
text |
boolean |
porovnání stringů; vrací true pokud op1 je textově větší(t.j první rozdílný znak má vyšší kód) než op2 než op2 nebo jsou stringy totožné, jinak false |
|
== |
číslo |
číslo |
boolean |
porovnání čísel, vrací true pokud op.1 je rovno op2, jinak false |
|
== |
text |
text |
boolean |
porovnání stringů; vrací true pokud op1 je rozdíkný od op2, jinak false |
|
!= |
číslo |
číslo |
boolean |
porovnání čísel, vrací true pokud op.1 není rovno op2, jinak false |
|
!= |
text |
text |
boolean |
porovnání stringů; vrací true pokud op1 je textově shodný s op2, jinak false |
|
= |
proměnná |
číslo |
číslo |
přiřazení numerické hodnoty proměnné |
|
= |
proměnná |
text |
text |
přiřazení textové hodnoty proměnné |
|
= |
proměnná |
boolean |
boolean |
přiřazení logické hodnoty proměnné |
|
! |
boolean |
- |
boolean |
negace |
Systém má několik speciálních proměnných, ve kterých jsou uloženy
indormace o aktuálním stavu systému, výsledky operací, počty záznamů
a pod. Jsou pouze pro čtení - jejich hodnoty nastavuje systém a nelze
je měnit. Jinak je lze použít jako normální proměnné.
Všechny
vnitřní proměnné nemusí existovat vždy - např. $rowcount vznikne až
po provedení prvního SQL příkazu a hodnota platí do dalšího SQL
příkazu;
|
Jméno proměnné |
Popis |
kde lze použít |
|
$data |
řádek resultsetu tak, jak by byl předán SQL příkazu INSERT (t.j, seznam proměnných oddělených čárkou, texty v apostrofech). |
|
|
$jm_rs.col1, |
hodnoty jednotlivých sloupců
resultsetu. Číslo znamená pořadí sloupce od začátku resultsetu.
|
|
|
$jm_rs.jm_sloupce_1,
$jm_rs.jm_sloupce_2, |
hodnoty jednotlivých sloupců
resultsetu. Místo $jm_sloupce_1 až $jm_sloupce_n
jsou skutečná jména sloupců v resultsetu (pokud existují - jinak
proměnné nejsou definovány) |
|
|
memory * |
globální buffer k ukládánání výsledků SQL příkazů; existuje po celou dobu běhu MSQL a jeho hodnota je společná. pro všechny procedury i jednotlivá okna (instance) MSQL. |
Všude kde lze použít resultset |
|
output * |
aktuální výstupní tok dat; o co konkrétně jde záleží na použitém uživatelském interface. Pro GUI je to výstupní okno, pro instanci na GapoServeru výstupní stream, pro servlety výstupní stream servletu (zobrazí se ve WWW prohližeči) |
|
|
result * |
1) v příkazech save, append označuje že se jedná o volání stored procedury a ze tedy za INTO NEnásleduje sekce FROM ...., ale přímo jméno stored procedury a parametry. 2) v příkazech save, append (pokud není zadána část s SQL příkazem): uloží výsledek posledního SQL příkazu do souboru / proměnné **. 3) v příkazech load, foreach je to obsah posledního výsledku SQL příkazu SELECT nebo volání procedury která vrátila resulset **. |
|
|
$_rowcount |
počet řádků (záznamů) naposledy vykonaného SQL příkazu |
po SQL, pokud byl bez chyby, |
|
$_rownum |
Číslo právě zpracovávaného řádku. První záznam má číslo 1. |
|
|
$_sqlResult |
výsledek posledního SQL příkazu. Má tyto hodnoty:
>= 0 :
-1 : |
všude kde se používá proměnná |
|
$_basePath |
Adresář, ve kterém je MSQL spuštěn (obvykle je to adresář, který byl nastaven jako aktuální adresář v operačním systému v okamžiku spuštění MSQL) |
všude kde se používá proměnná |
|
$_scriptPath |
Cesta k adresáři, ve kterém
leží skript který je právě zpracováván. Výchozí hodnota (po
startu) je stejná jako $_basePath, při volání skriptu je nastavena
na adresář ze kterého je skript spuštěn. Po ukončení skriptu je
obnovena původní hodnota. |
všude kde se používá proměnná |
|
$_logFile |
cesta k souboru se
systémovými logy. |
všude kde se používá proměnná |
|
$0 |
$0 = jméno právě prováděného
skriptu včetně cesty; |
ve volaných skriptech |
|
$_iniPath |
cesta k adresáři, ze kterého jsou načteny inicializační soubory |
všude kde se používá proměnná |
|
$_token |
hodnota právě načteného údaje |
v příkazech *** |
*
Tyto proměnné NEZAČÍNAJÍ znakem '$'
**
platí pouze pokud použitý interface podporuje ukládání SQL příkazu.
Pokud interface
podporuje také editaci resultsetu (např. grafické MSQL), bude použit
výsledek ve stavu
ve kterém je v okamžiku volání tohoto příkazu včetně uživatelem
změněných hodnot.
*** pokud byl nastaven formát některám z příkazů in.format.plain, in.format.fixed nebo in.style.
Při staru každého interface je nejprve načten a interpretován soubor s konfigurací. Podle toho, který interface je použit, načítají se inicializační informace z různých konfiguračních souborů (viz následující tabulka):
|
Interface |
souboru s konfigurací |
|
|
Jméno |
umístění |
|
|
MSQLInteractive |
msql.properties |
adresář v 'classpath' nebo interní |
|
MSQLarts ** |
msql.properties |
adresář v 'classpath' nebo aktuální adresář při startu |
|
MSQLc |
msqlc.properties |
aktuální adresář při startu |
** inicializační soubor lze nastavit v konfiguraci serveru
Struktura všech těchto souborů je stejná a je popsána dále. Všechny cesty k souborům a adresářům mohou být napsány s "unix" tvaru (oddělovač '/') nebo "windows" (odělovač '\'; pokud je použit v textové proměnné, musí být zdvojen: " .. \\ .." ). V konfiguračních souborech lze použít nekolik proměnných:
Proměnná ${basePath}
|
Instalace spuštěná: |
obsah proměnné ${basePath} |
|
v rámci GapoServeru |
systémový adresář serveru = adresář server.path |
|
z příkazové řádky |
aktuální adresář při spuštění |
|
jako servlet |
aktuální adresář v okamžiku spuštění servlet. stroje |
Další proměnné: (některé platí pouze s určitýni interface - je to u nich uvedeno).
|
|
|
|
server.address |
IP adresa GapoServeru, ke
kterému se |
|
server.dsn.initial |
jméno datového zdroje (DSN),
který bude nastaven jako výchozí (ověřují se proti němu uživatelé
a je nastaveno při startu nové instance) |
|
server.uname |
jméno uřivatele, který bude
přihlášen při staru systému. Pokud je zadán a existuje, bude každé
nové připojení k serveru automaticky přihlášeno pod tímto
uživatelem. Klient může při inicializaci zadat jiného uživatele
(viz popis interface MSQLarts, MSQLs) |
|
server.upwd |
heslo tohoto uživatele |
|
scripts.path |
seznam adresářů, ve kterých
se hledají skripty, pokud nejsou nalezeny tak, jak jsou zadány v
příkaze (na zadané cestě) - obdoba proměnné op. systému PATH.
|
|
scripts.path.onlyAllowed |
pokud je true, lze
spouštět skripty pouze z adresářů uvedených v scripts.path;
jinak ze všech adresářů, ze kterých může přihlášený uživatel
číst (vyjímkou jsou skripty natažené při inicializaci - viz
dále). |
|
|
|
|
linePrefix |
text, kterým budou začínat
řádky očekávající vstup uživatele |
|
messagesPrefix |
text, kterým budou začínat
zprávy vracené systémem do std. výstupu. Případné mezery na konci
JSOU součástí textu |
|
initialScript |
skript, který se provede
jednou při startu systému. Proměnné deklarované v hlavním bloku
tohoto skriptu (ne ve vnořevých blocích nebo skriptech) jsou
statické a změna jejich hodnoty v jedné instanci se projeví ve
všech ostatních instancích. Tento skript nesmí obsahovat SQL
příkazy (protože v době inicializace neexistuje spojení s
dtatbází). Případné zprávy tohoto skriptu jsou vypisovány do std.
výstupu. Tělo skriptu je mezi { ... } |
|
scripts.load |
Seznam skriptů, které budou
načteny jako statické při inicializaci systému a budou existovat
po celou dobu běhu systému. Budou přístupné uživatelům i v
případě, že leží v adresářích, ze kterých nemá přihlášený uživatel
právo číst. Tvar: |
Příklad inicializačního souboru:
|
server.address=172.20.1.201 server.uname=web scripts.path=${basePath}/scripts; scripts.path.onlyAllowed=true scripts.load=muj,${basePath}/scripts/g;pokusnySkript,c:/user/pskript.msql; linePrefix=> messagesPrefix=> initialScript={ \ $initializedF
= false; \ } |
Příkaz " scripts.path=..." nastaví adresáře, ve kterých se budou hledat skripty.
Příkaz " scripts.path.onlyAllowed=true" zaká že spouštět skripty mimo tyto adresáře
Příkaz " scripts.load=" načte dva skripty. První z bude v systému známý pod jménem "muj " (t. j. pokud napíšu příkaz "@muj", spustí se tento skript), druhý bude mít jméno "pokusnySkript " (ten by se normálně nedal vůbec spustit protože neleží na povolené cestě).
příkazy určují, co má MSQL dělat. Aby měl skript smysl, musí obsahovat alespoň jeden příkaz.
cyklus pro všechny řádky resultsetu, souboru, URL nebo stringu který je považován za resultset.
syntaxe:
foreach <$lokální_jméno | record>
in <$ jméno_resultsetu | memory |
jméno_souboru_na_disku | URL | jméno_proměnné | ${
výraz }> příkaz...;
|
$jméno_resultsetu |
jméno, pod kterým byl uložen resultset zpracovávaný v tomto cyklu |
|
jméno_souboru |
jméno textového souboru s odpovídající strukturou, nebo obecného souboru který byl popsán v předchozím příkaze i n.format.plain(...); |
|
$lokální_jméno |
jméno, kterým se budu uvnitř
těla cyklu odkazovat na jednotlivé sloupce resultsetu. (odkazy ve
tvaru $lokální_jméno.jménoSloupce nebo $lokální_jméno.colX
kde X je pořadpvé číslo sloupce počínaje 1) |
|
record |
použito místo lokálního jména " record" => toto jméno nebude existovat, na jména nebo čísla sloupců se budu odkazovat přímo jako na proměnné (bez prefixu "$lokální_jméno.".) |
|
jméno_proměnné |
Pokud je proměnná strimg (textová proměnná), načítají se data přímo z tohoto stringu. Lze nastavit formát dat přílazem in.format... |
|
${ výraz } |
Výraz musí být textový; je vyhodnocen a jeho výsledek je použit jako název zdroje dat (soubor nebo URL). |
Pokud je jako zdroj dat použit přímo
název textové proměnné, bude MSQL tuto proměnnou považovat pžímo za
zdroj dat a z ní bude data načítat.
Pokud mají být data načítána
ze souboru nebo URL a jeho název je nutné získat vyhodnocením výrazu,
lze to provést dvěma způsoby:
pokud může výraz zažínat konstantním stringem, lze psáz :
“konstantní_část_1” + $proměnná_1 + “konstantní_část_2”
...
tento zápis dovoluje pouze složení konstant a proměnných, ne
však použití funkcí...
nebo musí být výraz uzavřen mezi ${ ... }; zde lze použít
cokoli.
Pokud je nutné použít pro jako zdroj dat cyklus výsledek výrazu, je nutné tento výraz nejprve uložit do proměnné a tu poak použít jako zdroj dat.
příklad 1:
Vytvoří resultset jménem $locVar výběrem z
tabulky, následující cyklus vypíše hodnoty ze sloupců NAME a VALUE
pro všechny řádky tohoto resultsetu.
SAVE
ID, NAME, VALUE INTO $locVar FROM MY_TABLE;
foreach $radek in
$locVar {
echo Jméno je '$radek.NAME', hodnota
je '$radek.VALUE';
}
příklad 2:
Jako v předchozím příkladě, ale vypíše pouze
ty řádky, jejichž ID > 10 (funkce num() je použita proto,
že všechny hodnoty resultsetu jsou typu text)
SAVE
ID, NAME, VALUE INTO $locVar FROM MY_TABLE;
foreach $radek in
$locVar {
if (num($radek.ID) > 10)
echo Jméno je '$radek.NAME', hodnota je '$radek.VALUE';
}
příklad 3:
jako název zdroje dat je použita textová
proměnná “$vysledekSQL”,
ve které je uloženo jméno souboru s daty;
tento soubor bude
načten a bude zobrazen první sloupec dat. Pokud by $vysledekSQL
nebyl mezi ${ a }, načítaly by se data přímo
z této proměnné;
nikoli ze souboru jehož jméno je v proměnné uloženo.
foreach
$promCyklu in ${$vysledekSQL}
echo první
sloupec vysledku SQL je $promCyklu.col1;
příklad 4:
foreach
record in memory
echo první sloupec výsledku
SQL uloženém v globální promìnné je $col1.;
příklad 5:
//
nejprve vytvorim textovou promennou jako “virtualni”
tabulku o 3 sloupcich a 4 radcich
$promenna =
“Row1_Col1,Row1_Col2,Row1_Col3\n” +
“Row2_Col1,Row2_Col2,Row2_Col3\n” +
“Row3_Col1,Row3_Col2,Row3_Col3\n” +
“Row4_Col1,Row4_Col2,Row4_Col3”;
// a pak zobrazim
jeji radky
$cnt = 0;
foreach record in $promenna
echo Data řádku ${$cnt++} tabulky jsou: $data;
Poznámka:
foreach lze použít k procházení resultsetů,
textových souborů v CSV formátu, i textových souborů s pevnou délkou
věty (po nastavení formátu věty příkazem in.format
)
Podmínka. Text v závorkách za if se vyhodnotí jako logický výraz (jeho výsledkem musí být false nebo true)
syntaxe:
if (logický_výraz)
příkaz_při_spnění_podmínky [ else [if
(logický_výraz) příkaz [ else [ if ]... ]
] příkaz_při_nespnění_podmínky ] ;
příklad:
$a =
10;
if ($a == 10)
println("proměnná $a
má hodnotu 10");
else if($a > 11)
println("proměnná $a je větší než 11");
else
println("proměnná $a není 10 a je menší než 11");
Poznámka:
|
vnořenou podmínku lze použít pouze s pomocí složených závorek. V následujícím příkladu bude levý sloupec vyhodnocen chybně, pravý správně: |
Chybně |
Správně |
|
if ($a == 10) |
if ($a == 10) { |
vypíše textovou zprávu do výstupu (u MSQLc je to obrazovka, u MSQL výstupní - dolní - okno). Text je "vyčištěn" o netisknutelné znaky (mezery, tanelátory, konce ří¨ásku ...), které nejsou uzavřeny v apostrofech nebo uvozovkách. Za proměnné jsou dosazeny jejich hodnoty, výrazy mezi ${ ... } jsou vyhodnoceny.
Pokud je celý text uzavřen v uvorovkách, netisknutelné znaky nejsou odstraněny a proměnné a výrazy nejsou vyhodnocovány.
syntaxe:
echo ["]
text pro zobrazení ... [$ proměnná] ... text ... [${výraz}]
... ["]
Poznámka:
příkaz echo vyhodnocuje prom ěnné a výrazy stejně, jak by byly vyhodnoceny v SQL příkazu. Proto je příkaz echo vhodný např. pro ladění SQL příkazů např. unvitř cyklů foreach , while ...
vypíší obsah proměnné nebo výsledek výrazu do výstupu. println přidá navíc na konec znak nového řádku.
syntaxe:
print (< proměnná | výraz | $resultset |
memory>)
println (< proměnná výraz |
$resultset | memory>)
|
výraz |
výraz bude vyhodnocen a vypsán jeho výsledek |
|
$resultset |
vypíše obsah resultu se jménem $resultset (včetne prvního řádku se jmény sloupců - pokud tento řádek existuje) |
|
memory |
stejné jako $resultset |
|
proměnná |
jméno proměnné ... |
příklad:
Poznámka:
načte data z externího zdroje (soubor, URL), resultsetu nebo
stringu do databáze. Data mohou být v libovolném formátu (formát s
oddělovači, formát s pevnou délkou, binární formát), sloupce nebo
řádky mohou být odděleny libovolným textem, data mohou být být
kódována v libovolné znakové sadě...
Formát dat a znaková sada se
nastavuje PŘED voláním tohoto příkazu. Formát dat se nastaví příkazem
in.format (pro formát s oddělovači),
in.format.fixed (pro formát s
pevnou délkou věty) nebo in.format.plain
(pro binární formát).
Znaková sada vstupních dat (kódování) se
nastaví příkazem in.convertor .
Varianta se “sync by ( ... )” synchronizuje data v databázu s načítanými daty tak, že se pokusí nejprve provést update načítaných dat podle klíčů a pokud neuspěje, vloží nový záznam.
soivisející:
in.format , in.format.plain , in.convertor , save , append
syntaxe:
load < * | (seznam_sloupců ) >
from < $resultset | memory | jméno_souboru
| URL > into jméno_tabulky [ sync by (
seznam_klicu ) [ noinsert ] ]
load
< (seznam_sloupců ) > from < $resultset
| memory | jméno_souboru | URL > INTO
jméno_tabulky AS SELECT slq_příkaz_SELECT,
$data
Typ dat a názvy jednotlivých sloupců importovaných
dat (t.j. to, jestli text bude dáván při vytvoření SQL příkazu do
apostrofů nebo ne) je dán:
záhlavprvním datového zdroje (pokud v něm jsou datové typy a / nebo názvy uloženy)
prvním řádkem importovaných dat
přímo určen v příkaze LOAD (jméno každého sloupce může být
ukončeno typovým označením”:TXT”, “:NUM”,
které určuje jak má být s daty v tomto sloupci
naloženo
může být pro jednotlivé sloupce explicitně určen příkazem in.style.
Pokud je styl nastaven několika způsoby současně, platí podle tohoto pořadí (nižší číslo = vyšší priorita):
hodnoty přímo uvedené v příkaze load
hodnoty nastavené příkazem in.sytle
hodnoty ze záhlaví zdroje dat
Pokud je použit pžíkaz v kombinaci se selectem ( ... AS SELECT
... ), je pro každý vkládaný řádek nejprve proveden příkaz SELECT
tak, jak je zadáno, přičemž $data a $col1 ..
$colN je nahrazeno hodotami pro aktuální řádek
(načtenými ze vstupního zdroje a zformátovanými podle výše uvedených
pravidel).
Sezna importovaných sloupců ( seznam_sloupců )
musí v tomto případě obsahovat jak slouce použité v příkaz SELECT,
tak sloupce obsažené ve vstupních datech
|
seznam_sloupců |
seznam sloupců SQL dotazu. Sloupce musí být v příkaze load uvedeny ve stejném pořadí, j jakém jsou uloženy v resultsetu nebo importovaném souboru. |
|
memory |
data budou bačítána z globálního paměťového bufferu |
|
$rsultset |
data budou bačítána z resultsetu zadaného jména |
|
jméno_souboru |
data budou bačítána z uvedeného souboru |
|
jméno_tabulky ... |
jméno SQL tabulky do které se budou data načítat. Tabulka musí existovat a musí obsahovat sloupce se jmény v seznam_sloupců; sloupce musí být odpovídajícího datového typu. Pro kopii dat mezi tabulkami i různými databázemi (s případným vytvořením cílové tabulky, pokud neexistuje) lze pozžít příkaz copy . |
|
slq_příkaz_SELECT |
Příkaz SQL, který vrátí jeden řádek dat. Lze použít např. Pro generování číselné řady a pod. |
|
seznam_klicu |
Seznak klíčů (oddělených čárkou), podle kterých bude prováděn update. Názvy klíčů musí být uvedeny v seznamu sloupců pro načítání ( seznam_sloupců ) |
|
noinsert |
při synchronizaci NEBUDOU
vkládány nové záznamy, ale pouze updatovány existující (pokud v
cílové tabulce existují). Pokud klíčové slovo „noinsert“
není uvedeno, systém se pokusí záznamy aktualizovat a pokud
neuspějě, vloží nové. |
Příklad 1:
//
nacte data ze souboru do tabulky “MYTABLE”
load (ID,
JMENO, PRIJMENI, DAT_NAR) from c:\data\mytable.dat
into MYTABLE
Příklad 2:
//
nacte data ze souboru do tabulky “MATABLE”; soubor musí
obsahovat záhlaví
// se seznamem sloupců (byl vytvořen např.
příkazen “save”)
load * from
c:\data\mytable.dat into
MYTABLE
Příklad 3:
//
nacte data ze souboru do tabulky “MYTABLE”, procemz
vygeneruje ID jako nejvyssi
// hodnotu z tabulky zvetsenou o 1.
Predpokladam ze soubor “ c:\data\mytable.dat
”
// obsahuje data pro sloupce “JMENO”,
“PRIJMENI” a “DAT_NAR” (NEobsahuje
“ID”).
load (ID, JMENO, PRIJMENI, DAT_NAR) from
c:\data\mytable.dat
into
MYTABL AS SELECT MAX(ID)+1 AS ID, $data FROM MYTABLE;
Synchronizuje SQL data (data v SQL tabulce) s vnějším zdrojem
(soubor, URL, resultset ..).
Provedení příkazu je obdobné jako
provedení příkazu load.
syntaxe:
sync < * | (seznam_sloupců ) > by
( seznam_klíčů ) from < $resultset | memory
| jméno_souboru > INTO jméno_tabulky
sync
(seznam_sloupců ) by ( seznam_klíčů ) from <
$resultset | memory | jméno_souboru > INTO
jméno_tabulky AS SELECT slq_příkaz_SELECT,
$data
Příkaz synchronizuje data v SQL tabulce s vnějším zdrojem tak, že se nejprve pokusí provést update dat podle klíčů zadaných v sekci seznam_klíčů a pokud tento update není úspěšný, pokusí se data do tabulky vložit
|
seznam_klíčů |
seznam názvů sloupců, které jsou použity jako klíče při update dat. Tyto názvy musí existovat mezi názvy importovaných sloupců (zadanými v příkaze v sekci “ seznam_sloupců ” nebo získanými ze záhlaví zdroje dat); velikost písmen musí být shodná.. |
|
|
|
Ostatní chování příkazu a popis parametrů jsou shodné s příkazem load .
Příklad:
//
synchronizuje data v tabulce “MYTABLE” se souborem
sync
(ID, JMENO, PRIJMENI, DAT_NAR) by(id) from c:\data\mytable.dat
into MYTABLE
poznámka:
Příkaz NIKDY NEMAŽE ŽÁDNÁ DATA. Pokud je
potřeba po synchronizaci vymazat nebo změnit (např. nastavit příznak
“neaktivní”) data, která ve vnějším zdroji nebyla, je
možno vytvořit v tabulce sloupec, do kterého se vloží např. aktuální
čas nebo jiný jednoznačný údaj, který se nevyskytuje v řádcích které
nebyly importována; po synchronizaci se vymažou / nastaví ty řádky,
které mají tento údaj odlišný od importovaného. Např:
sync
(ID, JMENO, PRIJMENI, DAT_NAR, SYNC_COL:${1}) by(id) from
c:\data\mytable.dat into
MYTABLE;
update MYTABLE
set IS_ACTIVE='N', SYNC_COL=0 WHERE SYNC_COL=1;
Provede SQL příkaz a (SQL dotaz nebo volání procedury) jeho výsledek uloží do zadaného objekto - podle varianty příkazu to může být do:
- proměnné (resultsetu)
- souboru s daným formátem (s pevnou
délkou, oddělovači ...) - viz out.format.fixed
, out.format.default ,
out.format.static .
- URL (WWW
stánka ...)
- SQL tabulka (v aktuální nebo jiné databázi –
DSN); ta může být vytvořena pokud neexistuje nebo vymazána pokud
existuje
Příkaz save vždy vyčistí resultset, do kterého bude
ukládat data. Pokud resultset zadaného jména neexistuje, bude
vytvořen. Pokud existuje, bude vyprázdněn. Příkaz má tři varianty
které se liší tím, co a jakám způsobem ukládá.
Při ukládání do
souboru nebo URL lze před provedením příkazu nastavit kódovou stránku
ve které bude výsledek uložen příkazem „out.convertor
a formát výstupních dat příkazem out.format.
Varianta 1: provede SQL příkaz a výsledek uloží do souboru, URL nebo do resultsetu
Syntaxe 1: (příkaz
SELECT)
save [ DISTINCT ] seznam_sloupců
into výstup FROM jméno_tabulky ...
dále_pokračuje_SQL_příkaz [ header | noheader ]
Syntaxe 2: (volání stored
procedury)
save result into < output
| memory | $resultset | jméno_souboru > volání_
SQL_stored_ precedury [ parametry_procedury ]
[ header | noheader ]
přičemž výstup je určuje, kam bude uložen výsledek SQL příkazu:
|
memory |
výsledek bude uložen do globálního bufferu |
|
output |
výsledek bude odeslán na stdandardní výstup (podle interface pod kterým MSQL běží to může být konzola, výsledek HTTP dotazu, výstupní textové okno ...) |
|
$rsultset |
výsledek bude uložen do resultsetu s názvem $rsultset |
|
jméno_souboru |
výsledek bude uložen do textového souboru s názvem jméno_souboru. Bebo URL. Jméno nebo URL může být zadáno přímo jako (může nebo nemusí být v uvozovkách), jako proměnná nebo jako výraz; ten musí být uzavřen v ${ … } |
|
TABLE( |
výsledek bude zkopítován do
tabulky s názven “table”. Pokud chybí
“targetDSN ”, je tabulka v aktuální DSN.
Pokud je “targetDSN” uvedeno - musí
existovat v seznamu DSN - je tabulka v tomto DSN. Přepínače: použití je
volitelné; může být použit jen jeden |
Ostatní parametry mají význam:
|
seznam_sloupců |
seznam sloupců SQL dotazu (může přdcházet DISTINCT") |
|
result |
Ornačuje že jde o volání stored procedury a že tedy za „into“ nenásleduje FROM … ale přímo volání procedury v sytnaxi databázového stroje a dále případné parametry. |
|
jméno_tabulky ... |
jméno SQL tabulky (tabulek) ze kterých bude proveden select. Dále pokračuje SQL dotaz (WHERE, ORDER |
|
noheader |
pouze pokud se ukládá do
souboru |
|
header |
pouze pokud se ukládá do
souboru |
|
|
|
příklad:
save
(ID, JMENO, PRIJMENI, DAT_NAR) into $clovekInfo FROM CLOVEK_DATA
WHERE PRIJMENI LIKE 'Novák%'
save result into
~/vysledekProcedury.txt call mojeProcedura
;
Varianta 2: uloží obsah resultsetu nebo výstupního okna do textového souboru. V případě resultsetu bude soubor mít CSV formát, texty budou v apostrofech.
syntaxe:
save < $resultset
| memory | output > into < jméno_souboru >
|
$resultset |
jméno resultsetu, který bude uložen |
|
Memory |
bude uložen globální paměťový buffer |
|
Output |
bude uloženo okno výstupních textů (nebo texty od posledního smazaní u komandline variantz) |
příklad:
save $clovekInfo into c:\data\clovekInfo.txt
Varianta 3: uloží jeden řádek (konstantní hodnotu) do resultsetu. Text (proměnné, výrazy a speciální znaky) je před vložením zpracován jako v příkaze echo. Vkládaný řádek je vyčištěn od všech mezer, které nejsou uvnitř apostrofů nebo uvozovek.
syntaxe:
save ["] text
pro zobrazení ... [$proměnná ] ... text ... [${výraz}]
... ["] into < $resultset >
příklad:
save 10, 'Novák', 'František', '21.11.1973' into $clovekInfo
Poznámka:
stejná syntaxe, varianty i zpracování jako příkaz save s tím zozdílem, že pokud resultset nebo soubor již existuje, není přepsán ale je doplněn o vkládané záznamy.
Při vkládání do resultsetu nebo do souboru, který bude později jako resultset zpracováván, musí mít vkládané záznamy stejnou strukturu jako ty záznamy, které již v resultsetu / souboru jsou (jinak by při jeho dalším zpracování vznikla chyba). V principu lze ale přidat cokoli.
Příkaz append implicitně nevkládá záhlaví s informacemi o sloupcích, to však lze změnit pro každý jednotlivý příkaz pomocí direktivy "header" na konci příkazu.
ukončí provádění cyklu
syntaxe:
berak
ukončí provádění celého skriptu (programu) i všech, ze kterých byl spuštěn.
syntaxe:
exit [návratová_hodnota ]
exit (
návratová_hodnota )
ukončí provádění vnořenho (vyvolaného) skriptu nebo procedury a vrátí řízení do místa, odkud byla procedura nebo skript zavolána. Může předat hodnotu, která bude vrácena volajícímu.
syntaxe:
return [návratová_hodnota]
return
( návratová_hodnota )
zapne / vypne vypisování zpráv bo výst. okna
syntaxe:
messages <on | off | off all | sql | final >
|
On |
Bude vypisovat všechny zprávy (vhodné pro ladění). |
|
Off |
Nevypisuje žádné zprávy kromě chybových |
|
Sql |
bude vypisovat pouze zprávy o provádění SQL příkazy a chyby. |
|
Final |
Vypisuje pouze chybové zprávy a zprávu “> Done.” na konci skriptu. |
Poznámka:
Tento příkaz neovlivní vypisování chybových zpráv. To lze učinit příkazem " sql.error.display" (chyby syntaxe skriptů jsou vypisovány vždy a nelze je zakázat).
Skupina příkazů pro nastavení parametrů vstupů (použijí se při
příkazech load, foreach,
sync).
Většina těchto příkazů platí pro jeden (první následující)
příkaz load nebo foreach, který následuje po jejich volání. Po
provedení příkazu jsou nastavení vynulována (nebo nastavena na
default hodnoty). Pokud je potřena použít stejná nastavení pro váce
vstupů, je nutné volat příkazy před každám vstupem znovu (např. při
vnořených cyklech „foreach“, pokud je ve vnitřním cyklu
použit některý z těchto příkazů).
nastaví konvertor, kterým budou konvertová na data při importu z disku (příkaz load , foreach).
související:
in.convertor.default , in.convertor.static , out.convertor
syntaxe:
in.convertor(< jménoKonvertoru >
). Popis viz out.convertor
viz out.convertor.default – ale platí pro vstup
viz out.convertor.static – ale platí pro vstup
nastaví styl sloupců pro následující import příkazem load . Nastavení stylu lze použít pouze po předchozím nastavení formátu příkazem in.format . Syntaxe a vlastnosti příkazu jsou stejné jako při nastavení stylu výstupu - viz out.style .
nastaví výchozí hodnotu pro počítání záznamů. Po volání tohoto
příkazu bude directiva ":COUNTER" v nastavení
formátu nebo systémoová proměnná $rownum při příkazech load
, forech ... vracet aktuální číslo záznamu
zvětšené o tuto hodnotu.
Po provedení kteréhokoli I / O příkazu (
load , save , append ,
foreach ) je tato hodnota vynulována.
syntaxe:
in.counter(výchozí_hodnota)
nastaví formát dat pro následující import pro vstupní soubor typu
CSV. Popis viz out.format .
Vstupní
soubor předpokládá jako textový soubor s oddělovači.
Nastavení formátu vstupních dat pro následující import ze souboru s pevnou délkou věty. Tento formát bude použit při následujícím příkaze load ... Předpokládá se, že data budou čtena z textového souboru s pevnou délkou věty a každý záznam bude na samostatném řádku ukončeném znakem CR, LF nebo dvojicí CR - LF,
Formát může ukazovat na absolutní pozice na řádku souboru, nebo může být nastaven přírůstkově (vždy počet znaků od předchozího konce) - viz syntaxe.
související:
in.format.plain
, out.format , in.convertor
syntaxe:
in.format(formátovací_string [,
první_záznam[, počet_záznamů]]);
formátovací_string je string (textová proměnná nebo text v uvozovkách / apostrofech) popisující formát importovaného souboru. Skládá se z popisu jednotlivých sloupců (tokenů):
token [ ; token [ ;
token [ ... ] ] ]
POZOR !!! Oddělovačem tokenů ve formátovacím stringu je STŘEDNÍK !!!
kde token je část dat z právě
importovaného řádku souboru, má hodnotu zadaného typu která vzniklne
zpracováním znaků od začátku tokenu (od jeho první pozice) do konce
tokenu (podle jeho definice).
Token může mít některý z
následujících tvarů:
|
|
pozice_od-pozice_do[:jménoSloupce]:TYP_DAT |
|
|
|
|
text v zadaném rozmezí pozic (první znak na řádku má pozici 1) jako hodnotu daného typu |
|
nebo |
pozice_od-*[:jménoSloupce]:TYP_DAT |
|
|
|
|
text od zadané pozice do konce řádku jako hodnotu daného typu |
|
nebo |
počet_znaků[:jménoSloupce]:TYP_DAT |
|
|
|
|
zadaný počet znaků od posledního znaku předchozího tokenu jako hodnotu daného typu |
|
nebo |
*[:jménoSloupce]:TYP_DAT |
|
|
|
|
vše do konce řádku od posledního znaku předchozího tokenu jako hodnotu daného typu |
|
nebo |
* |
vše do konce řádku od posledního znaku předchozího tokenu jako text, který NENÍ v apostrofech (může být použit pro další "ruční" zpracování např. pomocí foreach ) |
|
nebo |
COUNTER |
jako tento token vrátí číslo právě importovaného řádku (první řádek má číslo 1) |
|
nebo |
${ výraz } |
výraz bude vyhodnocen
a jako hodnota pro sloupec bude použit jeho výsledek. Neodkazuje
se na vstupní data (vstupní data pro tento výraz nejsou
definována). Proměnné “$_token” má hodnotu podle
posledních dat načtených ze vstupního zdroje (obvykle předchozí
zpracovaný cloupec). |
jménoSloupce
pokud je zadáno, bude sloupce vystupovat pod tímto jménem (i v případě, že v datovém zdrojï jsou obsaženy i názvy sloupců).
TYP_DAT v předchozí tabulce může být
|
NUM |
tento token bude vracen jako numerická hodnota |
|
TXT |
tento token bude vracen jako text (je uvozen apostrofy) |
|
EXPR(výraz) |
výraz bude vyhodnocen
a bude vrácena jeho hodnota. Typ dat je určen vrácenou
hodnotou. |
|
** INT1, INT2 , INT4, INT8 |
Varianty integer čísla reprezentovaného zadanám počtem bytů (nejvyšší byte .... nejnižší byte) |
|
** RINT1, RINT2 , RINT4, RINT8 |
Varianty integer čísla reprezentovaného zadanám počtem bytů (nejnižší byte ... nejvyšší byte) |
|
** FLOAT4, FLOAT8 |
FLOAT číslo v IEEE formátu (4 nebo 8 bytů) |
** Tyto formáty jsou k dispozici pouze u příkazu in.format.fixed
příklad 1:
in.format.fixed("1-5:TXT;6-8:NUM,9-10:NUM;COUNTER;45-*:EXPR(substring($_token, 1, 10))");
příklad 2:
Nastaví stejný formát jako příklad 1 ale
jiným způsobem.
in.format.fixed ("1-5:TXT;4:NUM;2:NUM,COUNTER;*:EXPR(substring($_token, 1, 10))");
Poznámka:
POZOR !!! Oddělovačem tokenů ve
formátovacím stringu je STŘEDNÍK !!!
Nastavení formátu se
RUŠÍ po provede ní příkazu load .. - t.j. pokud
potřebuji importovat více souborů se stejným formátem, musím příkaz
in.format použít před každým importem znovu.
Roršířené nastavení vstupního formátu pro import. Nastaví formát
vstupních dat pro následující import příkazem load
(podobně jako in.format..). S pomocí tohoto příkazu lze importovat
libovolné soubory se známou strukturou a pevnou délkou záznamu -
včetně binárních (např. DBF ... - i když na DBF je lepší nástroj).
Takto nastavený formát bude použit při následujícím příkazu load
a pak bude formát zrušen (stejně jako u in.format
).
související:
in.format ,
in.format.fixed , out.format
, in.convertor
syntaxe:
in.format.plain(formátovací_string,
délka_záznamu [, pozice_od [, počet_záznamů]]);
|
formátovací_string |
Textový výraz nebo string, který popisuje formát jedné věty importovaného souboru (věta má délku délka_záznamu znaků). Popis formátovacího stringu viz formátovací string. příkazu in.format.plain. |
|
délka_záznamu |
Počet bytů záznamu |
|
pozice_od |
Pozice prvního bytu, na které bude začínat import. Všechny byty
předtím budou přeskočeny. |
|
počet_záznamů |
Počet záznamu (každý o délce délka_záznamu bytů) které
budou importovány. Pokud má soubor více záznamů, ostatní budou
ignorovány. |
příklad:
in.format.plain("1-5:TXT,6-8:NUM,9-10:NUM,COUNTER,45-*:EXPR($_token.substring(1, 10))", 64, 650, 10);
Poznámka:
Nastavení formátu se RUŠÍ po provedení příkazu
load .. - t.j. pokud potřebuji importovat více
souborů se stejným formátem, musím příkaz in.format.plain použít před
kažbým importem znovu.
nastaví hodnotu pro sloupce, jejichž hodnota při načítáni by byla NULL. Tato (nastavená) hodnota bude vracena místo NULL.
syntaxe:
in.null ( text_pro_NULL )
Varianty:
in.null.default,
nastaví null hodnotu pro všechny
vstupy od místa volání do konce skriptu.
in.null.static
nastaví null hodnotu pro všechny
vstupy od místa volání do konce skriptu a pro nově vzniklé instance
interpreteru
nastaví počet ŘÁDKŮ (záznamů), které budou přeskočeny na začátku importu.
Řádky jsou nejprve načteny s pomocí nastaveného formátování, formátu stránky atd .... Kompletně připravené řádky, které by byly již byly zpracovány jako SQL příkaz, jsou pak teprve přeskočeny.
syntaxe:
in.skip ( pocet_řádků )
nastaví podmínku, která bude vyhodnocena pro každý řádek načtených dat . Pokud bude výsledek podmínky „true“, budou data použita. Pokud bude výsledek „false“, bude řádek ignorován (přeskočen).
Podmínka je vyhodnocena těsně před zformulováním SQL příkazu (až po případném přeskočení řádků nastavených pomocí in.skip(...) ),
V podmínce jsou k dispozici hodnoty sloupců z právě
načítaného řádku jako proměnné, které NEZAČÍNAJÍ !!! znakem
„$“ a všechny ostatní proměnné a funkce MSQL
tak, jak jsou nastaveny v okamžuku vyhodnocení podmínky (zdroj dat
musí obsahovat názvy sloupců, nebo musí být názvy sloupců zadány
např. jako součíst formátu nebo příkazem „“).
syntaxe:
in.condition (
textový_výraz_s_podmínkou_pro_filtr_dat )
příklad:
provede update sloupce „DDP“ v tabulce „HVLP_C“ podle dat
ze souboru „Q:/data/Aislp/latin/KL.DAT“, pokud
hodnota sloupce „DDP“ v načítaných datech není NULL (t.j.
pokud sloupec „DDP“ má hodnotu).
Soubor KL.DAT je
binární soubor s pevnou délkou věty; formát dat v tomto souboru
je popsán řádkem „in.format.plain(...)“.
in.format.plain("1-5:KOD:TXT;31:NAZEV:TXT;113-120:DDP:NUM", 177, 177);
in.condition("DDP <> NULL");
load (DDP, KOD) FROM "Q:/data/Aislp/latin/KL.DAT" INTO HVLP_C SYNC BY (KOD) NOINSERT;
nastaví styl (a případně názvy) sloupců ve vstupních datech. Příkaz lze použít
pro změnu datových typů nebo názvů sloupců na jiné, než jaké jsou v datovém zdroji
pro zadání datových typů a názvů sloupců, pokud v datovém zdroji nejsou uvedeny
syntaxe:
in.style ( formátovací_string )
formátovací_string představuje textový výraz s popisem stylů a názvů. Má tvar:
|
|
[jménoSloupce:]TYP_DAT |
kde TYP_DAT je stejný jako typ dat u příkazu in.format.fixed. a jménoSloupce (pokud je uvedeno) udává jméno, pod kterým bude sloupec vystupovat v načítaných datech (a to i v pžípadě, že jména sloupců jsou ve vstupních datech uvedena)
(viz formátovací string u příkazu „in.format.fixed“).
skupina příkazů nastavuje podmínky, za kterých se budou provádět SQL příkazy
sql.error , sql.error.exit , sql.error.display , sql.error.max , sql.isError , sql.setError , sql_timeout , sql.rows.max , sql.select , sql.execute, sql.getString, sql.getRow
zakáže / povolí ukončení provádění skriptu po chybě a zároveň vypisování chybových zpráv při zpracování SQL příkazu. Tento příkaz je kombinace volání sql_error_exit (...) a sql.error.display (...).
syntaxe:
sql.error (< false | true > )
|
false |
při vzniku SQL chyby se
nevypíše chybová zpráva a skript bude pokračovat bez
upozornění (proměnná sql.isError ale bude nastavena)
|
|
True |
při vzniku chyby při zpacování SQL příkazů se vypíše chybová zpráva (pokud to není zakázáno pomocí sql.error.display(false) ) a skript bude ukončen. |
zakáže / povolí ukončení provádění skriptu po chybě při zpracování SQL příkazu. Defaulně je nastaveno na true (=>skript končí po SQL chybě).
syntaxe:
sql.error.exit (< false | true > )
|
false |
při SQL chybě se vypíše chybová zpráva (pokud to není zakázáno pomocí sql.error.display(false) ) a skript bude pokračovat |
|
true |
skript bude končit po chybě, která vznikne při provádění SQL příkazu |
Poznámka:
Příkaz sql.error.exit vynuluje příznak
SQL chyby. Pokud je potřeba zachovat informaci o tom, že v části
skriptu ve které bylo zakázáíno ukončení po SQL chybě tato chyba
nastala, je nutné použít pomocnou proměnnou do které se stav příznaku
uloží ještě před voláním příkazu sql.error.exit ; např. takto:
$stavChyby
= sql.isError
;
....
sql.setError($stavChyby);
zakáže / povolí vypisování chybových zpráv zzniklých přu
zpracování SQL příkazů. Text těchto chybových zpráv vytváří
databázový stroj, který příkaz zpracovává. Proto tyto zprávy nejsou
jednotné.
Default hodnota je true (vypisování zpráv je povoleno).
syntaxe:
sql.error.display ( < false | true
> )
|
false |
vypisování chybových zpráv vzniklých při zpracování SQL je zakázáno |
|
true |
vypisování zpráv je povoleno (default) |
Poznámka:
Nastaví maximální počet SQL chyb, které ještě program ignoruje při importech (příkazem load ). Po překročení tohoto počtu chyb import zkončí.
syntaxe:
sql.error.max ( číslo )
Default hodnota: 0 (=> import končí po první SQL chybě)
Poznámka:
Hodnota je po každém provedeném importu
příkazem load znovu nastavena na nulu.
vrátí stav příznaku SQL chyby jako logickou hodnotu.
syntaxe:
sql.isError
nastaví příznak SQL chyby. Systém se bude chovat, jakoby nastala SQL chyba (kromě případného ukončení skriptu; běžící skript se voláním příkazu sql.setError neukončí)
syntaxe:
sql.setError ( < false | true
> )
nastaví tomeout, po kterém bude ukončen SQL příkaz, pokud do zadaného času nezkončil sám
syntaxe:
sql.timeout ( doba_v_sekundách )
Default hodnota: 60 sec
Poznámka:
Tento parametr funguje jenom s některými
databázemi (příkaz je odeslán před zpracováním SQL příkazu databázi,
nekteré databáze jej však ignorují - nutno vyzkoušet).
Nastaví maximílní počet vracených záznamů na hodnotu.
syntaxe:
sql.rows.max ( hodnota )
Provede SQL příkaz SELECT podle parametru v vrátí první sloupec prvního řádku jako textovou proměnnou.
syntaxe:
sql.select (
příkaz_select_bez_klíčového_slova_SELECT [ , DSN_pro_příkaz]
)
Pokud je " DSN_pro_příkaz" zadáno, bude použito
tot DSN (pokud existuje) bez ohledu na aktuální DSN
provede SQL příkaz (jakýkoli příkaz včetně volání stored procedur) a vrátí resultset s výsledkem jako proměnnou.
syntaxe:
sql.execute( SQL_příkaz [
, DSN_pro_příkaz ] )
Pokud je " DSN_pro_příkaz"
zadáno, bude použito tot DSN (pokud existuje) bez ohledu na aktuální
DSN
poznámka:
tento příkaz nikdy nevrací chybu. Pokud nemůže
být SQL příkaz zpracován nebo vrácen výsledek, je výsledkem tohoto
příkazu prázdný resultset. Stav chyby lze zjistit pomocí proměnné
$sqlResult nebo funkce sql.isError
.
Provede SQL příkaz podle prvního parametru v vrátí první řádek výsledku tohoto SQL příkazu jako resultset o jednom sloupci (provede jakoby "transpozici" prvního řádku výsledku do jednoho sloupce resultsetu). Všechny proměnné vraceného resultsetu budou typu text BEZ apostrofů.
poznámka:
tento příkaz nikdy nevrací chybu. Pokud nemůže
být SQL příkaz zpracován nebo vrácen výsledek, je výsledkem tohoto
příkazu prázdný resultset. Stav chyby lze zjistit pomocí proměnné
$_sqlResult nebo funkce sql.isError
.
syntaxe:
sql.getRow( příkaz_SQL_vracelící_resultset [
, DSN_pro_příkaz] )
Pokud je " DSN_pro_příkaz"
zadáno, bude použito tot DSN (pokud existuje) bez ohledu na aktuální
DSN
Provede SQL příkaz podle parametru v vrátí první položku výsledku (první sloupec prvního řádku) jako textovou proměnnou.
syntaxe:
sql.getString(
příkaz_select_bez_klíčového_slova_SELECT [ , DSN_pro_příkaz]
)
Pokud je " DSN_pro_příkaz" zadáno, bude použito
tot DSN (pokud existuje) bez ohledu na aktuální DSN
poznámka:
tento příkaz nikdy nevrací chybu. Pokud nemůže
být SQL příkaz zpracován nebo vrácen výsledek, je výsledkem tohoto
příkazu prázdný string. Stav chyby lze zjistit pomocí proměnné
$_sqlResult nebo funkce sql.isError
.
Skupina příkazů pro práci s datovými zdroji.
nastaví DSN zadaného jména pro další práci s daty.
Od tohoto
místa v programu až do další změny DSN (dalšího volání dsn.select (
... ) ) budou SQL příkazy zasílány ke zpracování databázi, která je
pod tímto DSN zaregistrována. Příkaz má dvě varianty:
Pokud je použit druhý parametr (false / true), nenastavuje se DSN ue seznamu dostupných DSN, ale přímo z ODBC (pouze pro Windows nebo ty systémy, kde existuje ODBC)
Varianta 1:
nastaví DSN ze seznamu DSN zaregistrovaných v aktuální DSN (t.j. té, která je aktivní v okamžiku startu systému - proti které se také ověřují data uživatele; aktuální DSN může být změněna příkazem dsn.load )
syntaxe:
dsn.select
(<jméno_DSN | $default > [, < false |
true > ] )
|
jméno_DSN |
jméno datového zdroje, které bude nastaveno. Musí existovat v seznamu DSN v default databázi a přihlášený uživatel k němu musí mít přístup. |
|
$default |
nastaví DSN, které bylo aktivní v okamžuku startu systému (ke kterému byl autentifikován právě přihlášený uživatel) |
Varianta 2:
nastaví DSN přímo ze seznamu ODBC zdrojů (t. j. tato DSN nemusí být registrována v databázích aktuální DSN). Druhý parametr (false nebo true) určuje, jestli se bude k databázi přistupovat přímo na stanici klienta nebo přes server (v tomto případě musí tato databáze být registrována v ODBC zdrojích serveru, ke kterému se klient připojuje.)
syntaxe:
dsn.select
(jméno_ODBC, < false | true > )
|
jméno_ODBC |
jméno v seznamu ODBC zdrojeů, které bude nastaveno. Musí existovat v seznamu ODBC na stanici nebo serveru (podle druhého parametru) a musí být nastaveno tak, aby pro připojení nevyžadovalo jméno a heslo. |
|
false |
k ODBC zdroji se přistupuje přes aplikační server => musí být v seznamu ODBC na tomto serveru |
|
true |
k ODBC zdroji se přistupuje přímo na klientské stanici => toto jméno musí být v seznamu ODBC na této stanici (t. j. na té, na které právě běží MSQL) |
příklad:
viz příklad k příkazu dsn.load
Poznámka:
uzavře spojení s databází; v případě některých ODBC databází (EXCEL, ACCESS, FOXPRO, DBF...) je tím uvolní pro používání jinými programy.
syntaxe:
dsn.close
Poznámka:
Příkaz lze použít pouze pro databáze, ke kterým se pripojoje klientská stanice přímo (v definici DSN mají nastaveno "Direct connection" na "Yes") nebo to jsou přímo připojené ODBC zdroje (nastaveny příkazem dsn.select (jmeno_DSN, true) ; )
nastaví zadanou DSN jako aktuální.
Všechna další jména
datových zdrojů (DSN) (a tedy všechny informace potřebné pro
přihlašování k databázím - jména, hesla, URL a typy databází ...)
budou brána z této (nově nastavené) DSN
syntaxe:
dsn.load (jméno_DSN | $default)
|
jméno_DSN |
jméno DSN, která bude nastavena jako default. Jméno musí existovat (musí být zaregistrováno) v seznamu DSN, který je právě aktivní. a musí to být systémové DSN (musí obsahovat systémové tabulky se seznamem DSN, uživatelů ...) |
|
$default |
znovu nastaví jako aktuální tu DSN, která byla aktivní při startu systému |
Příklad:
Předpokládejme že systém byl spuštěn s aktuální DSN s názvem DSN1,
které ukazuje na databázi v ACCESSU (připojenou přes ODBC). Je to
systémová databáze a jsou v ní dále zaregistrovány DSN DATAB1
(ukazuje na databázi v postgresu) a DATAB2 (ukazuje na
databázi v SYBASE11).
Databáze DATAB2 je rovněž systémová (=>
obsahuje systémové tabulky se seznamem dalších DSN, uživatelů ... a
proto ji lze použít v příkaze dsn.load) a obsahuje tyto DSN: MYDATA
(soubor c:\data\mydata.mdb - typ ACCESS přes ODBC) a SYBDATA
(sybase).
Po startu systému budou dostupné databáze zaregistované v DSN1, tedy samotná DSN1, dále DATAB1 a DATAB2. Budu moci provést např.
//
vybere DSN "DATAB1" pro dalsi praci
dsn.select(DATAB1);
// dale vlozi jeden radek do tabulky
"TABULKA_Z_DATAB1" (tato tabulka musi existovat v
//
databázi, která je pod jmenem "DATAB1" definována - zde je
to postgres)
INSERT INTO TABULKA_Z_DATAB1
(SLOUPEC1, SLOUPEC2 ...) VALUES (hodnota1, hodnota2 ...);
//
zmenim databazi, kterou budu dale pouzivat pro SQL prikazy na
"DATAB2" (sybase)
dsn.select(DATAB2);
// ulozim neco z teto databaze do rsultsetu
....
save * into $myRes from TABULKA_Z_DATAB2 ;
Poté provedu příkaz
dsn.load(DATAB2);
a od tohoto okamžiku již nejsou dostupné databáze registrované v DSN1 (t. j. DSN1, DATAB1 a DATAB2); tedy pokus o některý z příkazů
dsn.select(DATAB1);
dsn.select(DSN1);
zkončí chybou. Budou ale přístupné databáze registrované pod DATAB2, t. j.
dsn.select(MYDATA);
proběhne správně a od tohoto okamžiku budu moci provádět SQL dotazy dat daty z tabulek v MYDATA (v souboru MSACCESS - t. j. v souboru c:\data\mydata.mdb)
Příkazem
dsn.load($default);
nastavím jako aktuální opět tu DSN, se kterou systém startoval (v tomto příkladě DSN1) a dále budu moci pracovat s daty v databázích DSN1,DATAB1, DATAB2.
Poznámka:
pro změnu aktuální DSN je nutné, by uživatel, který je právě přihlášen, měl účet se stejným heslem v cílové DSN (t.j. té, která má být nastavena). Pokud ne, bude v grafickém interface vyzván k přihlášení, ostatní (commandline, servlet atd) zahlásí chybu.
Nastaví "connected string" (speciální parametry, předávané databázi). Příkaz je nutné volat po změně DSN (voláním dsn.select (), ), pro které tyto parametry mají platit., ale před prvním přístupem k datů pro která má tato nastavení platit.
syntaxe:
dsn.params ( text )
text = text, který bude předán ovladači databáze jako speciální parametr
Poznámka:
speciélní parametry jsou závislé na konkrétní
použité databázi. Jestli jsou potřebné a jaké mají názvy a hodnoty je
nutné zjistit v dokumentaci k příslušnému ovladači (JDBC driveru),
který databáze používá.
Vypíše informace zvoleného druhu o aktuální DSN.
syntaxe:
dsn.list( typ_informace [, katalog
] )
kde typ_informace le některé z těchto klíčových slov
(zadává se bez uvozovek nebo apostrofů):
|
TABLES |
vypíše seznam tabulek, které jsou přístupné ve zvolené DSN |
|
VIEWS |
vypíše seznam view |
|
SYSTEMTABLES |
seznam systémových tabulek databáze |
|
DATA |
všechny typy, které vracejí data |
|
ALL |
všechny dostupné informace |
|
CATALOGS |
seznam katalogů (databází) známých v tomto DSN |
a katalog (volitelně) je textová proměnná nebo výraz, určující katalog ze kterého bude požadovaný výpis proveden. Pokud není zadán, je proveden výpis z aktuálního katalogu (obvykle databýze, která je specifikována v jdbc suffixu)
Skupina příkazů nastaví parametry výstupů (použijí se při příkazech save , append )
nastaví konvertor, kterým budou konvertována data při exportu na disk (příkaz save , append )
související:
out.convertor.default
, out.convertor.static ,
in.convertor
syntaxe:
out.convertor(< jménoKonvertoru >
)
kde jménoKonvertoru je některé z následujících (musí být
zadáno přesně včetně malých / velkých písmen)
|
jménoKonvertoru |
jak konvertuje |
|
Latin2 |
iso 8859-2 (Latin 2 - kódová stránka ) |
|
W1250 |
Windows - kódová stránka 1250 |
|
Unicode |
všechny znaky a kódem > 127 budou kódovány jako text ve tvaru \uXXXX, kde XXXX je kód znaku |
|
NoConvert |
neprovádí konverzi - obvykle vede k nedefinovaným výsledkům |
|
BezDiakr |
odstraní diakritiku |
|
iso88592 |
znaky kóduje v iso88592 |
|
iso88592mime |
znaky kóduje v iso88592 MIME stylem |
|
Base64 |
|
|
|
|
Poznámka:
Konverze vstupních souborů do editoru MSQL by
měla probíhat automaticky podle platformy, na které je MSQL spuštěno.
Nastaví konvertor, který bude používán pro všechny výstupy (příkazy save , append ) od místa nastavení do konce běhu skriptu. Parametry viz out.convertor .
Nastaví konvertor, který bude používán pro všechny výstupy (příkazy save , append ) od místa nastavení do konce běhu skriptu a pro všechny nové instance příkazového interpretu. Lze volat i v instanci vytvořené staticky (mapř. inicializace ..). Parametry a detailní popis viz out.convertor .
nastaví informaci o tom, které sloupce SQL dotazu (bezprostředně následujícího po volání této funkce) budou ořezány z obou stran o mezery a netisknutelné znaky (nové řádky, tabelátory ...).
související:
out.trim.default
,
syntaxe:
out.trim (hodnota [, hodnota [,
hodnota] ... ] )
|
hodnota |
true => sloupec na pozici, na které je tato hodnota BUDE ořezán false => sloupec na pozici, na kt eré je tato hodnota NEBUDE ořezán |
Poznámka:
Počet hodnot předávaných příkazu musí být
stejný jako bude počet sloupců v následujícím SQL dotaze; jinak
nebude toto nastavení použito.
povolí / vypne čištění záznamů (vracených SQL příkazy) o mezery na začátku a na konci textu (pro všechny typy záznamů - text, numerické ...)
syntaxe:
out.trim.default (< false | true
>)
|
true |
záznamy budou ořezávány o počáteční a koncové mezery |
|
false |
záznamy nebudou ořezávány o počáteční a koncové mezery |
Nastaví styl sloupců pro následující export příkazem save
, append provedeného SQL příkazem.
Styl
určuje, jestli bude údaj vkládán jako text (=> bude uvozen
uvozovačem textu specifikovaným v nastavení formátu), nebo jako číslo
=> vždy bez uvození. Nastavení stylu má vyšší prioritu než údaje o
typu sloupců z databáze. Příkaz má smysl tam, kde např. datanáze není
schopná vrátit informace o typu datových polí (MS SQL při voláná
stored procedur a pod.). Počet sloupců v příkaze nesmí být menší než
počer sloupců výsledku SQL příkazu, může být větší => zbytek je
ignorován. Nastavení stylu sloupců je zrušeno provedením exportu.
Nastavení stylů je zrušeno rovněž nastavením formátu příkazem
out.format => nejprve je nutné nastavit
formát a potom styly sloupců.
Jiný způsob změny stylu sloupce pro export je přípona :TXT nebo :NUM za jménen sloupce v příkaze save , append .
související:
out.format
syntaxe:
out.style( [styl_sloupce_1 [ ,
styl_sloupce_2 [ .... , styl_sloupce_n ] ] ] )
kde
styl_sloupce_1 až styl_sloupce_n je:
|
TXT |
textový údaj; bude vložen do apostrofů (nebo do testu z příkazu "out.format") |
|
NUM |
numerický údaj; bude vložen tak jak je vrácen DB strojem. (=> nebude v apostrofech) |
Nastaví formát exportu pro následující operaci "save" nebo "append". Příkaz má dvě varianty, které určuje první parametr. Pokud je to text v uvozovkách nebo apostrofech, jde o variantu a), pokud je to číslo, jde o variantu b) (viz out.format.fixed ). Nastavením formátu bude zrušeno případné nastaení stylu sloupců (viz out.style )
související:
out.format.fixed
, out.format.default ,
out.format.static , in.format
syntaxe:
out.format([oddělovač] [ ,
uvoz_txt [ , konec_řádku [, začátek_řádku [,
závěr [, úvod [, null_hodnota [ ,
text_za_položkou [ , text_před_položkou ] ] ] ] ] ] ] ]
[, záhlaví_sloupců ])
Nastaví formát s oddělovači popsaný dalšími parametry.
Parametry (kromě posledního - záhlaví_sloupců ) jsou texty uzavřené v uvozovkách nebo apostrofech, řídící znaky (\r, \n, \t, \uxxxx ..) se převádí na hodnoty.
První parametr (oddělovač ) je povinný, ostatní nepovinné. Pokud má mít některý parametr default hodnotu ale následující má být nastaven, na jeho místě parametru s default hodnotou se použije pouze čárka bez textu (pro tento chybějící parametr bude použita jeho default hodnota).
|
oddělovač |
oddělovač jednotlivých sloupců Default hodnota = čárka. |
|
uvoz_txt |
Znak (nebo string), kterým budou uvozeny textové informace (bude vložen na začátek a na konec všech textů). Nesmí se vyskytnout uvnitř textu (vyjímkou jsou apostrof a uvozovka - ty ale musí předcházet znak '\'). Může být nastaven i na prázdný string => texty nebudou ničím uvozeny. default hodnota = apostrof. |
|
konec_řádku |
Oddělovač záznamů. |
|
začátek_řádku |
text, který bude vložen na začátek každého řádku. Default hodnota = prázdný text. |
|
úvod |
Text, který bude zapsán do
výstupního souboru na jeho úvod (před vlastní data). |
|
závěr |
Text, který bude zapsán do
výstupního souboru na jeho konec (za poslední řádek dat). |
|
null_hodnota |
text, kterým bude nahrazena hodnota "NULL" z databáze. Default hodnota = mezera. |
|
text_před_položkou |
pokud je nastaven ,dává se tento text před každou položku (za oddělovač záznamů) Default hodnota = nic |
|
text_za_položkou |
pokud je nastaven ,dává se tento text za každou položku (před následující oddělovač záznamů nebo konec řádku) Default hodnota = nic |
|
záhlaví_sloupců |
false nebo true; pokud je true, za úvod se přidají jména sloupců z příkazu SELECT. Default hodnota = false (jména sloupců se nepřidávají) |
Příklad 1:
nastaví oddělovač na středník, konec řádku na
"CR-LF" (pro Windows soubory) a konec textu na ASCII
hodnotu 1B (hex). Ostatní bud edefault.
out.format(";", , "\r\n", , "\u001B");
Příklad 2:
nastaví oddělovač na středník, a do záklaví
vloží názvy slopců; ostatní bude default
out.format(";", true);
Příklad 3:
nastaví oddělovač na středník, ostatní
bude default
out.format(";");
Varianty:
out.format.default
Nastaví
default formát exportu, který bude používán pro všechny exporty od
místa volání do konce skriptu.
out.format.static
Nastaví default formát exportu, který
bude používán pro všechny exporty do konce skriptu a pro nově
vzniklé instance interpreteru. Lze volat i ze statické instance
(např. v inicializaci …)
Nastaví formát s pevnou délkou věty pro vásledující export. Příkaz out.format.fixed je synonymum pro příkaz out.format , který začíná číslem - varianta b) .
syntaxe:
out.format( dékla_sloupce_1 [ ,
délka_sloupce_2 [ , délka_sloupce_3 [ ... [ ,
délka_sloupce_n ] ] ] ] [ , oddělovač [ , výplň_čísel
[ , výplň_textu] ] ] )
Nastaví formát s pevnou délkou věty.
|
dékla_sloupce_1 až dékla_sloupce_n |
Čísla , která určují počet znaků v každém exportovaném sloupci. Parametrů musí být nejméně tolik, kolik bude sloupců v následujícím příkazech save , append , jinak vznikne při dalším zpracování chyba. |
|
Konec_řádku |
Oddělovač záznamů. Default hodnota = konec řádku - znak LF (ASCII hodnota 0D) |
|
Výplň_čísel |
Znak, který bude vkládán při doplnění čísel na požadovanou délku Text (v apostrofech nebo uvozovkách), jehož první znak bude použit pro doplnění numerických hodnot (zleva) na požadovanou délku Default hodnota = mezera |
|
Výplň_textu |
Znak, který bude vkládán při doplnění textů na požadovanou délku Text (v apostrofech nebo uvozovkách), jehož první znak bude použit pro doplnění textových hodnot (zprava) na požadovanou délku Default hodnota = mezera |
|
null_hodnota |
Text (v apostrofech nebo uvozovkách), kterým bude nahrazena hodnota "NULL" z databáze. Default hodnota = mezera. |
|
Úvod |
Text (v apostrofech nebo
uvozovkách), který bude zapsán do výstupního souboru na jeho úvod
(před vlastní data). |
|
Závěr |
Text (v apostrofech nebo
uvozovkách), který bude zapsán do výstupního souboru na jeho konec
(za poslední řádek dat). |
Default hodnota:
formát s oddělovači nastavený takto:
oddělovač
= čárka
uvoz_txt
= uvozovka,
konec_řádku
= "\n" (znak LF)
úvod
a závěr není
záhlaví_sloupců
se neexportuje
Poznámka:
Výstupní formát je po provedení příkazu
save nebo append nastaven na defaultní hodnoty. Proto je nutné jej před každou operací, která vyžaduje jiný než defaultní formát, nastavit znovu.
na místě jednotlivých parametrů (kromě prvního a kromě záhlaví_sloupců - logický) lze použít výrazy, vracející příslušné hodnoty.
nastaví hodnotu která bude vracena pokud databáze vrátí NULL. (default je „NULL“).
Varianty:
out.null.default
nastaví výstupní null hodnotu pro
všechny výstupy od místa volání do konce skriptu.
out.null.static
nastaví výstupní null hodnotu pro
všechny výstupy od místa volání do konce skriptu a pro nově vzniklé
instance interpreteru
skupina příkazů pro práci s výstupním tokem
vyprázdní obsah výstupu (pokud je to možné); komandline varianta vyprázbní vástupní bufffer, grafická varianta vymaže výstupní textové okno ...
syntaxe:
output.clear
vrátí obsah výstupního bufferu od posledního volání output.clear (pokud je to možné) jako textovou proměnnou;
skupina příkazů systémových příkazů (práce se zprávami, práce s hostitelským operačním systémem, generátor číselných řad ...)
system.execute , system.gen , system.priority , system.scriptPath , system.setError , system.isError , system.message , system.runEvent , system.invoke , system.invokeOut , system.edit
provede příkaz hostitelského operačního systému a jeho výstup vrátí jako textovou proměnnou.
syntaxe:
system.execute(jméno_příkazu );
podskupina příkazů pro práci s generátorem číselných řad.
next
vygeneruje další číslo v řadě
system.gen.next ( tabulka [ , sloupec [ , klíč ]
] )
sync nastaví generáto podle nejvyšší hodnoty v zadané
tabulce
system.gen.sync ( tabulka [ ,
sloupec [ , klíč ] ] )
set
system.gen.set ( číslo, tabulka [ , sloupec [ ,
klíč ] ] )
kde
|
Tabulka |
jméno tabulky (výraz nebo proměnná), pro kterou je číslo generováno |
|
Sloupec |
jméno sloupce v tabulce, pro kterou je číslo generováno, Pokud není zadáno, je generován sloupce "ID" |
|
Klíč |
rozšiřijící klíč (dovoluje udržovat víc číselných řad s jedním jménem tabulky a sloupce). Pokud není zadán, dosadí se systémové jméno "RSYQ" |
|
Číslo |
číslo, na jehož hodnotu je nastavena požadovaná bu'nka generátoru. |
Poznámka:
generátor číselných řad je určen především pro generování unikátních ID, ale lze jej použít i pro jiné účely (pomocí vhodně zvolených jmen "tabulka", " sloupec", "klíč") - např. čísla výrobků a pod..
Generáto pro úlohy není v aktuální DSN , ale vždy jen jeden - v DSN, která je aktivní v okamžiku přihlášení uživatele. Pokud se úloha při své činnosti přepíná mezi více DSN a v několika z nich je nutné generovat unikátní ID (pro tabulky, ktere mají v různých DSN stejný název), je nutné tyto tabulky rozlišit pomocí třetího parametru ("klíč " ) - jeho hodnota by měla být právě jmého toho DSN, ve kterém tabulka leží.
nastaví prioritu threadu.
syntaxe:
system.priority( [ + | - ] priorita)
kde priorita je číslo v rozsahu 1 - 10 určující novou prioritu threadu. Pokud číslu předchází znaménko + nebo -, je nová priorita threadu nastavena jako tento původní a zadaného čísla (výsledek nesmí být mimo meze 0 - 10). Default priorita threadu je 5.
přidá cesty k cestaám, na kterých se hledají skripty
syntaxe:
scriptpath.add( string_1 [ , string_2
[ , string_3 [ , ... [ , string_n ] ] ] ]
nastaví sezna cest pro skripty
syntaxe:
scriptpath.set( string_1 [ , string_2
[ , string_3 [ , ... [ , string_n ] ] ] ]
nastaví příznak o chybě (ten může otestovat interface, který příkaz vyvolal a podle něj provést / neprovést nějakou akci)
syntaxe:
system.setError (
< false | true >)
vrátí stav příznaku chyby jako logickou proměnnou. Ten je nastaven při vzniku chyby nebo voláním funkce system.setError
syntaxe:
system.isError
příkazy pro odesílání zpráv (smtp - email, SMS, pager ...) a
zobrazení zprávy do stavového řádku
Skupiny obsahuje tyto
příkazy:
Odešle textovou zprávu zadaného typu
syntaxe:
system.message.send( typ_zprávy,
komu_je_určená, krátký_text [ , od_koho [ ,
dlouhý_text [ , příloha [ , SMTP_server ] ] ] ]
typ_zprávy může být některý z textů: "smtp", "pager", "sms"
pro typ_zprávy = "smtp" => odešle email
|
Komu_je_určená |
emailová adresa
příjemce |
|
krátký_text |
subject zprávy nebo text
SMS |
|
od_koho |
emailová adresa
odesílatele |
|
dlouhý_text |
text těla zprávy |
|
příloha |
string, který bude předán
jako příloga zprávy. Pokud obsahuje prázdný string, (""),
přílogha se nevytvoří. |
|
SMTP_server |
tento server bude použit pro
odeslání zprávy. GapoServer, ke kterému je připojen klient (nikoli
sám klient) k tomuto serveru musí mít povolen přístup a musí mít
povoleno přes něj odesílat. |
pro typ_zprávy = "pager" => odešle zprávu na paget (prostřednictvím WWW rozhraní)
|
Komu_je_určená |
číslo pageru |
|
krátký_text |
subject zprávy |
pro typ_zprávy = "sms" => odešle SMS zprávu prostřednictvím WWW rozhraní operátorů.
|
Komu_je_určená |
číslo mobilu Číslo může
začínat prefixem státu nebo '00'; pokud ne => předpokládá se
česko. |
|
krátký_text |
text zprávy |
|
od_koho |
identifikace odesílatele
(různá pro různé operátory; email nebo telefonní
číslo) |
|
|
|
nastaví SMTP server, který bude používán pro další odesílání
mailů.
Pokud server není nastaven, MSQL použije default server
(podle nastavení v RTsSystem.properties nebo GapoServer.ini)
syntaxe:
system.message.setServer ("server");
nastaví pole "from" pro emaily, které budou dále odesílány.
syntaxe:
system. message.setFrom("odesílatel")
zobrazí zprávu na displeji klienta. U grafického interface se zpráva zobrazí do dolního stavového řádku, u ostatních interface podle situace - obvykle do std. výstupu.
syntaxe:
system. message.display ( text_zprávy [ ,
počet_sekund_pro_zobrazení ] )
|
text_zprávy |
vlastní text, který se zobrazí |
|
počet_sekund_pro_zobrazení |
doba (v sekundách), po
kterou zůstane zpráva zobrazena (pokud není dříve přepsána jinou
zprávou) |
tobrazí chybovou zprávu na displeji klienta. Chybová zpráva je barevně odlišená, vše ostatní je stejné jako system.mesage.display .
Zobrazí zprávu v samostatném okně (pokud to dovoluje použitý interface). V NEgrafických interface se zpráva zobrazí do výstupního toku dat jako normální zpráva.
syntaxe:
system. message.alert
( [ záhlaví , ] text_zprávy [ , typ_zprávy ] )
|
záhlaví |
záhlaví zprávy; obvykle text v horním (systémovém) řádku okna se zprávou |
|
text_zprávy |
vlastní text, který se zobrazí v těle zprávy |
|
typ_zprávy |
zatím nepoužito |
vyvolá událost na serveru (události viz popis administrace serveru). Událost musí být definována v seznamu událostí pro aktuálnáí aplikační systém a musí být aktivní.
syntaxe:
system. runEvent (název_události [ ,
sync_mode ] )
|
název_události |
název události, která se má
spustit. |
|
sync_mode |
logická hodnota (nepovinná). Pokud je false nebo parametr chybí, událost je spuštěna "synchronně" - t, j. MSQL čeká na její dokončení. V tomto případě se neuplatní odesílání zpráv o dokončení události; místo toho je zpráva o dokončení zobrazena klientovi (podle typu interface je to na konzole, v okně pro zprávy nebo do výstupního logu). Pokud je true, událost je odeslána na server ke zpracování a po jejím odeslání MSQL pokzačuje v činnosti (nečeká na její dokončení). Zpráva o dokončení události je odesílána tak, jak je to u události nastaveno. |
vyvolá MSQL skript na serveru a výsledek (pokud vyvolaný skript
vrací návratovou hodnotu) vrátí jako textovou proměnnou.
Pokud
vyvolaný skript nevrací návratovou hodnotu, příkaz "system.invoke
" vrací hodnotu "null".
Příkaz system.invokeOut vypisuje při běhu skriptu na
serveru jeho standardní výstup na displeji klienta (lze použít pro
zjišťování příčin chyb při ladění); příkaz system.invoke jej
nevypisuje.
Obě varianty vypisují zprávy do stavového řádku (nebo
jeho ekvivalentu u NEgrafických interface).
syntaxe:
system. invoke(název_skriptu [ , sync_mode
] [ , paramert_1 , parametr_2 [ , ... , parametr_n
] ] )
|
název_skriptu |
název skriptu, který bude na
serveru spuštěn. |
|
sync_mode |
logická hodnota (nepovinná). Pokud je false nebo parametr chybí, událost je spuštěna "synchronně" - t, j. MSQL čeká na její dokončení. V tomto případě se neuplatní odesílání zpráv o dokončení události; místo toho je zpráva o dokončení zobrazena klientovi (podle typu interface je to na konzole, v okně pro zprávy nebo do výstupního logu). Pokud je true, událost je odeslána na server ke zpracování a po jejím odeslání MSQL pokračuje v činnosti (nečeká na její dokončení). Zpráva o dokončení události je odesílána tak, jak je to u události nastaveno. Parametr sync_mode lze použít pouze s interface, které nekončí svou činnost po provedení série příkazů. Pokud by byl skript spuštěn asynchronně např. v MSQLc a dávka, ze které je skript na serveru vyvolán, by zkončila dřív než vyvolaný skript, byl by skript na serveru rovněž (předčasně) ukončen. |
|
parametr_1 |
parametry, předávané
skriptu. |
poznámka:
Příkaz system.invokeOut je určen především k diagnostice problému - ne pro rutinní používání. Pokud by vyvolaný skript produkoval masívní tisk do standardního výstupu, mohlo by při použití tohoto příkazu dojít k přetečení paměti na serveru (celý standardní výstup skriptu se nejprve zapisuje do paměti a po zkončení skriptu je jako celek odeslán klientovi).
Ukončí provádění všech příkazů a (pokud je to možné) ukončí celý systém a vrátí řízení operačnímu systému. Předává případnou návratovou hodnotu.
system.exit( [ návratová_hodnota ] )
editace souboru. Vyvolá externí editor. Jako parametr dostane jméno souboru k editaci a (volitelně) program editoru.
Příkaz pro manipulaci se ZIP soubory. Příkaz zabalí cílový soubor(y) / adresář(e) do ZIP archívu, jehož název je prvním parametrem. Jako poslední parametry mohou být uvedena klíčová slova modifikující činnost příkazu.
syntaxe:
system.zip(cílový_ZIP_Soubor,
[prefix:]zdrojovýSoubor1 [, [prefix:]zdrojovýSoubor2
[ , ... ] ] [ , verbose ] [ , move ] [ , append ] [ , subdir ] [
, withParent ] )
|
prefix |
Prefix modifikuje chování příkazu k některým typům souboru: zip: zdrojový ZIP soubor bude rozbalen a do výsledného souboru bue vložen jeho obsah (nikoli celý zabalený zip) |
|
cílový_ZIP_Soubor |
Název ZIP souboru (včetně cesty) |
|
zdrojovýSoubor1
... |
Seznam zdrojových souborů a / nebo adresářů, které budou zabaleny do ZIP souboru |
|
move |
Pokud se vyskytne na konci příkazu, budou soubory po úspěšném přenesení do ZIP archívu z původního místa smazány (včetně adresářů). |
|
append |
Pokud existuje soubor se stejným názvem jako je cílový ZIP, budou nově přidávané soubory připojen k původnímu obsahu. Normálně je cílový soubor přepsán. |
|
verbose |
Píše dodatečné informace. |
|
subdir |
Pokud je některý z cest adresář nebo maska, budou přidány i podadresáře. |
|
withParent |
Do výsledného ZIP souboru
zařadí adresář i s nadřízeným adresářem. |
Příklad:
//
Do souboru „/tmp/cilovyZip.zip“ zabalí obsah všech
souborů s příponou „java“ z adresáře
//
„/home/gapo/mojedata“ a všech podadresářů. V zipu bude
jako root obsah adresáře „/home/gapo/mojedata/“
//
(ten sám tam nebude)
system.zip("/tmp/cilovyZip.zip",
"/home/gapo/mojedata/*.java", subdir)
//
Do souboru „/tmp/spojenyZip.zip“ zabalí obsah všech
souborů s příponou „class“ z adresáře
//
„/home/gapo/mojedata“ a všech podadresářů a dále obsah
ZIP souboru „/tmp/spojenyZip.zip“
// Ve výsledném zipu bude jako root adresář pro data z „/home/gapo/mojedata/“ tento adresář
//
(bude tam vidět).
system.zip("/tmp/
spojenyZip .zip", "/home/gapo/mojedata/*.class",
"zip:/tmp/spojenyZip.zip", subdir, withParent)
skupina příkazů pro práci se soubory filesystému
načte soubor nebo jeho část z filesystému a vrátí jako textovou proměnnou
syntaxe:
file.load(jméno_souboru, [konvertor]);
načte celý soubor
file.load(jméno_souboru, od_pozice, < počet_znaků | -1>, [konvertor]);
načte část souboru od ‚ od_pozice ‘ do ‚ do_pozice ‘
file.load(jméno_souboru, string_určující_začátek , < string_určující_konec >, [konvertor]);
načte část souboru mezi texty ‚ string_určující_začátek ‘ a ‚ string_určující_konec ‘
file.load(jméno_souboru, string_určující_začátek , < počet_znaků | -1 >, [konvertor]);
načte část souboru mezi texty ‚ string_určující_začátek ‘ a ‚ string_určující_konec ‘
|
jméno_souboru |
textová proměnná nebo výraz, který určí jméno souboru |
|
od_pozice |
pozice prvního načítaného znaku |
|
počet_znaků |
tolik znaků od výchozí pozice se načítá; pokud je –1 => načítá se soubor do konce |
|
string_určující |
textový výraz nebo proměnná, jehož první výskyt se hledá a nastaví se jako výchozí bod pro načítání. Text ‚ string_určující_začátek ‘ není vložen do výsledného stringu. |
|
string_určující |
od výchozího bodu načte string až do výskytu tohoto textu. Text ‚ string_určující_konec ‘není vložen do výsledného stringu. |
|
konvertor |
konvertor, který se použije pro načtení. Pokud není, je zvolen default podle platformy (viz out.convertor ). |
Poznámka:
kopíruje obsah souboru do jiného souboru
smaže soubor
uloží proměnnou do souboru. Pokud soubor se zadaným jménem existuje, bude přepsán. Pokud neexistuje, bude vytvořen.
syntaxe:
file.save( < proměnná | výzaz >
, jméno_souboru, [ , konvertor ] )
kde
|
proměnná |
textová proměnná, jejíž hodnota bude uloženo |
|
výraz |
výraz, který po vyhodnocení bude uložen |
|
jméno_souboru |
jméno souboru (lokální nebo na serveru), do kteráho bude proměnná nebo výraz uloženy |
|
konvertor |
pokud je zadán, použije se pro konverzi, jinak se konverze neprovádí. |
Jako file.save, ale pokud soubor existuje, není přepdán ale data jsou přidána na jeho konec.
přemístí soubor
testuje, jestli string je existující soubor. Vrací logickou proměnnou.
syntaxe:
file.exists( jméno_souboru )
vrátí úplnou cestu k souboru / adresářijako textovou proměnnou. U adresářů NEDÁVÁ na konec oddělovač (lomítko ...)
vrátí jméno souboru / adresáře bez cesty jako textovou proměnnou
vrátí úplnou cestu k nadřízenému adresáři jako textovou proměnnou
testuje, jestli string je existující adresář. Vrací true pokud existuje a je adresář, jinak false.
syntaxe:
file. isDirectory( jméno_adresáře )
syntaxe:
file.rename(
starý_název, nový_název )
|
starý_název |
Soubor, (včetně úplné cesty), který bude přejmenován |
|
nový_název |
Nový název souboru (bez cesty) |
skupina příkazů pro práci s adresáři (ve Windows: složkami) filesystému
|
výchozí_adresář |
výchozí adresář, jehož výpis se pořizuje |
|
cílový_adresář |
Cesta kam bude zkopírován obsah výchozího adresáře |
|
filtr |
maska; ve výsledku budou jen soubory / adresáře, které odpovídají této masce(hvězdičková konvence) |
|
recursive |
false / true; pokud je true, je kopírován i obsah podadresářů |
Příkaz directory.list vrátí resultset s kompletním výpisem zadaného adresáře, přílaz directory.listFiles vrátí seznam souborů (NIKOLI adresářů) v tadaném adresáři.
syntaxe:
directory.list(
výchozí_adresář [ , filtr] [, recursive ] )
directory.listFiles( výchozí_adresář [ , filtr] [,
recursive ] )
|
výchozí_adresář |
výchozí adresář, jehož výpis se pořizuje |
|
filtr |
maska; ve výsledku budou jen soubory / adresáře, které odpovídají této masce(hvězdičková konvence) |
|
recursive |
false / true; pokud je true, je pořízen seznam pro všechny podadresáře |
Vrácený resultset má tyto 4 sloupce:
|
Poř. Č. |
Název |
Význam |
|---|---|---|
|
1 |
NAME |
Jméno souboru nebo adresáře; jméno je vraceno relativně k výchozímu adresáři. |
|
2 |
TYPE |
znak určující typ objektu: “D” = adresář; “F” = soubor |
|
3 |
SIZE |
Velikost v bytech (má smysl jen u souborů) |
|
4 |
DATE |
Datum vytvoření nebo posledního zápisu |
syntaxe:
directory.remove(
rušený_adresář [ , filtr] [, recursive ] )
|
rušený_adresář |
výchozí adresář, který bude smazán |
|
filtr |
maska; budou vymazány pouze soubory odpovídající masce (hvězdičková konvence) |
|
recursive |
false / true; pokud je true, budou vymazány i soubory z podadresářů (včetně prázdných podadresářů) |
syntaxe:
direcory.exists( jméno_adresáře )
syntaxe:
directory.rename(
starý_název, nový_název )
|
starý_název |
Adresář, (včetně úplné cesty), který bude přejmenován |
|
nový_název |
Nový název adresáře (bez cesty) |
skupina příkazů pro manipulaci s daty prostřednictvím URL / URI
načte obsah url do textové proměnné.
syntaxe:
url.load(url, [ , přihlašovací_informace
] [ , konvertor ] );
|
url |
vlastní URL, se kterým se pracuje |
|
přihlašovací_ |
zatím nic |
|
konvertor |
tento konverotr se použije při načtení dat z URL. Pokud chybí, je použit konvertor podle kódové stránky načíteného URL. |
Poznámka:
Pokud se pozžije konvertor 'NoConvert', lze načítat binární data a ta pak (opět s konvertorem 'NoConvert') uložit do souboru, jiné URL, databáze a pod.
totéž jako url.load ;
uloží data do vybrané URL příkazem "post" a vrátí výsledek jako text. proměnnou
syntaxe:
url.post(url, co_se_posílá [,
konvertor ])
kde
url = url, na které se data posílají
co_se_posílá = string, který je odeslán
nastaví timeoput pro práci s URL. Všechny operace musí proběhnout do nastavené doby, jinak bude příkaz stornován.
syntaxe:
url.timeout(čas_v_sekundách )
skupina příkazů pro práci s formulář i
vytvoří nový formulář
syntaxe:
form.create(jméno_formuláře,
titul_nebo_zahlavi, parametry)
přidá položku do formuláře
syntaxe:
form.addItem(jméno_formuláře, typ_položky,
pozice_položky_ve_formuláři, data_položky)
zobrazí vybraný formulář
syntaxe:
form.display(jméno_formuláře [,
parametry_zobrazení])
Poznámka:
podle typu interface, pod kterým MSQL běží se formulář zobrazí v příslušném výstupním zařízení (v okně programu, do HTML stránky, na konzole …)
vrátí položku formuláře jako textovou proměnnou. Vrácená hodnota závisí na typu položky.
syntaxe:
form.getValue(jméno_formuláře, jméno_položky
)
Jménu položky z vnořeného formuláře musí předcházet jméno
tohoto (vnořeného) formuláře a tečka.
Příklad:
$a = form.getValue (“form1”, “vnoreny.polozka1”);
je totéž jako
$a = form.getValue (“vnoreny”, “polozka1”);