Architektury a techniky DS Cvičení č. 6 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Cvičení č. 6 – zadání I Nad tabulkami vytvořenými v minulých cvičeních proveďte následující úkony 1.Vytvořte balíček označený P_obce, v tomto balíčku vytvořte funkci kod_okresu(nazev_okresu) funkci kod_okresu(nazev_okresu) proceduru zobraz_obce(nazev_okresu) pro zobrazení obcí a jejich kódů v daném okresu na standardním výstupním zařízení, při řešení použijte cyklu FOR s implicitním kurzorem proceduru zobraz_obce(nazev_okresu) pro zobrazení obcí a jejich kódů v daném okresu na standardním výstupním zařízení, při řešení použijte cyklu FOR s implicitním kurzorem proceduru zobraz_nejednoznacne_obce, která zobrazí všechny obce, jejichž název se v seznamu obcí vyskytuje vícekrát, spolu s obcí bude zobrazen i okres, v kterém se nachází, při řešení použijte explicitního kurzoru s cyklem LOOP nebo WHILE proceduru zobraz_nejednoznacne_obce, která zobrazí všechny obce, jejichž název se v seznamu obcí vyskytuje vícekrát, spolu s obcí bude zobrazen i okres, v kterém se nachází, při řešení použijte explicitního kurzoru s cyklem LOOP nebo WHILE funkci nazev_okresu_kobce(kodobce), tato funkce bude využívat privátní funkci nazev_okresu(kod_okresu) funkci nazev_okresu_kobce(kodobce), tato funkce bude využívat privátní funkci nazev_okresu(kod_okresu) privátní funkci použitelnou jen uvnitř balíčku nazev_okresu(kod_okresu) privátní funkci použitelnou jen uvnitř balíčku nazev_okresu(kod_okresu)
Cvičení č. 6 – zadání II Do balíčku P_obce přidejte proceduru seznam_vybiranych_schranek(kod_obce, den_v_týdnu, čas_od, čas_do) pro zobrazení na standardním výstupním zařízení umístění všech schránek v dané obci, které jsou vybírány daný den v týdnu označený celým číslem (1.. pondělí) v intervalu časů čas_od.. čas_do, které jsou zadány ve formě řetězců např. ’10:30’ proceduru seznam_vybiranych_schranek(kod_obce, den_v_týdnu, čas_od, čas_do) pro zobrazení na standardním výstupním zařízení umístění všech schránek v dané obci, které jsou vybírány daný den v týdnu označený celým číslem (1.. pondělí) v intervalu časů čas_od.. čas_do, které jsou zadány ve formě řetězců např. ’10:30’
Cvičení č. 6 – zadání III 2. Vytvořte balíček P_domacnosti, který bude obsahovat minimálně funkci pocet_dom_okres(nazev_okresu), tato funkce bude využívat funkci kod_okresu(nazev_okresu) z balíčku P_obce funkci pocet_dom_okres(nazev_okresu), tato funkce bude využívat funkci kod_okresu(nazev_okresu) z balíčku P_obce funkci pocet_dom_obec, která vrátí počet domácností v obci daného názvu, pro případ, že název obce není jednoznačný, bude nutné zadat i název okresu funkci pocet_dom_obec, která vrátí počet domácností v obci daného názvu, pro případ, že název obce není jednoznačný, bude nutné zadat i název okresu
Cvičení č. 6 – zadání IV 3.Zjistěte závislosti mezi objekty Vámi vytvořenými v posledním měsíci a vložte je do tabulky CV08_zavislosti, která bude obsahovat sloupce name, type, referenced_name, referenced_type 4.Dejte právo všem uživatelům pro práci s oběma balíčky vytvořenými v rámci tohoto cvičení 5.Všechny objekty je nutné vytvořit ve Vašem schématu nejpozději do včetně, poté proběhne jejich automatická kontrola a ohodnocení
Balíčky – hlavička balíčku CREATE OR REPLACE PACKAGE AS PROCEDURE ( ); PROCEDURE ( ); PROCEDURE ( ); FUNCTION ( ) RETURNING ; END ;
Balíčky – tělo balíčku CREATE OR REPLACE PACKAGE BODY AS --======================================== PROCEDURE ( ) IS BEGIN ; END ; --======================================== PROCEDURE ( ) IS BEGIN ; END ; --======================================== FUNCTION ( ) RETURNING IS BEGIN ; END ; --======================================== END ;
Balíčky – tělo s privátní funkcí CREATE OR REPLACE PACKAGE BODY hidden_function AS --====================================== -- v hlavičce se neuvádí, v těle musí být uvedena dříve, než je poprvé použita FUNCTION encrypt_name(namein VARCHAR2) RETURN VARCHAR2 IS BEGIN RETURN TRANSLATE(namein, 'aeiou', 'uiaeo'); END encrypt_name; --====================================== PROCEDURE encrypt_name(namein VARCHAR2) IS val VARCHAR2(50); BEGIN val := encrypt_name(namein); dbms_output.put_line(val); END encrypt_name; --====================================== END hidden_function;
Balíčky – s inicializační sekcí CREATE OR REPLACE PACKAGE init_sect IS global_var VARCHAR2(50); FUNCTION dummy RETURN VARCHAR2; END init_sect; CREATE OR REPLACE PACKAGE BODY init_sect IS FUNCTION dummy RETURN VARCHAR2 IS BEGIN RETURN global_var; END dummy; --=============================== BEGIN SELECT 'Dan Morgan' INTO global_var FROM dual; END init_sect;