Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
ZveřejnilMarie Vacková
1
Databázové systémy 2 Cvičení č. 9 Ing. Tomáš Váňa (tomas.vana@student.upce.cz) 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í: – http://docs.oracle.com/cd/B19306_01/appdev.102/b14251/adfns_triggers.htm#CHDGIJDB http://docs.oracle.com/cd/B19306_01/appdev.102/b14251/adfns_triggers.htm#CHDGIJDB 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('21.02.2006','DD.MM.YYYY') FROM dual; SELECT TO_DATE('20.11.2011 14:15','DD.MM.YYYY HH24:MI') FROM dual; http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions180.htm 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('4.12.2011','MM/DD/YY') = „12/04/11“ TO_CHAR('21.12.2011','DDD') = „355“ TO_CHAR('21.12.2011', 'Q') = 4 http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions183.htm http://www.techonthenet.com/oracle/functions/to_char.php 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: – http://psoug.org/reference/date_func.html http://psoug.org/reference/date_func.html 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 21.1.2011 a první = 1 = 1.1.2011 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
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.