Gyakorlaton megoldandó kötelező feladat!!! ------------------------------------------ Hozzunk létre mind a két adatbázisban (ullman, aramis) egy GYAK10 nevű három oszlopos táblát, amely azoknak a dolgozóknak a nevét, belépési dátumát, és a belépési dátumuk napjának nevét (pl. hétfő) tartalmazza, akiknek a fizetése nagyobb az összes dolgozó átlagfizetésénél. Tipp: használják az alábbi nap_nev() nevű függvényt. Határidő: a gyakorlat napján 23:59 Az eddig elkészített kötelező feladataikat ellenőrizni tudják a következő SQL lekérdezés futtatásával: SELECT object_name "TABLE", created FROM user_objects WHERE object_type='TABLE' AND object_name LIKE 'GYAK%' ORDER BY object_name; =========================================================================== /* Összetettebb feladat, amely kis gondolkodással egyszerűsíthető Írjunk meg egy procedúrát, amely a következők szerint módosítja egyes dolgozók fizetését. Vegyük minden osztályon a legrégebben belépett dolgozót, és növeljük meg a fizetését annyiszor 100-zal, ahány dolgozó még rajta kívül az osztályon dolgozik. (Ha több legrégebben belépett dolgozó is van, akkor mindegyikük fizetését növeljük meg.) A módosítások után a program írja ki az új átlagfizetést két tizedesre kerekítve. A procedúra a kiírás után adjon ki egy ROLLBACK utasítást, hogy megmaradjanak az eredeti fizetések, így a procedúrát többször is futtatni tudják. */ CREATE OR REPLACE PROCEDURE fiz_mod IS Tesztelés: set serveroutput on execute fiz_mod(); ---------------------------------------------------------------- /* Módosítás kurzorral Írjunk meg egy procedúrát, amelyik módosítja a paraméterében megadott osztályon a fizetéseket, és kiírja a dolgozó nevét és új fizetését. A módosítás mindenki fizetéséhez adjon hozzá n*10 ezret, ahol n a dolgozó nevében levő magánhangzók száma (A, E, I, O, U). A procedúra a kiírás után adjon ki egy ROLLBACK utasítást, hogy megmaradjanak az eredeti fizetések, így a procedúrát többször is futtatni tudják. */ CREATE OR REPLACE PROCEDURE curs_upd(p_oazon INTEGER) IS Tesztelés: set serveroutput on execute curs_upd(10); ---------------------------------------------------------------- /* Exception Írjunk meg egy függvényt, amelyik egy karakteres típusú paraméterben egy dátumot kap a következő formátumban: 'éééé.hh.nn' vagy 'nn.hh.éééé'. A függvény adja vissza a nap nevét, pl. 'kedd'. Ha a megadott karakterlánc nem egy érvényes dátum, akkor adja vissza, hogy 'rossz'. */ CREATE OR REPLACE FUNCTION nap_nev(p_kar VARCHAR2) RETURN VARCHAR2 IS Tesztelés: SELECT nap_nev('2017.05.01'), nap_nev('02.05.2017'), nap_nev('2017.13.13') FROM dual; ---------------------------------------------------------------- /* Exception, SQLCODE Írjunk meg egy procedúrát, amelyik a paraméterében kapott számra külön sorokba kiírja annak reciprokát, négyzetgyökét, és faktoriálisát. Ha bármelyik nem értelmezhető vagy túlcsordulást okoz, akkor erre a részre írja ki a kapott hibakódot. (SQLCODE). */ CREATE OR REPLACE PROCEDURE szamok(n number) IS Tesztelés: set serveroutput on execute szamok(0); execute szamok(-2); execute szamok(40); ---------------------------------------------------------------- /* Írjunk meg egy függvényt, amelyik visszaadja a paraméterként szereplő '+'-szal elválasztott számok és kifejezések összegét. Ha valamelyik kifejezés nem szám, akkor azt az összeadásnál hagyja figyelmen kívül, vagyis 0-nak tekintse. */ CREATE OR REPLACE FUNCTION osszeg2(p_char VARCHAR2) RETURN NUMBER IS Tesztelés: SELECT osszeg2('1+21 + bubu + y1 + 2 + -1 ++') FROM dual; ----------------------------------------------------------------