SQL POVELY | ||
E. F. CODD: Relational Datbase: A Practical Foundation for Productivity. CACM, č. 2 1982, s. 109 |
IBM DB2 je systém řízení databáze, který implementuje relační model dat. Z pohledu uživatele je relační databáze množinou tabulek (souborů). Každý řádek (věta) tabulky obsahuje množinu sloupců (polí). Všechny řádky tabulky mají tutéž formu. Operace s daty se provádí pomocí jazyka Structured Query Language - SQL. Tento jazyk umožňuje vytvářet, modifikovat, rušit tabulky; vyhledávat, měnit, rušit data v tabulkách; přidávat data do tabulek. Tím, že povely SQL můžete uvádět v textu svých programů, jsou překonána všechna omezení kladená na příkazy vstupu a výstupu u jazyka Rexx v prostředí AS/400. Ukažme si možnosti a způsob využití SQL: Vytvoříme si jednoduchý oboustranný anglicko-česko-anglický slovník a napíšeme si program pro jeho praktické využívání. Slovník vytvoří program SLOVNIK:
Příkaz address EXECSQL v programu určuje, že řetězec znaků, který není rozpoznaným příkazem jazyka Rexx, bude předán do prostředí provádějícího povely SQL. Implicitním nastavením programu v jazyce Rexx je volba COMMIT = *CHG. Pokud tabulka není souborem zabezpečeným žurnálem, musíte uvést explicitní povel SQL 'SET OPTION COMMIT = *NONE'. Povelem 'CREATE TABLE MYLIB/DICTIONARY (E_SLOVO CHAR(20) NOT NULL, C_SLOVO CHAR(20) NOT NULL)' se vytváří tabulka se dvěma sloupci: prvním pro anglická a druhým pro česká slova. Povel PREPARE 'PREPARE I1 FROM :INS' připravuje k provedení povel 'INSERT INTO MYLIB/DICTIONARY VALUES(?, ?)' v proměnné INS. Takto připravený povel je pak dynamicky proveden povelem EXECUTE 'EXECUTE I1 USING :E, :C'. Jména začínající dvojtečkou označují v SQL povelech programové proměnné (host variables). Hodnoty proměnných E a C jsou uloženy do sloupců jednoho řádku tabulky DICTIONARY. Proměnná RC indikuje zda byl povel SQL proveden bezchybně (RC je nula) nebo ne (RC má nenulovou hodnotu). Následuje příklad dialogu člověka s programem SLOVNIK při vytváření slovníku:
Programem HLEDEJ, budeme oboustranný slovník využívat.
Ukazatel do tabulky, která je výsledkem SQL povelu, se v terminologii SQL nazývá kurzor. Umožňuje prozkoumat výsledek povelu SQL - tabulku - řádek po řádku. V našem případě je výsledkem povelu SELECT tabulka - prázdná (není-li slovo ve slovníku), jednořádková nebo víceřádková, tvořená těmi řádky, které mají v tomtéž sloupci uvedeno stejné slovo, jako slovo přijaté z klávesnice. Po otevření kurzoru můžeme tyto řádky číst povelem FETCH. Kurzor je zprvu nastaven před první řádek výsledné tabulky. Tento řádek je běžným řádkem pro povel FETCH, který obsah řádku uloží do programových proměnných uvedených v klauzuli INTO (v našem případě je to jediná programová proměnná Preklad). Běžným řádkem se nyní stane druhý řádek výsledné tabulky atd. dokud tabulku neprojdeme celou. O tom, že jsme dosáhli poslední věty výsledku, nás informuje proměnná SQLCODE hodnotou 100. Po prozkoumání výsledné tabulky (přečtení, případně změně nebo zrušení řádků), je kurzor uzavřen povelem CLOSE. Máme-li ho použít znovu, musíme ho opět otevřít povelem OPEN. Podívejte se, jak by mohl vypadat dialog člověka s programem HLEDEJ:
Zkusili jste to? A ono to nechodí?
|