~ubuntu-branches/debian/sid/pgadmin3/sid

« back to all changes in this revision

Viewing changes to docs/cs_CZ/pgscript.html

  • Committer: Bazaar Package Importer
  • Author(s): Gerfried Fuchs
  • Date: 2009-07-30 12:27:16 UTC
  • mfrom: (1.1.6 upstream)
  • Revision ID: james.westby@ubuntu.com-20090730122716-fddbh42on721bbs2
Tags: 1.10.0-1
* New upstream release.
* Adjusted watch file to match release candidates.
* Updated to Standards-Version 3.8.2:
  - Moved to Section: database.
  - Add DEB_BUILD_OPTIONS support for parallel building.
  - Move from findstring to filter suggestion for DEB_BUILD_OPTIONS parsing.
* pgagent got split into its own separate source package by upstream.
* Exclude Docs.vcproj from installation.
* Move doc-base.enus from pgadmin3 to pgadmin3-data package, the files are
  in there too.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
<html>
 
2
 
 
3
<head>
 
4
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 
5
<link rel="STYLESHEET" type="text/css" href="pgadmin3.css">
 
6
<title>Příručka skriptovacího jazyka pgScript</title>
 
7
</head>
 
8
 
 
9
<body>
 
10
 
 
11
<h3>Příručka skriptovacího jazyka pgScript</h3>
 
12
 
 
13
<p><b>Obsah</b></p>
 
14
<ul>
 
15
    <li><a href="#overview">Přehled</a></li>
 
16
    <li><a href="#examples">Příklady</a></li>
 
17
    <ul>
 
18
        <li><a href="#example1">Dávkové vytváření tabulek</a></li>
 
19
        <li><a href="#example2">Vkládání náhodných dat</a></li>
 
20
        <li><a href="#example3">Dávkové mazání tabulek</a></li>
 
21
        <li><a href="#example4">Výpis informací na obrazovku</a></li>
 
22
    </ul>
 
23
    <li><a href="#commands">Příkazy SQL</a></li>
 
24
    <li><a href="#variables">Proměnné</a></li>
 
25
    <ul>
 
26
        <li><a href="#variable1">Jednoduché proměnné</a></li>
 
27
        <li><a href="#variable2">Záznamy</a></li>
 
28
        <li><a href="#variable3">Přetypování</a></li>
 
29
        <li><a href="#variable4">Operace</a></li>
 
30
    </ul>
 
31
    <li><a href="#control">Struktury pro řízení běhu</a></li>
 
32
    <ul>
 
33
        <li><a href="#control1">Struktury podmínek</a></li>
 
34
        <li><a href="#control2">Struktury cyklů</a></li>
 
35
        <li><a href="#control3">Podmínky</a></li>
 
36
    </ul>
 
37
    <li><a href="#functions">Doplňující funkce a procedury</a></li>
 
38
    <ul>
 
39
        <li><a href="#function1">Procedury</a></li>
 
40
        <li><a href="#function2">Funkce</a></li>
 
41
    </ul>
 
42
    <li><a href="#generators">Generátory náhodných dat</a></li>
 
43
    <ul>
 
44
        <li><a href="#generator1">Přehled o generátorech</a></li>
 
45
        <li><a href="#generator2">Sekvence a semínka</a></li>
 
46
        <li><a href="#generator3">Generátory dat</a></li>
 
47
    </ul>
 
48
</ul>
 
49
 
 
50
<!-- ----------------------------------------------------------------------  -->
 
51
 
 
52
<h3><a name="overview"></a>Přehled</h3>
 
53
<p>pgScript se skládá z příkazů pgScript:</p>
 
54
<pre class="screen">příkaz pgScript
 
55
    : normální příkaz PostgreSQL SQL (SELECT INSERT CREATE ...)
 
56
    | deklarace nebo přiřazení proměnné (DECLARE SET)
 
57
    | řídící struktura (IF WHILE)
 
58
    | procedura (ASSERT PRINT LOG RMLINE)</pre>
 
59
<p>Názvy příkazů (<strong class="command">SELECT</strong>, <strong class="command">IF</strong>, <strong class="command">SET</strong>, ...) nejsou
 
60
   citlivé na velikost písmen a musí být zakončené středníkem <code>;</code>. Identifikátory jsou citlivé na velikost písmen.</p>
 
61
 
 
62
<!-- ----------------------------------------------------------------------  -->
 
63
 
 
64
<h3><a name="examples"></a>Příklady</h3>
 
65
<h4><a name="example1"></a>Dávkové vytváření tabulek</h4>
 
66
<pre class="screen">DECLARE @I, @T; -- Názvy proměnných začínají s @
 
67
SET @I = 0; -- @I je celé číslo
 
68
WHILE @I &lt; 20
 
69
BEGIN
 
70
    SET @T = 'tabulka' + CAST (@I AS STRING); -- Přetypování @I
 
71
    CREATE TABLE @T (id integer primary key, data text);
 
72
 
 
73
    SET @I = @I + 1;
 
74
END</pre>
 
75
<h4><a name="example2"></a>Vkládání náhodných dat</h4>
 
76
<pre class="screen">DECLARE @I, @J, @T, @G;
 
77
SET @I = 0;
 
78
SET @G1 = INTEGER(10, 29, 1); /* Generátor náhodných celých čísel
 
79
                              Jedinečné číslo v rozsahu 10 až 29 */
 
80
SET @G2 = STRING(10, 20, 3); /* Generátor náhodných řetězců
 
81
                             3 slova v délce 10 až 20 znaků */
 
82
WHILE @I &lt; 20
 
83
BEGIN
 
84
    SET @T = 'tabulka' + CAST (@I AS STRING);
 
85
 
 
86
    SET @J = 0;
 
87
    WHILE @J &lt; 20
 
88
    BEGIN
 
89
        INSERT INTO @T VALUES (@G1, '@G2');
 
90
        SET @J = @J + 1;
 
91
    END
 
92
 
 
93
    SET @I = @I + 1;
 
94
END</pre>
 
95
<h4><a name="example3"></a>Dávkové mazání tabulek</h4>
 
96
<pre class="screen">DECLARE @I, @T; -- Deklarace je volitelná
 
97
SET @I = 0;
 
98
WHILE 1 -- Vždy pravda
 
99
BEGIN
 
100
    IF @I &gt;= 20
 
101
      BREAK; -- Opustit smyčku pokud @I &gt; 20
 
102
 
 
103
    SET @T = 'tabulka' + CAST (@I AS STRING);
 
104
    DROP TABLE @T;
 
105
 
 
106
    SET @I = @I + 1;
 
107
END</pre>
 
108
<h4><a name="example4"></a>Výpis informací na obrazovku</h4>
 
109
<pre class="screen">SET @PROGR@M#TITLE = 'pgScript';
 
110
PRINT '';
 
111
PRINT @PROGR@M#TITLE + ' vlastnosti:';
 
112
PRINT '';
 
113
PRINT '  * Normální příkazy PostgreSQL';
 
114
PRINT '  * Jazyk pro řízení běhu';
 
115
PRINT '  * Lokální proměnné';
 
116
PRINT '  * Generátory náhodných dat';</pre>
 
117
 
 
118
<!-- ----------------------------------------------------------------------  -->
 
119
 
 
120
<h3><a name="commands"></a>Příkazy SQL</h3>
 
121
<p>V skriptu pgScript můžete spustit LIBOVOLNÝ dotaz PostgreSQL KROMĚ tohoto jednoho:</p>
 
122
<pre class="screen">BEGIN;
 
123
END;</pre>
 
124
<p>To je proto, že <strong class="command">BEGIN</strong> a <strong class="command">END</strong> se používají k oddělení bloků. 
 
125
   Místo toho použijte:</p>
 
126
<pre class="screen">BEGIN TRANSACTION;
 
127
END TRANSACTION;</pre>
 
128
<p>Seznam příkazů PostgreSQL: <a href="http://www.postgresql.org/docs/8.3/interactive/sql-commands.html" target="_blank">http://www.postgresql.org/docs/8.3/interactive/sql-commands.html</a></p>
 
129
 
 
130
<!-- ----------------------------------------------------------------------  -->
 
131
 
 
132
<h3><a name="variables"></a>Proměnné</h3>
 
133
<p>Jsou dva hlavní typy proměnných: jednoduché proměnné a záznamy 
 
134
   (množiny výsledků složené z řádků a sloupců).</p>
 
135
<p>Názvy proměnných začínají s <code>@</code> a mohou se skládat z písmen, 
 
136
   číslic, <code>_</code>, <code>#</code>, <code>@</code>.</p>
 
137
<p>Typ proměnné se odhadne automaticky v závislosti na druhu hodnoty, kterou 
 
138
   obsahuje. Může to být jeden z těchto: číslo (reálné nebo celé), řetězec,
 
139
   záznam.</p>
 
140
<h4><a name="variable1"></a>Jednoduché proměnné</h4>
 
141
<h5>Deklarace jednoduché proměnné</h5>
 
142
<p>Deklarace jednoduché proměnné je volitelná.</p>
 
143
<pre class="screen">DECLARE @A, @B;
 
144
DECLARE @VAR1;</pre>
 
145
<h5>Přiřazení jednoduché proměnné</h5>
 
146
<p>Provádí se příkazem <strong class="command">SET</strong>. Typ proměnné 
 
147
   závisí na hodnotě, která je do ní přiřazená.</p>
 
148
<pre class="screen">SET @A = 1000, @B = 2000;   -- @A a @B jsou <strong>celá čísla</strong>
 
149
SET @C = 10e1, @D = 1.5;    -- @C a @D jsou <strong>reálná čísla</strong>
 
150
SET @E = 'ab', @F = 'a''b'; -- @E a @F jsou <strong>řetězce</strong>
 
151
SET @G = "ab", @H = "a\"b"; -- @G a @H jsou <strong>řetězce</strong></pre>
 
152
<p>Neinicializované proměnné se automaticky nastaví na prázdný řetězec. Proměnnou
 
153
   je možné libovolně přepisovat.</p>
 
154
<pre class="screen">PRINT @A;      -- Vytiskne prázdný řetězec
 
155
SET @A = 1000; -- @A je inicializováno jako celé číslo
 
156
PRINT @A;      -- Vytiskne 1000
 
157
SET @A = 'ab'; -- @A se změní na řetězec
 
158
PRINT @A;      -- Vytiskne ab</pre>
 
159
<h5>Generátory dat</h5>
 
160
<p>Generátory dat umožňují uživatelům generovat náhodné hodnoty. Je několik
 
161
   typů generátorů, každý generuje různé typy dat. Proměnná inicializovaná
 
162
   generátorem se chová jako běžná jednoduchá proměnná, akorát že při každém
 
163
   použití má jinou hodnotu.</p>
 
164
<pre class="screen">SET @A = INTEGER(100, 200);
 
165
PRINT @A; -- Vytiskne celé číslo z rozsahu do 100 do 200
 
166
PRINT @A; -- Vytiskne jiné celé číslo z rozsahu od 100 do 200</pre>
 
167
<p>Proměnná může obsahovat generátor, ale její typ je jeden z následujících:
 
168
   číslo (reálné nebo celé), řetězec. Seznam dostupných generátorů a k nim
 
169
   přidružených typů najdete v kapitole <a href="#generators">Generátory náhodných dat</a>.</p>
 
170
<h4><a name="variable2"></a>Záznamy</h4>
 
171
<h5>Deklarace záznamu</h5>
 
172
<p>Deklarace záznamu je <strong>povinná</strong>.
 
173
   Musí být uveden název každého sloupce i když nebude později použitý.</p>
 
174
<pre class="screen">DECLARE @R1 { @A, @B }, @R2 { @A, @C }; -- Dva záznamy se dvěma sloupci
 
175
DECLARE @R3 { @A, @B, @C, @D };         -- Jeden záznam se čtyřmi sloupci</pre>
 
176
<p>Počet řádků je dynamický: viz následující sekce.</p>
 
177
<h5>Přiřazení záznamu</h5>
 
178
<p>Přístup k určitému místu v záznamu je dán číslem řádku (začíná se od 0) a buď názvem sloupce
 
179
   (uzavřeném do uvozovek) nebo číslem sloupce (začíná se od 0). Takto specifikované místo se
 
180
   chová jako jednoduchá proměnná. Upozorněme, že záznam nemůže obsahovat další záznam.
 
181
</p>
 
182
<pre class="screen">SET @R1[0]['@A'] = 1; -- První řádek a první sloupec
 
183
SET @R1[0][0] = 1;    -- To stejné umístění
 
184
SET @R1[4]['@B'] = 1; -- Pátý řádek a sedmý sloupec
 
185
SET @R1[0][1] = 1;    -- To stejné umístění</pre>
 
186
<p>V předchozím příkladu se vloží automaticky tři řádky mezi první a pátý řádek. Použití neplatného
 
187
   čísla nebo názvu sloupce způsobí výjimku.</p>
 
188
<p>Specifikované místo je možné použít jako regulérní proměnnou. A specifikovaný řádek rovněž.</p>
 
189
<pre class="screen">SET @R1[0][0] = @R3[0][1], @A = @R2[0][0]; -- Chová se jako jednoduchá proměnná
 
190
SET @A = @R1[1]; -- @A se stane záznamem, který obsahuje první řádek z @R1</pre>
 
191
<p>Nezapomeňte, že nelze použít <code>SET @R1[0][0] = @R2</code>, protože záznam nemůže obsahovat záznam.</p>
 
192
<p>Za to je možné přiřadit záznam do proměnné, v takovém případě není nutné proměnnou deklarovat:</p>
 
193
<pre class="screen">SET @A = @R3; -- @A se stane záznamem, protože je do něj přiřazený záznam</pre>
 
194
<h5>Dotazy SQL</h5>
 
195
<p>Některé dotazy SQL vrací záznamy. Pokud je dotazem <code>SELECT</code>, vrací výsledky dotazu. Ostatní dotazy 
 
196
   vrací jednořádkový záznam (<code>true</code>) pokud dopadly úspěšně, v opačném případě záznam s nulovým počtem
 
197
   řádků (<code>false</code>).</p>
 
198
<pre class="screen">SET @A = SELECT * FROM tabulka;  -- @A je záznam s výsledkem dotazu
 
199
SET @B = INSERT INTO tabulka ...; -- @B je jednořádkový záznam, pokud dotaz dopadl úspěšně</pre>
 
200
<h5>Funkce záznamů</h5>
 
201
<p>Viz <a href="#function2">Funkce</a>.</p>
 
202
<h4><a name="variable3"></a>Přetypování</h4>
 
203
<p>Proměnnou je možné změnit z jednoho typu na jiný pomocí funkce přetypování:</p>
 
204
<pre class="screen">SET @A = CAST (@B AS STRING);
 
205
SET @A = CAST (@B AS REAL);
 
206
SET @A = CAST (@B AS INTEGER);
 
207
SET @A = CAST (@B AS RECORD);</pre>
 
208
<p>Pokud se konvertuje záznam na řetězec, změní se na jeho textovou reprezentaci.
 
209
   Pokud se konvertuje na číslo, nejprve se záznam zkonvertuje na řetězec a potom na
 
210
   číslo (viz konverze řetězců).</p>
 
211
<p>Pokud se konvertuje číslo na řetězec, změní se na jeho textovou reprezentaci.
 
212
   Pokud se konvertuje na záznam, změní se na záznam s jedním řádkem a jedním sloupcem,
 
213
   který obsahuje číslo.</p>
 
214
<p>Pokud se konvertuje řetězec na číslo, tak pokud řetězec představuje číslo změní se 
 
215
   na číslo, jinak se vyvolá výjimka. Pokud se konvertuje na záznam, pokusí se program
 
216
   v řetězci najít <strong>vzor záznamu</strong>. Pokud ho nenajde provede konverzi na
 
217
   záznam s jedním řádkem a jedním sloupcem, který obsahuje řetězec. Vzor záznamu je:</p>
 
218
<pre class="screen">SET @B = '(1, "abc", "ab\\"")(1, "abc", "ab\\"")'; -- @B je řetězec
 
219
SET @B = CAST (@B AS RECORD); -- @B se změnilo na záznam s dvěma řádky a třemi sloupci</pre>
 
220
<p>Zapamatujte si, že řetězec je uzavřený do apostrofů. Řetězec v záznamu musí být
 
221
   uzavřený v uvozovkách zakončených s <code>\\</code> (zpětné lomítko je zdvojené, protože
 
222
   je už i speciálním znakem pro řetězec v apostrovech).</p>
 
223
<h4><a name="variable4"></a>Operace</h4>
 
224
<p>Operace lze provádět pouze mezi operandy stejného typu. Pokud jsou různého typu, lze to 
 
225
   řešit přetypováním.</p>
 
226
<p>Výsledkem porovnávání je číslo 0 nebo 1.</p>
 
227
<h5>Řetězce</h5>
 
228
<p>Porovnávání: <code>= &lt;&gt; &gt; &lt; &lt;= &gt;= AND
 
229
    OR</code></p>
 
230
<p>Spojování: <code>+</code></p>
 
231
<pre class="screen">SET @B = @A + 'abcdef'; -- @A musí být řetězec a @B bude řetězec</pre>
 
232
<p>Logická hodnota: neprázdný řetězec je <code>true</code>, prázdný
 
233
    řetězec je <code>false</code></p>
 
234
<p>Inverze logické hodnoty: <code>NOT</code></p>
 
235
<p>Porovnávání bez citlivosti na velikost písmen: <code>~=</code></p>
 
236
<h5>Čísla</h5>
 
237
<p>Porovnávání: <code>= &lt;&gt; &gt; &lt; &lt;= &gt;= AND
 
238
    OR</code></p>
 
239
<p>Aritmetika: <code>+ - * / %</code></p>
 
240
<pre class="screen">SET @A = CAST ('10' AS INTEGER) + 5; -- řetězec '10' se převede na číslo</pre>
 
241
<p>Logická hodnota: 0 je <code>false</code>, cokoliv jiného je <code>true</code></p>
 
242
<p>Inverze logické hodnoty: <code>NOT</code> (poznámka: <code>NOT NOT
 
243
    10 = 1</code>)</p>
 
244
<p>Aritmetická operace obsahující alespoň jedno reálné číslo vrátí jako výsledek reálné číslo:</p>
 
245
<pre class="screen">SET @A = 10 / 4.; -- 4. je reálné číslo, takže výsledek je reálné číslo: @A = 2.5
 
246
SET @A = 10 / 4;  -- 4 je celé číslo, takže výsledkem je celé číslo: @A = 2</pre>
 
247
<h5>Záznamy</h5>
 
248
<p>Porovnávání: <code>= &lt;&gt; &gt; &lt; &lt;= &gt;= AND
 
249
    OR</code></p>
 
250
<p>Logická hodnota: záznam s nulovým počtem řádků je <code>false</code>, cokoliv jiného je <code>true</code></p>
 
251
<p>Inverze logické hodnoty: <code>NOT</code></p>
 
252
<p>Porovnávání záznamů je o inkluzi a exkluzi. Pořadí řádků není podstatné. <code>&lt;=</code> znamená, že každý 
 
253
   řádek v levém operandu má odpovídající v pravém operandu. <code>&gt;=</code> je opakem. <code>=</code> znamená, 
 
254
   že musí být pravdivé současně <code>&lt;=</code> i <code>&gt;=</code></p>
 
255
<p>Porovnávání se provádí na řetězcích: i když záznam obsahuje čísla jako <code>10</code> a <code>1e1</code>, dostaneme 
 
256
   <code>'10' &lt;&gt; '1e1'</code>.</p>
 
257
 
 
258
<!-- ----------------------------------------------------------------------  -->
 
259
 
 
260
<h3><a name="control"></a>Struktury pro řízení běhu</h3>
 
261
<h4><a name="control1"></a>Struktury podmínek</h4>
 
262
<pre class="screen">IF podmínka
 
263
BEGIN
 
264
    přikazy pgScript
 
265
END
 
266
ELSE
 
267
BEGIN
 
268
    příkazy pgScript
 
269
END</pre>
 
270
<p>Příkazy pgScript jsou nepovinné. Klíčová slova <strong class="command">BEGIN</strong> a <strong class="command">END</strong> jsou volitelná v případě, že příkaz pgScript je jen jeden.</p>
 
271
<h4><a name="control2"></a>Struktury cyklů</h4>
 
272
<pre class="screen">WHILE podmínka
 
273
BEGIN
 
274
    příkazy pgScript
 
275
END</pre>
 
276
<p>Příkazy pgScript jsou nepovinné. Klíčová slova <strong class="command">BEGIN</strong> a <strong class="command">END</strong> jsou volitelná v případě, že příkaz pgScript je jen jeden.</p>
 
277
<p><strong class="command">BREAK</strong> ukončí smyčku cyklu <strong class="command">WHILE</strong>, ve které je uzavřený, zatímco <strong class="command">CONTINUE</strong> způsobí přechod na další iteraci cyklu, ve kterém byl vyvolaný. <strong class="command">RETURN</strong> funguje 
 
278
podobně jako <strong class="command">BREAK</strong>.</p>
 
279
<pre class="screen">WHILE podmínka1
 
280
BEGIN
 
281
    IF podmínka2
 
282
    BEGIN
 
283
        BREAK;
 
284
    END
 
285
END</pre>
 
286
<h4><a name="control3"></a>Podmínky</h4>
 
287
<p>Podmínky jsou ve skutečnosti výsledky operací. Například porovnávání řetězců <code>'ab' = 'ac'</code> vrátí <code>false</code>.</p>
 
288
<pre class="screen">IF 'ab' ~= 'AB' -- Porovnávání bez citlivosti na velikost písmen, jehož výsledkem je 1 (true)
 
289
BEGIN
 
290
    -- Toto nastane
 
291
END
 
292
 
 
293
IF 0 -- false
 
294
BEGIN
 
295
    -- Toto <strong>nenastane</strong>
 
296
END
 
297
ELSE
 
298
BEGIN
 
299
    -- Toto nastane
 
300
END
 
301
 
 
302
WHILE 1
 
303
BEGIN
 
304
    -- Nekonečná smyčka: použijte BREAK pro ukončení
 
305
END</pre>
 
306
<p>Výsledek dotazu SQL SELECT je možné přímo použít jako podmínku. Dotaz se musí uzavřít do závorek:</p>
 
307
<pre class="screen">IF (SELECT 1 FROM tabulka)
 
308
BEGIN
 
309
    -- Toto znamená, že tabulka existuje, jinak by podmínka musela být false
 
310
END</pre>
 
311
 
 
312
<!-- ----------------------------------------------------------------------  -->
 
313
 
 
314
<h3><a name="functions"></a>Doplňující funkce a procedury</h3>
 
315
<h4><a name="function1"></a>Procedury</h4>
 
316
<p>Procedury nevrací výsledek. Musí se použít na samostatném řádku a nelze je přiřadit proměnné.</p>
 
317
<h5>Print</h5>
 
318
<p>Výpíše výraz na obrazovku:</p>
 
319
<pre class="screen">PRINT 'Hodnota @A je' + CAST (@A AS STRING);</pre>
 
320
<h5>Assert</h5>
 
321
<p>Vyvolá výjimku pokud je výsledkem výrazu false:</p>
 
322
<pre class="screen">ASSERT 5 &gt; 3 AND 'a' = 'a';</pre>
 
323
<h5>RmLine</h5>
 
324
<p>Odebere konkrétní řádek ze záznamu:</p>
 
325
<pre class="screen">RMLINE(@R[1]); -- Odebere druhý řádek @R</pre>
 
326
<h4><a name="function2"></a>Funkce</h4>
 
327
<p>Funkce vrací výsledek. Vrácený výsledek můžete přiřadit do proměnné, podobně jako u operace <code>CAST</code>.</p>
 
328
<h5>Trim</h5>
 
329
<p>Odstraní přebytečné mezery obklopující řetězec:</p>
 
330
<pre class="screen">SET @A = TRIM(' a '); -- @A = 'a'</pre>
 
331
<h5>Lines</h5>
 
332
<p>Vrátí počet řádků v záznamu:</p>
 
333
<pre class="screen">IF LINES(@R) &gt; 0
 
334
BEGIN
 
335
    -- Zpracování
 
336
END</pre>
 
337
<h5>Columns</h5>
 
338
<p>Vrátí počet sloupců v záznamu:</p>
 
339
<pre class="screen">IF COLUMNS(@R) &gt; 0
 
340
BEGIN
 
341
    -- Zpracování
 
342
END</pre>
 
343
 
 
344
<!-- ----------------------------------------------------------------------  -->
 
345
 
 
346
<h3><a name="generators"></a>Generátory náhodných dat</h3>
 
347
<h4><a name="generator1"></a>Přehled o generátorech</h4>
 
348
<p>Generátor náhodných dat můžete do proměnné přiřadit příkazem <strong class="command">SET</strong>.
 
349
   Proměnná pak bude mít, pokaždé když se použije, jinou hodnotu.</p>
 
350
<p>Jinak se proměnná používá tak, jak je běžné:</p>
 
351
<pre class="screen">SET @G = STRING(10, 20, 2);
 
352
SET @A = @G; -- @A obsahuje náhodný řetězec
 
353
SET @B = @G; -- @B obsahuje jiný náhodný řetězec
 
354
PRINT @G,    -- Vypíše ještě jiný náhodný řetězec</pre>
 
355
<h4><a name="generator2"></a>Sekvence a semínka</h4>
 
356
<p>Běžnými parametry datových generátorů jsou <span class="emphasis"><em>sekvence</em></span> a <span class="emphasis"><em>semínka</em></span>.</p>
 
357
<p><span class="emphasis"><em>sekvence</em></span> znamená, že hodnoty se generují v náhodném pořadí, každá hodnota se ale vyskytne maximálně
 
358
   jednou, dokud se sekvence nezačne znovu. To lze s úspěchem využít pro sloupce s omezením jedinečnosti <code>UNIQUE</code>. Např. následující
 
359
   generátor:</p>
 
360
<pre class="screen">SET @G = INTEGER(10, 15, 1); -- 1 znamená, že se bude generovat sekvence</pre>
 
361
<p>může generovat třeba takové hodnoty: <code class="computeroutput">14 12 10 13 11 15 14 12 10 13 11</code>..., kde se každé číslo objeví jen
 
362
   jednou, dokud se generátor nespustí znovu od začátku.</p>
 
363
<p>Parametr <span class="emphasis"><em>sequence</em></span> musí být celé číslo. Pokud je 0, tak se negeneruje sekvence (výchozí volba), jakékoliv
 
364
   jiné číslo generuje sekvenci.</p>
 
365
<p><span class="emphasis"><em>semínko</em></span> je celé číslo, které inicializuje generátor. Dva generátory se stejnými parametry a stejným
 
366
   semínkem budou generovat <strong>přesně</strong> stejné hodnoty.</p>
 
367
<p><span class="emphasis"><em>semínko</em></span> musí být celé číslo, které se použije přímo k inicializaci generátoru náhodných dat.</p>
 
368
<h4><a name="generator3"></a>Generátory dat</h4>
 
369
<p>Volitelné parametry jsou uvedené v hranatých závorkách.</p>
 
370
<pre class="screen">Generátor
 
371
    : INTEGER ( min, max, [sekvence], [semínko] );
 
372
    | REAL ( min, max, přesnost, [sekvence], [semínko] );
 
373
    | DATE ( min, max, [sekvence], [semínko] );
 
374
    | TIME ( min, max, [sekvence], [semínko] );
 
375
    | DATETIME ( min, max, [sekvence], [semínko] );
 
376
    | STRING ( min, max, [počet], [semínko] );
 
377
    | REGEX ( regvýraz, [semínko] );
 
378
    | FILE ( cesta, [sekvence], [semínko], [kódování] );
 
379
    | REFERENCE ( tabulka, sloupec, [sekvence], [semínko] );</pre>
 
380
<h5>Celá čísla</h5>
 
381
<pre class="screen">INTEGER ( min, max, [sekvence], [semínko] );
 
382
INTEGER ( -10, 10, 1, 123456 );</pre>
 
383
<p><code>min</code> je celé číslo, <code>max</code> je celé číslo, <code>sekvence</code> je celé číslo a <code>semínko</code> je rovněž celé číslo.</p>
 
384
<h5>Realná čísla</h5>
 
385
<pre class="screen">REAL ( min, max, přesnost, [sekvence], [semínko] );
 
386
REAL ( 1.5, 1.8, 2, 1 );</pre>
 
387
<p><code>min</code> je číslo, <code>max</code> je číslo, <code>přesnost</code> je celé číslo, které udává počet desetinných míst (mělo by být menší než 
 
388
   30), <code>sekvence</code> je celé číslo a <code>semínko</code> je celé číslo.</p>
 
389
<h5>Datumy</h5>
 
390
<pre class="screen">DATE ( min, max, [sekvence], [semínko] );
 
391
DATE ( '2008-05-01', '2008-05-05', 0 );</pre>
 
392
<p><code>min</code> je řetězec představujíc datum, <code>max</code> je řetězec představující datum, <code>sekvence</code> je celé číslo a 
 
393
   <code>semínko</code> je celé číslo.</p>
 
394
<h5>Časy</h5>
 
395
<pre class="screen">TIME ( min, max, [sekvence], [semínko] );
 
396
TIME ( '00:30:00', '00:30:15', 0 );</pre>
 
397
<p><code>min</code> je řetězec představující čas, <code>max</code> je řetězec představující čas, <code>sekvence</code> je celé číslo a 
 
398
   <code>semínko</code> je celé číslo.</p>
 
399
<h5>Časová razítka (datum/čas)</h5>
 
400
<pre class="screen">DATETIME ( min, max, [sekvence], [semínko] );
 
401
DATETIME ( '2008-05-01 14:00:00', '2008-05-05 15:00:00', 1 );</pre>
 
402
<p><code>min</code> je řetězec představující časové razítko, <code>max</code> je řetězec představující časové razítko, <code>sekvence</code> 
 
403
   je celé číslo a <code>semínko</code> je celé číslo.</p>
 
404
<h5>Řetězce</h5>
 
405
<pre class="screen">STRING ( min, max, [počet], [semínko] );
 
406
STRING ( 10, 20, 5 );</pre>
 
407
<p><code>min</code> je celé číslo udávající minimální délku slova, <code>max</code> je celé číslo udávající maximální délku slova, 
 
408
   <code>počet</code> je celé číslo udávající počet slov (výchozí je: <code>1</code>) a <code>semínko</code> je celé číslo.</p>
 
409
<p>V předchozím příkladu se bude generovat 5 slov (oddělených mezerami) s délkou od 10 do 20 znaků.</p>
 
410
<h5>Řetězce z regulárního výrazu</h5>
 
411
<pre class="screen">REGEX ( regvýraz, [semínko] );
 
412
REGEX ( '[a-z]{1,3}@[0-9]{3}' );</pre>
 
413
<p><code>regvýraz</code> je řetězec představující jednoduchý regulární výraz a <code>semínko</code> je celé číslo.</p>
 
414
<p>Jednoduchý regulární výraz se skládá z:</p>
 
415
<ul type="disc">
 
416
    <li>
 
417
        <p>Množiny možných znaků, např. <code>[a-z_.]</code> pro znaky v rozmezí <code>a</code> až <code>z</code> + <code>_</code> a <code>.</code></p>
 
418
    </li>
 
419
    <li>
 
420
        <p>Samostatných znaků.</p>
 
421
    </li>
 
422
</ul>
 
423
<p>Lze určit minimální a maximální délku pro předcházející množinu nebo znak:</p>
 
424
<ul type="disc">
 
425
    <li>
 
426
        <p><code>{min, max}</code>, např. <code>{1,3}</code> pro délku v rozmezí <code>1</code> až <code>3</code> znaky.</p>
 
427
    </li>
 
428
    <li>
 
429
        <p><code>{min}</code>, např. <code>{3}</code> pro délku <code>3</code> znaky.</p>
 
430
    </li>
 
431
    <li>
 
432
        <p>Výchozí délka (pokud není zadaná) je <code>1</code> znak.</p>
 
433
    </li>
 
434
</ul>
 
435
<p>Poznámka: dávejte pozor při zadávání mezer, protože např. <code>'a {3}'</code> znamená jeden znak <code>a</code> následovaný třemi mezerami, protože 
 
436
   <code>3</code> se váže k poslednímu znaku, což je v tomto případě mezera.</p>
 
437
<p>Pokud potřebujete zadat <code>[</code> <code>]</code> <code>\</code> <code>{</code> nebo <code>}</code>, musíte tyto znaky ošetřit zpětným lomítkem, 
 
438
   protože se jedná o znaky se speciálním významem. Nezapomeňte použít <strong>zdvojené zpětné lomítko</strong>: 
 
439
   <code>'\\[{3}'</code> pro tři znaky <code>[</code>.</p>
 
440
<h5>Řetězce ze slovníkových souborů</h5>
 
441
<pre class="screen">FILE ( cesta, [sekvence], [semínko], [kódování] );
 
442
FILE ( 'soubor.txt', 0, 54321, 'utf-8' );</pre>
 
443
<p><code>cesta</code> je řetězec představující cestu k textovému souboru, <code>sekvence</code> je celé číslo, <code>semínko</code> je celé číslo a 
 
444
   <code>kódování</code> je řetězec představující znakovou sadu použitou v souboru (výchozí je kódování podle nastavení v systému).</p>
 
445
<p>Generují se celá čísla v rozmezí od 1 do počtu řádků souboru a vrátí se příslušný řádek. Pokud soubor neexistuje, vyvolá se výjimka.</p>
 
446
<p>Jako <code>kódování</code> je podporovaná většina známých kódování jako utf-8, utf-16le, utf-16be, iso-8859-1, ...</p>
 
447
<h5>Odkaz na jiné pole</h5>
 
448
<pre class="screen">REFERENCE ( tabulka, sloupec, [sekvence], [semínko] );
 
449
REFERENCE ( 'tab', 'col', 1 );</pre>
 
450
<p><code>tabulka</code> je řetězec představující název tabulky, <code>sloupec</code> je řetězec představující název sloupce tabulky, 
 
451
   <code>sekvence</code> je celé číslo a <code>semínko</code> je celé číslo.</p>
 
452
<p>Účel použití je pro generování dat do sloupců určených jako cizí klíče.</p>
 
453
</body>
 
454
</html>