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

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

Databázové systémy 2 Cvičení č. 9 Ing. Tomáš Váňa Fakulta elektrotechniky a informatiky Univerzita Pardubice.

Podobné prezentace


Prezentace na téma: "Databázové systémy 2 Cvičení č. 9 Ing. Tomáš Váňa Fakulta elektrotechniky a informatiky Univerzita Pardubice."— Transkript prezentace:

1 Databázové systémy 2 Cvičení č. 9 Ing. Tomáš Váňa Fakulta elektrotechniky a informatiky Univerzita Pardubice

2 Obsah cvičení -Opakování (procedury, funkce, balíčky) -Triggery pro klientské události -Práce s datem Databázové systémy 2 – cvičení 9 2

3 Triggery pro klientské události Vyvolány konkrétní událostí nad uživatelovým schématem (CREATE, GRANT, REVOKE, TRUNCTE, …) Kompletní výčet událostí: – Atributy triggerů nad klientskými událostmi. - Atributy blíže popisují událost, ke které došlo. Viz tabulka : Databázové systémy 2 – cvičení 9 3 Název atributuPopis ora_syseventTyp události (CREATE,LOGON,DROP,…) ora_login_userUživatel, který akci provedl. ora_dict_obj_nameNázev databázového objektu. ora_dict_obj_typeTyp databázového objektu. ora_dict_obj_ownerVlastník objektu.

4 Oracle a datum Datový ty DATE. Základní funkce: – TO_DATE - Provede převod ze znakového datového typu na datový typ DATE. – TO_CHAR - Převede datový typ DATE na znakovou reprezentaci. – SYSDATE - Vrátí aktuální datum. – ROUND - Funkce vrátí zaokrouhlené datum ke specifické jednotce (měsíc, rok, …). – TRUNC - Funkce provede „oříznutá“ data ke specifické jednotce. – MIN, MAX - Nalezení nejmenšího a největšího data. Databázové systémy 2 – cvičení 9 4

5 TO_DATE: – TO_DATE(, [ format_mask ], [ nls_language ]) string1 - řetězce, který chceme převést na datum. format_mask - maska pro námi zadaný řetězec nls_language - maska se vybere podle národního nastavení databáze SELECT TO_DATE(' ','DD.MM.YYYY') FROM dual; SELECT TO_DATE(' :15','DD.MM.YYYY HH24:MI') FROM dual; Databázové systémy 2 – cvičení 9 5 Oracle a datum

6 TO_CHAR: – TO_CHAR(, [ format_mask ], [ nls_language ]) date - datum, které konvertujem na řetězec. format_mask - maska formátu výstupního řetězce. nls_language - maska se zvolí dle národního nastavení databáze. TO_CHAR(' ','MM/DD/YY') = „12/04/11“ TO_CHAR(' ','DDD') = „355“ TO_CHAR(' ', 'Q') = 4 Databázové systémy 2 – cvičení 9 6 Oracle a datum

7 Aritmetika – Ve spojení s daty můžeme využívat operátory + a - – Příklady: + Přičte daný počet (integer) dní k datu (date) - Odečte daný počet dní od data - Vrátí rozdíl (ve dnech) mezi oběma daty. + NELZE Další příklady práce s type DATE: – Databázové systémy 2 – cvičení 9 7 Oracle a datum

8 Příklady Vytvořte balíček CV9_DATUMY. V rámci balíčku vytvořte následující funkce: – Funkce datumy_rozdil(datum_od DATE, datum_do DATE, typ CHAR) Návratovým typem je datový typ NUMBER. Funkce vrátí časový rozdíl mezi zadanými daty dle zvoleného typu. Typ může nabývat hodnot D (Dny), H (Hodiny), M (Minuty) a S (Sekundy). Výsledek zaokrouhlete na dvě desetinná místa. Ověřte, zda byly vyplněny oba datumy a v parametru typ je zadána přípustná hodnota. V případě že nebude dodrženo, funkce skončí výjimkou s textem „Špatné prarametry” Databázové systémy 2 – cvičení 9 8

9 Příklady Pokračovaní balíčku CV9_DATUMY: – Funkce pracovni_den(datum DATE) Návratový typ NUMBER. Funkce určí, zda zadané datum je pracovním dnem (funkce vrátí 1) či nikoliv (0). Zanedbejte svátky. (Tedy pokud byl svátek v pracovní den, pro funkci je to stále pracovní den). – Funkce den_v_mesici(datum DATE, prvni NUMBER) Návratový typ DATE. Funkce vrátí datum, jenž bude prvním dnem měsíce (první = 1) či posledním dnem v měsíci (první = 0) vzhledem k zadanému datu. Př. datum a první = 1 = Databázové systémy 2 – cvičení 9 9

10 Příklady Vytvořte pohled cv9_trpaslici_tezby_sum(JMENO VARCHAR2, VYTEZENO NUMBER, DEN_TYP VARCHAR2) – Pohled vytvoří přehled, ve kterém bude celkový souhrn vytěžené rudy pro každého trpaslíka a typ dne (Po-Pá/So-Ne). – Pro určení typu dne můžete využít funkci z vašeho balíčku cv9_datumy. – Pohled seřaďte vzestupně dle jména trpaslíka. Databázové systémy 2 – cvičení 9 10

11 Příklady Vytvořte funkci CV9_TEZBY_PREDPOVED (P_ID_TRPASLIKA NUMBER, P_DATUM_OD DATE, P_DATUM_DO DATE ) RETURN NUMBER – Funkce vypočte odhad vytěžené rudy v zadaném období (p_datum_od - p_datum_do) a u vybraného trpaslíka na základě historických těžeb v tabulce A_SNEHURKA.TEZBY. – Jako základ pro výpočet použijte průměr vytěžených kg na kalendářní den v únoru 2006 – Ve funkci zkontrolujte, zda jsou vyplněny všechny parametry. Pokud nejsou, pak funkce skončí výjimkou. Výjimka bude obsahovat text: „Špatné parametry“ Databázové systémy 2 – cvičení 9 11

12 Příklady Pokračování CV9_TEZBY_PREDPOVED – Dále zkontrolujte, zda datum_od není větší než datum_do. Pokud bude, pak funkce skončí výjimkou. Textem výjimky bude: „Datum od je větší než datum do!“. – Dále zajistěte, aby zadané období nekolidovalo s pracovním obdobím zadaného trpaslíka. Pokud bude, vyvolejte výjimku s textem: „ Zadaný rozsah spadá do pracovního období trpaslíka! “ Za začátek pracovního období se považuje první den kdy trpaslík pracoval na šachtě, jako poslední den období se volí poslední den v záznamu těžeb. Databázové systémy 2 – cvičení 9 12

13 Příklady Vytvořte proceduru CV9_TRPASLICI_PREDPOVED (P_DATUM_OD DATE, P_DATUM_DO DATE ) – Procedura na standardní výstup vypíše s pomocí funkce CV9_TEZBY_PREDPOVED předpověď pro všechny trpaslíky v zadaném období. – Zajistěte, aby procedura vždy vypsala všechny trpaslíky, bez ohledu na to, zda volání funkce CV9_TEZBY_PREDPOVED skončilo výjimkou. Pokud skončí výjimkou, tak u daného trpaslíka zobrazte text: „Chyba při výpočtu“. – Pokud uživatel nevyplní datum_od či datum_do, tak je nahraďte aktuálním datem. – Předpovídané množství zaokrouhlete na jedno desetinné místo. – Výstup procedury zhotovte dle příkladů na následující stránce. – Dodržte formátovaní včetně odsazení. Databázové systémy 2 – cvičení 9 13

14 Příklady Databázové systémy 2 – cvičení 9 14

15 Příklady Vytvořte tabulku cv9_my_actions ( uzivatel VARCHAR2(50) NOT NULL, udalost VARCHAR2(50) NOT NULL, typ_objektu VARCHAR2(50), nazev_objektu VARCHAR2(50), datum TIMESTAMP); Databázové systémy 2 – cvičení 9 15

16 Příklady Vytvořte trigger cv9_trigger_ddl, který bude do tabulky cv9_my_actions ukládat informace o všech DDL operacích provedených ve vašem schématu. Tímto triggerem naplňte všechny sloupce tabulky cv9_my_actions. Vytvořte triggery CV9_TRG_LOGON a CV9_TRG_LOGOFF, které budou zaznamenávat vaše přihlášení a odhlášení do schématu. Tyto informace zapisujte opět do tabulky cv9_my_actions (sloupce typ_objektu a nazev_objektu nechte prázdné). Ukázka tabulky cv9_my_actions je na následující stránce. Databázové systémy 2 – cvičení 9 16

17 Příklady Databázové systémy 2 – cvičení 9 17

18 Příklady Po vyřešení a odzkoušení funkce všech vytvořených databázových objektů v rámci tohoto zadání deaktivujte všechny vámi vytvořené triggery. Obsah tabulky cv9_my_actions ponechejte (předpokládá se, že je neprázdný a jsou v ní řádky ohledně přihlášení, odhlášení a DDL operacích). Databázové systémy 2 – cvičení 9 18

19 cvičení 9 – kontrola Všechny databázové objekty z tohoto cvičení vytvořte se svém schématu. Pro splnění cvičení je nutné, aby všechny objekty byly správně vytvořeny a funkční do půlnoci dne před následujícím cvičením. Databázové systémy 2 – cvičení 9 19


Stáhnout ppt "Databázové systémy 2 Cvičení č. 9 Ing. Tomáš Váňa Fakulta elektrotechniky a informatiky Univerzita Pardubice."

Podobné prezentace


Reklamy Google