Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

Architektury a techniky DS Cvičení č. 1 a 2 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky

Podobné prezentace


Prezentace na téma: "Architektury a techniky DS Cvičení č. 1 a 2 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky"— Transkript prezentace:

1 Architektury a techniky DS Cvičení č. 1 a 2 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky

2 Cíl cvičení - Konfigurace připojení k databázovému serveru - Přístup k databázovému serveru přes VPN - Práce s SQL Developerem - Seznámení s tabulkou A_POPIS ve vzorových schématech - Rekurzivní příkazy

3 Přístupová data na DS Oracle jméno serveru: SQL101.upceucebny.cz service name / connect string: oracle10 username: vaše_doménové_jméno (např. ST12345) password: při prvním přihlášení vaše_doménové_jméno velkými písmeny port: 1521 změna hesla ALTER USER st12345 IDENTIFIED BY nove_heslo

4 Připojení mimo síť Upce: 1. Přihlaste se na použijte svůj účet ve tvaru kde stxxxxx je vaše uživatelské jméno k systémům na síti Upce (knihovna, objednávky obědů, …) Vyčkejte, příp. potvrďte nainstalování ActiveX (nebo Javového) appletu. 3. Aktivujte VPN připojení do sítě Upce. 4. Poté můžete využít některou z možností přístupu, např.: –SSH přístup na server a konzolu SQLplus –iSQLplus z WWW prohlížeče –SQL Developer

5 iSQLplus Další možností je využití WWW prohlížeče pro práci s Oracle Možnosti: - nastavit vyšší šířku textového pole v Preferences - vložení skriptů s více SQL příkazy - přehledné zobrazení výsledků (s možností volby počtu řádků na stránku)

6 SQL Developer Další možností je využití freeware aplikace SQL Developer - dobrý nástroj, má však určité nedostatky - je třeba být opatrný při práci v PL/SQL - pozor na aktualizace (neprovádí se automaticky) - přehledná struktura objektů - práce i přes menu (netřeba zadávat textové příkazy pro některé operace)

7 SQL Developer Nástroj pro vizuální práci s databází Obdoba je například Toad for Oracle Toad for MySQL 2.0 Freeware - vytváření databázových objektů (průvodci) - vkládání a editace dat - kompilace funkcí a procedur - zadávání SQL příkazů - reporty, grafické zobrazení výsledku

8 SQL Developer - přehled

9 SQL Developer – SQL worksheet

10 SQL Developer – editace, kompilace

11 Častý problém - z hlediska transakčního zpracování dat je vhodné provedené změny v databázi potvrdit příkazem COMMIT a to i v prostředí SQL Developeru (buď stiskem tlačítka COMMIT nebo zapsáním příkazu COMMIT) - jinak jde totiž o rozpracovanou transakci, která -zabírá systémové prostředky -je možné ji vrátit zpět příkazem rollback -pokud nebude ukončena, může dojít i k automatickému návratu zpět (tedy ztrátě změn provedených od minulého příkazu commit) například při nekorektním ukončení připojení k databázovému serveru

12 Vzorová schémata - Na databázovém serveru je několik vzorových schémat, s nimiž budeme během semestru pracovat, tato schémata mají název „A_problematika“, např. A_CLOVEK - V těchto schématech je tabulka A_POPIS, která obsahuje -ve sloupci TEXT popis problematiky, která je v daném schématu řešena -ve sloupci ERD diagram ve formátu jpg souboru, který je možné zobrazit, případně i uložit

13 Cvičení 1 – úvodní část Vyzkoušejte připojení k serveru Oracle prostřednictvím SSH přístupu na server a konzoly SQLplus SSH přístupu na server a konzoly SQLplus iSQLplus z WWW prohlížeče iSQLplus z WWW prohlížeče SQL Developeru SQL Developeru Pro přihlášení používejte váš osobní účet.

14 Cvičení 1 Úkoly: Máme dánu ve schématu A_CLOVEK tabulku: Lide = (Id, jmeno, prijmeni, narozen, pohlavi, Id_otce, Id_matky) 1. zjistěte, kolik dětí má otce s ID=2 a matku s ID=3 2. zjistěte jména a příjmení všech vnoučat osoby Božena Malá 3. zjistěte počet vnoučat osoby Božena Malá 4. zjistěte průměrný počet dětí, které mají "plodné" páry (za pár uvažujte stejného otce a matku) 5. vypište počty dětí narozených v jednotlivých letech 2000 až 2005, uveďte i nulové hodnoty, pro řešení použijte PL/SQL – vytvořte proceduru narozeno_deti(od_roku, do_roku)

15 Hierarchické dotazy v Oracle SELECT sloupce FROM tabulka [WHERE podmínka3] START WITH podmínka1 CONNECT BY podmínka2 [ORDER BY …] SELECT sloupce FROM tabulka [WHERE podmínka3] START WITH podmínka1 CONNECT BY podmínka2 [ORDER BY …] Řádky vyhovující podmínce ve START WITH jsou považovány za kořenové řádky na první úrovni vnoření (pseudo-sloupec LEVEL nabývá hodnoty 1) Řádky vyhovující podmínce ve START WITH jsou považovány za kořenové řádky na první úrovni vnoření (pseudo-sloupec LEVEL nabývá hodnoty 1) Pro každou řádku na úrovni i se rekurzivně hledají přímí potomci vyhovující podmínce v klauzuli CONNECT BY na úrovni i+1 Pro každou řádku na úrovni i se rekurzivně hledají přímí potomci vyhovující podmínce v klauzuli CONNECT BY na úrovni i+1 –Řádka předka se v podmínce označuje klíčovým slovem PRIOR Na závěr jsou odstraněny řádky nevyhovující podmínce ve WHERE Na závěr jsou odstraněny řádky nevyhovující podmínce ve WHERE Pokud není definováno třídění, odpovídá pořadí průchodu pre-order Pokud není definováno třídění, odpovídá pořadí průchodu pre-order Každý řádek obsahuje pseudo-sloupec LEVEL, obsahující úroveň řádku v hierarchii Každý řádek obsahuje pseudo-sloupec LEVEL, obsahující úroveň řádku v hierarchii

16 Příklad hierarchických dotazů SELECT ZAMESTNANEC_ID, JMENO, PRIJMENI, MANAZER_ID, LEVEL FROM A_HR.ZAMESTNANCI CONNECT BY MANAZER_ID = PRIOR ZAMESTNANEC_ID CONNECT BY MANAZER_ID = PRIOR ZAMESTNANEC_ID START WITH MANAZER_ID is null; START WITH MANAZER_ID is null; Sloupce, přes které je hierarchie provázána určuje klauzule CONNECT BY. Klauzule PRIOR říká, že se pole MANAZER_ID má porovnávat s polem ZAMESTNANEC_ID nadřízeného (tedy "předchozího") záznamu v hierarchii. Sloupce, přes které je hierarchie provázána určuje klauzule CONNECT BY. Klauzule PRIOR říká, že se pole MANAZER_ID má porovnávat s polem ZAMESTNANEC_ID nadřízeného (tedy "předchozího") záznamu v hierarchii. Klauzule START WITH definuje podmínku určující záznamy v první úrovni hierarchie. V tomto případě je nejvyšší manažer definován tak, že nemá vyplněné pole MANAZER_ID. Klauzule START WITH definuje podmínku určující záznamy v první úrovni hierarchie. V tomto případě je nejvyšší manažer definován tak, že nemá vyplněné pole MANAZER_ID. Viz také např. ZAMESTNANEC_IDJMENOPRIJMENIMANAZER_IDLEVEL 100StevenKing(null)1 201MichaelHartstein PatFay NeenaKochhar JenniferWhalen SusanMavris HermannBaer ShelleyHiggins WilliamGietz NancyGreenberg DanielFaviet JohnChen1084

17 Příklad hierarchických dotazů Pseudosloupec LEVEL určuje úroveň daného záznamu v hierarchii. Můžete jej mimo jiné jednoduše použít pro formátování výstupu: SELECT lpad(' ',level*3)||PRIJMENI||' '||JMENO name, ZAMESTNANEC_ID, MANAZER_ID, level ZAMESTNANEC_ID, MANAZER_ID, level FROM A_HR.ZAMESTNANCI FROM A_HR.ZAMESTNANCI CONNECT BY MANAZER_ID = PRIOR ZAMESTNANEC_ID CONNECT BY MANAZER_ID = PRIOR ZAMESTNANEC_ID START WITH MANAZER_ID is null START WITH MANAZER_ID is null ORDER SIBLINGS BY PRIJMENI; ORDER SIBLINGS BY PRIJMENI; Uvedený příklad ukazuje způsob, jakým lze ovlivnit řazení záznamů na jednotlivých úrovních – jde o klauzuli ORDER SIBLINGS BY. Běžnou klauzuli ORDER BY provádí Oracle až úplně nakonec – tedy přes všechny záznamy, čímž by způsobila, že by již záznamy vizuálně netvořily hierarchii.

18 Příklad hierarchických dotazů NAMEZAMESTNANEC_IDMANAZER_IDLEVEL King Steven1001 Cambrault Gerald Bates Elizabeth Bloom Harrison Fox Tayler Kumar Sundita Ozer Lisa Smith William De Haan Lex Hunold Alexander Austin David Ernst Bruce Lorentz Diana Pataballa Valli SELECT lpad(' ',level*3)||PRIJMENI||' '||JMENO name, ZAMESTNANEC_ID, MANAZER_ID, level FROM A_HR.ZAMESTNANCI CONNECT BY MANAZER_ID = PRIOR ZAMESTNANEC_ID START WITH MANAZER_ID is null ORDER SIBLINGS BY PRIJMENI;

19 Doplnění hierarchických dotazů Pro jednotlivé záznamy můžete také získat cestu od nejvyššího záznamu (jak to znáte třeba ze souborového systému) nebo řadu dalších informací: Pro jednotlivé záznamy můžete také získat cestu od nejvyššího záznamu (jak to znáte třeba ze souborového systému) nebo řadu dalších informací: Funkce SYS_CONNECT_BY_PATH vrací cestu v hierarchii k aktuálnímu záznamu. Funkce SYS_CONNECT_BY_PATH vrací cestu v hierarchii k aktuálnímu záznamu. Klauzule CONNECT_BY_ROOT vrací hodnotu z příslušného záznamu nejvyšší úrovně (tj. například nejvyššího manažera). Klauzule CONNECT_BY_ROOT vrací hodnotu z příslušného záznamu nejvyšší úrovně (tj. například nejvyššího manažera). Pokud byste chtěli výstup z dotazu použít pro zobrazení ve formě rozbalovací hierarchie tak, jak to třeba dělá u souborů Windows Explorer, bude se vám hodit i pseudosloupec CONNECT_BY_ISLEAF, který určuje, zda je aktuální záznam na poslední úrovni hierarchie (CONNECT_BY_ISLEAF=1) nebo zda má podřízené záznamy (CONNECT_BY_ISLEAF=0). Pokud byste chtěli výstup z dotazu použít pro zobrazení ve formě rozbalovací hierarchie tak, jak to třeba dělá u souborů Windows Explorer, bude se vám hodit i pseudosloupec CONNECT_BY_ISLEAF, který určuje, zda je aktuální záznam na poslední úrovni hierarchie (CONNECT_BY_ISLEAF=1) nebo zda má podřízené záznamy (CONNECT_BY_ISLEAF=0).

20 Příklad hierarchických dotazů SELECT lpad(' ',level*3)||PRIJMENI||' '||JMENO name, SYS_CONNECT_BY_PATH(PRIJMENI, '/') path, CONNECT_BY_ROOT PRIJMENI topmgr, CONNECT_BY_ISLEAF isleaf, level FROM A_HR.ZAMESTNANCI CONNECT BY MANAZER_ID = PRIOR ZAMESTNANEC_ID START WITH MANAZER_ID is null ORDER SIBLINGS BY PRIJMENI; NAMEPATHTOPMGRISLEAFLEVEL King Steven/KingKing01 Cambrault Gerald/King/CambraultKing02 Bates Elizabeth/King/Cambrault/BatesKing13 Bloom Harrison/King/Cambrault/BloomKing13 Fox Tayler/King/Cambrault/FoxKing13 Kumar Sundita/King/Cambrault/KumarKing13 Ozer Lisa/King/Cambrault/OzerKing13 Smith William/King/Cambrault/SmithKing13 De Haan Lex/King/De HaanKing02 Hunold Alexander/King/De Haan/HunoldKing03 Austin David/King/De Haan/Hunold/AustinKing14

21 Cvičení 2 Úkoly: Máme dánu ve schématu A_CLOVEK tabulku: Lide = (Id, jmeno, prijmeni, narozen, pohlaví, Id_otce, Id_matky) Úkoly řešte a) pomocí příkazu SELECT s klauzulí START WITH pro rekurzivní spojení b) Pomocí PL/SQL – viz funkce níže pro příklad 2 bez využití rekurzivního SELECTu 1. zjistěte jména a příjmení všech dětí, vnoučat a pravnoučat osoby Božena Malá, u každé osoby uveďte vztah (dítě, vnouče, pravnouče) PL/SQL: procedura vypis_potomky(jmeno, prijmeni) 2. zjistěte, kolik dětí, vnoučat a pravnoučat má Božena Malá (výsledkem tohoto dotazu je více čísel podle vztahu) PL/SQL: procedura vypis_pocty_potomku(jmeno, prijmeni) Pro řešení vytvořte funkci: pocet_nasledniku(id_osoby IN INT, uroven IN INT)


Stáhnout ppt "Architektury a techniky DS Cvičení č. 1 a 2 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky"

Podobné prezentace


Reklamy Google